Skip to content

Instantly share code, notes, and snippets.

@fatefox
Last active August 29, 2015 14:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fatefox/3368661cd658c1e55d52 to your computer and use it in GitHub Desktop.
Save fatefox/3368661cd658c1e55d52 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
#-*- coding:utf-8 -*-
import time
import hashlib
ndate=[]
dates=format(int(time.time()),'x')
dates = ":".join(str(dates))
#print dates
dates=dates.split(":")
for num in range(0,8,2):
ndate.append(dates[num]+dates[num+1])
ntpdate=":".join(ndate)
#print ntpdate
cmacaddr=[]
print("input MAC")
macaddr=raw_input(">>")
#print macaddr #debug
smacaddr=macaddr.split(":")
#print "smacaddr=" #debug
#print smacaddr #debug
smacaddr.insert(3,"ff")
smacaddr.insert(4,"fe")
rebit=".".join(smacaddr[0])
rebit=rebit.split(".")
#print rebit #bit反転
rebitd=format(int(rebit[1]),'b')
#print rebitd #bit反転
rebits=".".join(rebitd)
#print rebits #bit反転
rebits=rebits.split(".")
if(int(rebit[1])>=4 and int(rebit[1])<8):
rebits.insert(0,"0")
elif(int(rebit[1])>1 and int(rebit[1])<4):
rebits.insert(0,"0")
rebits.insert(1,"0")
elif(int(rebit[1])==1 or int(rebit[1])==0):
rebits.insert(0,"0")
rebits.insert(1,"0")
rebits.insert(2,"0")
#Pythonのbinary変換時の先頭が0bitの場合の省略への対策としての分岐処理
if(int(rebits[2])==1):
rebits[2]='0'
else:
rebits[2]='1'
#bit反転処理
#print rebits
hoge = rebits[0]+rebits[1]+rebits[2]+rebits[3]
#print hoge
#bit単位に分解された値を連結する
#print smacaddr[0]
#print rebit[0]
swap=hex(int(hoge,2))[2:]
#print swap
smacaddr[0]=rebit[0]+str(swap)
#print smacaddr[0]
cache=format(int(smacaddr[0],16),'b')
#print cache
#print hex(int(cache,2))
for i in range(0,8,2):
cmacaddr.append(smacaddr[i]+smacaddr[i+1])
homu=":".join(smacaddr)
print "EUI-64 : %s"% homu
#print ":".join(cmacaddr)
#EUI-64の生成
neui64=ndate+smacaddr
#print neui64
#neui64=":".join(neui64)
neui64="".join(neui64)
#print neui64
ulahash=hashlib.sha1(neui64).hexdigest()
#print ulahash
#print len(ulahash)
ulagro=":".join(ulahash[30:])
#print ulagro
ulagro=ulagro.split(":")
#print ulagro
ulas=[]
for i in range(0,10,2):
ulas.append(ulagro[i]+ulagro[i+1])
#print ulas
ulas.insert(0,"fd")
#print ulas
myula=[]
for i in range(0,6,2):
myula.append(ulas[i]+ulas[i+1])
myula=":".join(myula)
print "ULA: %s::/48" % myula
#ULA生成(オリジナルのIPv6アドレスのご誕生)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment