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地址中包含的信息的更多相关文章

  1. ipv6地址在URL中的表达方式,如何在URL地址中包含ipv6地址

    摘要 本文档定义了在WWW浏览器的URL中执行的文本IPv6地址的格式.在包括Microsoft的IE,Mozilla和Lynx等几个已经被广泛安装使用的浏览器的IPv6版本中,这种格式已经被使用.并 ...

  2. SVN如何将版本库url访问地址中的https改为http

    1.选择控制台树中的根节点,右键选择“属性”. 2.切换至面板“网络”. 3.取消勾选项“使用安全连接协议(https://)”.

  3. 解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题

    在使用Apache地址重写mod_rewrite期间,发现,当URL和PATH_INFO中出现%2f(/)或者%5c(\), 会被认为这是个不合法的请求, Apache将会直接返回"404 ...

  4. IPV6地址中的%号什么意思

    在我配置ipv6 网络中,会发现ipv6地址后有%号,这表示什么呢? IPv6地址中的百分号是网卡interface标识.这个表示该地址仅限于标号为21的网络接口(一般指网卡或者虚拟网卡).而在其他网 ...

  5. nginx实现Ipv6地址解析

    nginx实现Ipv6地址解析 1.nginx实现Ipv6地址解析 [root@ip-10-109-1-47 conf]# cat nginx.conf worker_processes 2; eve ...

  6. iOS 上线因iPv6被拒,查询服务器是否支持iPv6,mac设置iPv6网络,手机测试iPv6

    一. iOS----如何检查域名是否支持ipv6 iOS----------如何检查域名是否支持ipv6 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧 ...

  7. [CB]IPv6 在中国 - 大规模部署进行中 进展明显

    IPv6 在中国 - 大规模部署进行中 进展明显 2019年02月04日 08:21 3078 次阅读 稿源:solidot 0 条评论 中国有着世界上最大的网民人口,但它的 IPv6 普及度却处于世 ...

  8. IPv6地址格式示例及IPv6与IPv4的区别分析

    认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示: 而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是128 ...

  9. 光猫和路由器都支持ipv6,却无法使用ipv6?

    这些年很多地方的光猫都能获得ipv6地址了,而且新出的路由基本都支持ipv6,但是还是有很多人在http://test-ipv6.com看不到自己的ipv6地址,也上不了ipv6网站. 我也遇到这个问 ...

  10. Redrain个人维护并使用的DuiLib和UiLib库源代码下载地址

    转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~ 首先说明一下Duilib和Uilib的差别:UiLIb是D ...

随机推荐

  1. 什么?语音合成开源代码不会跑,follow me!

    摘要:本文描述的深度神经网络模型结构:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions. 本文 ...

  2. 开心档之CSS 测验

    ​ 目录 CSS 测验 ​编辑 CSS 测验 CSS测验是一种衡量前端开发人员对CSS的熟练程度的测试.通过CSS测验,可以评估一个人对CSS语言的掌握程度和应用能力,帮助公司或招聘方挑选合适的人才. ...

  3. Solon2 接口开发: 熟悉 Gateway

    Gateway 是 Solon 框架的特殊控制器(也是Handler 的一个实现类).它通过注册收集之后,在局部范围内提供:二级路由.拦截.过滤.融断.异常处理等功能,并统一到网关处理. 另一个作用: ...

  4. Mac 常用软件、快捷健、常用操作 和 Windows 对比

    常用快捷健 Mac Windows 说明 活动监视器 任务管理器 制作替身 创建快捷方式 Command + I 右击属性 显示简介 Command + Option + I 开启信息检查器 + 鼠标 ...

  5. 如何在 Unity 游戏中集成 AI 语音识别?

    简介 语音识别是一项将语音转换为文本的技术,想象一下它如何在游戏中发挥作用?发出命令操纵控制面板或者游戏角色.直接与 NPC 对话.提升交互性等等,都有可能.本文将介绍如何使用 Hugging Fac ...

  6. Grafana-安装饼状图

    官网:https://grafana.com/grafana/plugins/grafana-piechart-panel/?tab=installation 使用grafana-cli直接安装 [r ...

  7. #2066:一个人的旅行(Dijkstra算法入门题)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. 2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中“落寞的黄金之都“, 而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场, 经过不断的勘测记录,

    2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中"落寞的黄金之都", 而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场, ...

  9. GCC 指定运行期动态链接库搜索路径

    链接器 ld 的 -rpath=dir 选项可以指定运行期 so 文件的搜索路径. GCC 的 -Wl,option 选项可以传递选项给链接器 ld. 所以组合起来,可以直接使用 -Wl,-rpath ...

  10. Java应用架构演变史

    垂直应用架构 也叫单体架构.以 MVC 的垂直架构举例,MVC 架构通常分为 3 层,展示层.控制层.模型层.通常基于 MVC 架构开发的应用代码会打成一个 war 包,部署在 Tomcat 等 We ...