[转帖]IPv6地址解析库,窥探IPv6地址中包含的信息
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) for x in mac])
def convert(ip):
mask64 = (1 << 64) - 1
mask24 = (1 << 24) -1
try:
ip_int = IPy.IP(ip).int()
except Exception as e:
# print(e)
return
else:
pass
finally:
pass
if check_fffe(ip_int):
ip_int = ip_int ^ (1 << 57)
ip_int = ip_int & mask64
# print(hex(ip_int))
oui = (ip_int & mask24)
last24 = (((ip_int >> (24 + 16))&mask24) << 24)
mac = oui + last24
# print(hex(mac))
# print(".", end="")
return convert_hex2mac(mac)
else:
return None
from collections import defaultdict
if __name__ == "__main__":
oui_set = defaultdict(int)
mac_set = set()
if args.file:
with open(args.file) as f:
for line in f:
ip = line.strip("\n").split(",")[0]
mac = convert(ip)
if mac:
mac_set.add(mac)
if args.ip:
ip = args.ip.strip("\n").split(",")[0]
mac = convert(ip)
if mac:
mac_set.add(mac)
mac = " ".join([m for m in mac_set])
# print(mac)
mac_result = OuiLookup().query(mac)
# print(ip, mac, mac_result)
# print(mac_result)
# import pdb; pdb.set_trace()
for result in mac_result:
vendor = list(result.values())[0]
# oui_set.add(vendor)
oui_set[vendor] += 1
# if vendor:
# print(vendor, result)
if mac_set:
print(oui_set)
print(mac_set)
[转帖]IPv6地址解析库,窥探IPv6地址中包含的信息的更多相关文章
- ipv6地址在URL中的表达方式,如何在URL地址中包含ipv6地址
摘要 本文档定义了在WWW浏览器的URL中执行的文本IPv6地址的格式.在包括Microsoft的IE,Mozilla和Lynx等几个已经被广泛安装使用的浏览器的IPv6版本中,这种格式已经被使用.并 ...
- SVN如何将版本库url访问地址中的https改为http
1.选择控制台树中的根节点,右键选择“属性”. 2.切换至面板“网络”. 3.取消勾选项“使用安全连接协议(https://)”.
- 解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题
在使用Apache地址重写mod_rewrite期间,发现,当URL和PATH_INFO中出现%2f(/)或者%5c(\), 会被认为这是个不合法的请求, Apache将会直接返回"404 ...
- IPV6地址中的%号什么意思
在我配置ipv6 网络中,会发现ipv6地址后有%号,这表示什么呢? IPv6地址中的百分号是网卡interface标识.这个表示该地址仅限于标号为21的网络接口(一般指网卡或者虚拟网卡).而在其他网 ...
- nginx实现Ipv6地址解析
nginx实现Ipv6地址解析 1.nginx实现Ipv6地址解析 [root@ip-10-109-1-47 conf]# cat nginx.conf worker_processes 2; eve ...
- iOS 上线因iPv6被拒,查询服务器是否支持iPv6,mac设置iPv6网络,手机测试iPv6
一. iOS----如何检查域名是否支持ipv6 iOS----------如何检查域名是否支持ipv6 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧 ...
- [CB]IPv6 在中国 - 大规模部署进行中 进展明显
IPv6 在中国 - 大规模部署进行中 进展明显 2019年02月04日 08:21 3078 次阅读 稿源:solidot 0 条评论 中国有着世界上最大的网民人口,但它的 IPv6 普及度却处于世 ...
- IPv6地址格式示例及IPv6与IPv4的区别分析
认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示: 而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是128 ...
- 光猫和路由器都支持ipv6,却无法使用ipv6?
这些年很多地方的光猫都能获得ipv6地址了,而且新出的路由基本都支持ipv6,但是还是有很多人在http://test-ipv6.com看不到自己的ipv6地址,也上不了ipv6网站. 我也遇到这个问 ...
- Redrain个人维护并使用的DuiLib和UiLib库源代码下载地址
转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~ 首先说明一下Duilib和Uilib的差别:UiLIb是D ...
随机推荐
- 跟我学丨如何用鲲鹏服务器搭建Hadoop全分布式集群
摘要:今天教大家如何利用鲲鹏服务器搭建Hadoop全分布式集群,动起来··· 一.Hadoop常见的三种运行模式 1.单机模式(独立模式)(Local或Standalone Mode) 默认情况下Ha ...
- SecSolar:为代码“捉虫”,让你能更专心写代码
摘要:在"更健壮.更安全"的路上,CloudIDE又迈出了关键的一步:推出了代码安全检测服务SecSolar,以轻量插件的形式,为代码"捉虫",帮助企业和开发者 ...
- 零售品牌如何挑选达人 KOL?火山引擎 VeDI 有妙招!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 国内消费市场正在发生一些新变化. 近日,由中国人民大学国家发展与战略研究院.经济学院等联合主办的第 57 期宏观经 ...
- Solon2 开发之IoC,六、提取 Bean 的函数进行定制开发
为什么需要提取Bean的函数?绝不是闲得淡疼.比如:控制器的@Mapping:再比如:Xxl-Job的@XxlJob.这些都是要提取Bean的函数并定制加工的. 1.比如提取 @XxlJob 注解的函 ...
- LiveData的用法
一.实时数据LiveData 在上一节中,我们学习了ViewModel,了解到ViewModel的主要作用是存放页面所需要的各种数据.我们在示例代码中定义了接口,当数据发生变化的时候,采用接口的方式实 ...
- C# NLog 配置
首先用NuGet安装NLog依赖DLL NLog NLog.Config NLog.Schema NLog配置文件NLog.config: <?xml version="1.0&quo ...
- Codeforce:208A. Dubstep (字符串处理,正则表达式)
Vasya works as a DJ in the best Berland nightclub, and he often uses dubstep music in his performanc ...
- 【每日一题】20.K-th Number (二分 + 尺取)
关于此题,我们分析一下: 一个区间第k大的数不小于x的条件是什么? 答案就是一个区间内不小于x的数的个数不小于k 那么,我们就会发现,我们其实并不需要知道每个数的值,实际上对我们有用的只有每个数与x的 ...
- 你以为这是MacOS ,其实这是我的 Linux 系统 Manjaro!
对于如何将你的 Manjaro 系统美化成 MacOS 你需要做以下几件事情: 1.安装 WhiteSur-Gtk-theme 主题. 2.安装 Plank 软件. 3.安装 vala-panel-a ...
- the server responded with a status of 413 (Request Entity Too Large) 解决
前端上传文件,本地测试好的,放到服务器上出现了这个错误:the server responded with a status of 413 (Request Entity Too Large) 问题原 ...