https://zhuanlan.zhihu.com/p/479028720
大家好,我是明说网络的小明同学。
今天和大家介绍一个IPv6 地址解析库IPv6 address Parser :https://github.com/dianwoshishi/ipv6_address_parser.git
众所周知,互联网正在向IPv6大步迈迈进,很多基础服务已经开始向IPv6迁移。
但是,相比IPv4来说,我们对于IPv6并不熟悉。大部分人知道的仅仅是IPv6有128bit长,有用不完的空间,仅此而已。
但是IPv6从设计上来说,绝对比IPv4要漂亮,毕竟是吸收了几十年v4的经验,才推出的版本,并且现在还在不断完善。
IPv6的话题非常的大,今天主要想分享的是关于IPv6地址的那些事。
提个问题吧,"fe80::2aa:ff:fe3f:2a1c",从这个地址中能看到的信息有哪些?
现在公布答案
这是一个本地链路地址(不能被公网访问到),并且主机标识部分使用的IEEE的EUI64地址(也就是我们常说的嵌入了mac地址的地址),这个IPv6地址暴露了链路层的mac信息,根据IEEE的OUI信息,我们可以查到这个网卡是INTEL生产的。是不是很神奇!
当然了,我自己是记不住这么多信息的,query的事必须交给计算机去做,又快又准!
ipv6 = "fe80::2aa:ff:fe3f:2a1c"
ipstat = IPstat(ipv6)
print(ipstat.get_ip_type())
mac_address = ipstat.get_mac_address()
print(mac_address.get_mac()) print(mac_address.get_org())
这个库给出的信息如下所示:
unicast=link-local=link=ieee-derived=00-aa-00
00AA003F2A1C
INTEL CORPORATION
解析EUI64地址 Python 代码
#!/bin/python3
import IPy
import sys
from OuiLookup import OuiLookup
import argparse
parser = argparse.ArgumentParser(description='ipv6 fffe parser')
#type是要传入的参数的数据类型 help是该参数的提示信息
parser.add_argument('--file', type=str, help='file to parser')
parser.add_argument('--ip', type=str, help='ip to parser')
args = parser.parse_args()
# filename=sys.argv[1]
# ip = "2a01:c22:d200:fee7:2e91:abff:fed8:c40a"
# OuiLookup().update()
def check_fffe(ip):
f1 = (ip >> (6 * 4 + 3)) & 0xf == 0xf
f2 = (ip >> (6 * 4 + 2)) & 0xf == 0xf
f3 = (ip >> (6 * 4 + 1)) & 0xf == 0xf
e4 = (ip >> (6 * 4 + 0)) & 0xf == 0xe
return f1 and f2 and f3 and e4
def convert_hex2mac(hexstr):
m1 = (hexstr >> (0 * 8)) & 0xff
m2 = (hexstr >> (1 * 8)) & 0xff
m3 = (hexstr >> (2 * 8)) & 0xff
m4 = (hexstr >> (3 * 8)) & 0xff
m5 = (hexstr >> (4 * 8)) & 0xff
m6 = (hexstr >> (5 * 8)) & 0xff
mac = [m6,m5,m4,m3,m2,m1]
return ":".join([hex(x)[2:].zfill(2