[转帖]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 ...
随机推荐
- GaussDB(for MySQL)新特性TDE发布:支持透明数据加密
本文分享自华为云社区<GaussDB(for MySQL)新特性TDE发布:支持透明数据加密>,作者: GaussDB 数据库. 技术背景 为了保护数据的安全,我们可能通过防火墙.身份认证 ...
- KubeCon China 2023 | 拥抱开源,华为云原生华彩绽放
本文分享自华为云社区<KubeCon China 2023 | 拥抱开源,华为云原生华彩绽放>,作者: 云容器大未来 . 2023 年度云原生全球旗舰盛会 KubeCon + CloudN ...
- Python压缩JS文件,重点是 slimit
摘要:Python Web程序员必看系列,学习如何压缩 JS 代码. 本文分享自华为云社区<Python压缩JS文件,PythonWeb程序员必看系列,重点是 slimit>,作者: 梦想 ...
- 从java到JavaScript(2):对比Java/Go/Swift/Rust看Dart
Dart与Java的一些直观区别 Dart和java以及C#都差不多,基本上不用学习可以直接使用,从这里可以你可以了解Dart有些特别之处.其实对于Java开发人员来说Dart,还是相对好理解的 基本 ...
- CentOS7与centOS8的抉择
目前国内各大云服务器的默认centos 系统版本还是7,vultr,centos只有8了 官网,下载,默认也是8,作为本地主机玩的服务器,还是试一下centos8 国外下载之前版本,下载链接: 官网默 ...
- 火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 自上世50年代,以"计算机"作为代表性象征的信息革命开始,社会对于先进生产力的认知便开始逐 ...
- 接通率维持 66% 以上,为什么火山引擎 VeDI 能让企业智能外呼不再难?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 智能机器人在企业级市场的应用更加深入了. 随着人工智能技术的进一步发展,包括智能外呼.财务审核.自助客服等在内的智 ...
- Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量.参数引用 要用双引号 在 Pipeline 脚本中,如果要使用变量,就必须使用 " 双引号 pipeline { ag ...
- ThreadPoolExecutor 线程执行超时,释放线程
如果线程中的执行时间过长,导致长时间被占用,可以通过新建一个子线程,来监控主线程的执行超时时间,如果超时了,通过子线程杀掉父线程 (主意,父线程被杀后,子线程还会活着) 子线程杀掉主线程 这个问题其实 ...
- VS 2019 目标框架中看不到 Net Core 3.X
VS 2019 目标框架中没有 .NET Core 3.X..Net 5.0 https://dotnet.microsoft.com/download/dotnet-core/3.0 Visual ...