校验Ipv4 ipv6的格式 python
校验Ipv4 ipv6的格式 python
1、校验Ipv4的格式
#校验Ipv4的格式
def checkipv4(ipv4):matchobj = re.match(r'^(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))$',ipv4)if matchobj:return Trueelse:return False
测试用例:
class IPv4MethodsTest(unittest.TestCase):def test_checkipv4(self):self.assertEqual(IPNumConvertMethods.checkipv4(''), False)self.assertEqual(IPNumConvertMethods.checkipv4('256.1.1.1'), False)self.assertEqual(IPNumConvertMethods.checkipv4('255.255.255.255'), True)self.assertEqual(IPNumConvertMethods.checkipv4('0.0.0.0'), True)self.assertEqual(IPNumConvertMethods.checkipv4('192.168.2.2'), True)self.assertEqual(IPNumConvertMethods.checkipv4('-192.168.2.2'), False)self.assertEqual(IPNumConvertMethods.checkipv4('255.255.255.256'), False)
2、校验Ipv6的格式
IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法。
2.1 冒分十六进制表示法
格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16位,以十六进制表示,例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
这种表示法中,每个X的前导0是可以省略的,例如:
2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A
2.2 0位压缩表示法
在某些情况下,一个IPv6地址中问可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:
FF01:0:0:0:0:0:0:1101 → FF01::1101
0:0:0:0:0:0:0:1 → ::1
0:0:0:0:0:0:0:0 → ::
2.3 内嵌IPv4地址表示法
为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用。
def checkipv6(ipv6):matchobj = re.match(r'^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$',ipv6)if matchobj:return Trueelse:return False
测试用例:
class IPv4MethodsTest(unittest.TestCase):def test_checkipv6(self):self.assertEqual(IPNumConvertMethods.checkipv6(''),False)self.assertEqual(IPNumConvertMethods.checkipv6('5e::5668::eeee'), False)self.assertEqual(IPNumConvertMethods.checkipv6('55555:5e:0:0:0:0:0:5668:eeee'), False)self.assertEqual(IPNumConvertMethods.checkipv6('55555:5e:0:0:0:0:0'), False)self.assertEqual(IPNumConvertMethods.checkipv6('2001:DB8:0:23:8:800:200C:417A'), True)self.assertEqual(IPNumConvertMethods.checkipv6('FF01::1101'), True)self.assertEqual(IPNumConvertMethods.checkipv6('::1'), True)self.assertEqual(IPNumConvertMethods.checkipv6('5555:5e::'), True)self.assertEqual(IPNumConvertMethods.checkipv6('::'), True)self.assertEqual(IPNumConvertMethods.checkipv6('FFFF::192.168.0.1'), True)self.assertEqual(IPNumConvertMethods.checkipv6('::192.168.0.1'), True)self.assertEqual(IPNumConvertMethods.checkipv6('::FFFF:192.168.0.1'), True)self.assertEqual(IPNumConvertMethods.checkipv6('2001:DB8:0:23:8:800:192.168.0.1'), True)
还有其他的一些,没写到脚本里
{"1:12:123:1234:2345:3456:4567:abCD", "true"},
{"1:12:123:1234:2345:3456:4567::", "true"},
{"1:12:123:1234:2345:3456::", "true"},
{"1:12:123:1234:2345::", "true"},
{"1:12:123:1234::", "true"},
{"1:12:123::", "true"},
{"1:12::", "true"},
{"1::", "true"},
{"::abCD", "true"},
{"::4567:abCD", "true"},
{"::3456:4567:abCD", "true"},
{"::2345:3456:4567:abCD", "true"},
{"::1234:2345:3456:4567:abCD", "true"},
{"::123:1234:2345:3456:4567:abCD", "true"},
{"::12:123:1234:2345:3456:4567:abCD", "true"},
{"1::123:1234:2345:3456:4567:abCD", "true"},
{"1:12::1234:2345:3456:4567:abCD", "true"},
{"1:12:123::2345:3456:4567:abCD", "true"},
{"1:12:123:1234::3456:4567:abCD", "true"},
{"1:12:123:1234:2345::4567:abCD", "true"},
{"1:12:123:1234:2345:3456::abCD", "true"},
{"1::1234:2345:3456:4567:abCD", "true"},
{"1:12::2345:3456:4567:abCD", "true"},
{"1:12:123::3456:4567:abCD", "true"},
{"1:12:123:1234::4567:abCD", "true"},
{"1:12:123:1234:2345::abCD", "true"},
{"1::2345:3456:4567:abCD", "true"},
{"1:12::3456:4567:abCD", "true"},
{"1:12:123::4567:abCD", "true"},
{"1:12:123:1234::abCD", "true"},
{"1::3456:4567:abCD", "true"},
{"1:12::4567:abCD", "true"},
{"1:12:123::abCD", "true"},
{"1::4567:abCD", "true"},
{"1:12::abCD", "true"},
{"1::abCD", "true"},
{"::", "true"},
{"1:12:123:1234:2345:3456:192.168.0.1", "true"},
{"1:12:123:1234:2345:3456:192.168.0.1", "true"},
{"::12:123:1234:2345:3456:192.168.0.1", "true"},
{"1::123:1234:2345:3456:192.168.0.1", "true"},
{"1:12::1234:2345:3456:192.168.0.1", "true"},
{"1:12:123::2345:3456:192.168.0.1", "true"},
{"1:12:123:1234::3456:192.168.0.1", "true"},
{"1:12:123:1234:2345::192.168.0.1", "true"},
{"::123:1234:2345:3456:192.168.0.1", "true"},
{"1::1234:2345:3456:192.168.0.1", "true"},
{"1:12::2345:3456:192.168.0.1", "true"},
{"1:12:123::3456:192.168.0.1", "true"},
{"1:12:123:1234::192.168.0.1", "true"},
{"::1234:2345:3456:192.168.0.1", "true"},
{"1::2345:3456:192.168.0.1", "true"},
{"1:12::3456:192.168.0.1", "true"},
{"1:12:123::192.168.0.1", "true"},
{"::2345:3456:192.168.0.1", "true"},
{"1::3456:192.168.0.1", "true"},
{"1:12::192.168.0.1", "true"},
{"::3456:192.168.0.1", "true"},
{"1::192.168.0.1", "true"},
{"::192.168.0.1", "true"},
{"1:12:123:1234:2345:3456:192.168.0.1", "true"},
{"::192.168.0.1", "true"},
校验Ipv4 ipv6的格式 python相关推荐
- IPv4和IPv6报文格式介绍和对比
IPv4和IPv6报文介绍和对比 IPv4数据报 IPv4报文详解 IPv6数据报 IPv6报文详解 扩展头部详解 IPv4和IPv6报文详细对比 IPv4数据报 IPv4报文详解 版本Version ...
- IPv4数据报格式和Ipv6数据报格式(长文,详细解释每个字段)
IPv4数据报介绍 IPv3数据报结构 版本号.这4比特规定了数据包的IP协议版本.通过查看版本号,路由器能够确定如何 解释IP数据报的剩余部分.因为不同版本的IP数据包的格式是不一样的. 首部长度. ...
- IPv4 和 IPv6 数据报格式详解
IPv4 报文头格式及各字段功能 IPv4 报头格式 各字段功能: 1.版本号(Version):长度 4 bit .标识目前采用的 IP 协议的版本号.一般的值为 0100(IPv4),0110(I ...
- ipv6头部格式 c语言,2.2.1 IPv6和IPv4基本头部格式
2.2 IPv6报文 2.2.1 IPv6和IPv4基本头部格式 根据IPv4报文中存在的问题,IPv6报文头格式与IPv4相比进行了一些改动.IPv6头部结构遵循以下新规则: 基本头部的固定长度 ...
- 【网络】IPV4数据报头部格式
文章目录 前言 前言 系列文章: <Wireshark分析Netty建链过程( tcp三次握手.osi模型)> <IPV4数据报头部格式> <Wireshark分析RST ...
- ipv4和计算机地址是什么意思,什么是ipv4 ipv6 ipv9 区别是什么(一) -电脑资料
自从接触到windows 7操作系统以后,对里面的一些网络连接,什么ipv4与ipv6等,开始也多数不明白是什么意思,今天刚好有网友问到笔者什么是ipv4.ipv6,还有ipv9?围绕这个问题,笔者以 ...
- IPv4/IPv6、DHCP、网关、路由
IPv4地址参考:https://zhuanlan.zhihu.com/p/126753536 IPv4/IPv6 1.IPv4是Internet Protocol Version 4的缩写.IPv6 ...
- IP.SB - 在线 IPv4 / IPv6 信息查询
IP.SB - 在线 IPv4 / IPv6 信息查询 1.IP.SB 的由来 IP.SB 前身是 IP.GS ,一个专门用于查询本地出口 IP 的网站,初衷是为了让用户更方便地知道自己的本地出口 I ...
- k8s 1.20,IPv4/IPv6 双协议栈
还没验证文档先一波 FEATURE STATE: Kubernetes v1.16 [alpha] IPv4/IPv6 双协议栈能够将 IPv4 和 IPv6 地址分配给 Pod 和 Service. ...
最新文章
- 接口响应时组装响应json_企业实战之spring项目《接口响应体格式统一封装》
- 2018.11.03-dtoj-3130-流浪者(rover)
- Feature Pyramid Networks for Object Detection 总结
- 网易视频云:分布式转码服务高可用浅析
- 大学生计算机二级大集报名最好,在校大学生如何报名计算机二级?
- 解决数据库Can't connect to MySQL server on 'localhost' (10061)的问题
- jsp怎么接受ajax请求参数,通过ajax发送JSON并通过JSP中的请求获取参数
- html+css+javascript实现小游戏2048(详解,附源代码)
- c++学习 -- #program once
- Git 合并代码操作失误,Rebase current,导致拉取代码一直冲突
- ardupilot 增加新的定点控制实现刹车
- Flutter 修改APP名称和logo
- 中国移动智慧城市建设惠及1.3亿用户
- 微信小程序正则判断手机号?
- Android 项目集成有米 SDK 添加广告
- 提供一个免费的directui界面库(已开源)
- 2019武汉理工计算机考研复试题(回忆)
- CSDN社区电子杂志项目(CSDN eMag)所有期刊总索引
- telnet 126邮箱
- matlab混响时间仿真,用PC机测量声室混响时间T60的一种方法.pdf
热门文章
- 这可能是最通俗易懂的 webpack 知识全景图
- poj 3990 四边形费马点
- 共话龙蜥:如何协同构建统一生态?
- 安徽初中会考计算机考什么,安徽初中会考考试有什么重要性?会考考试不及格能中考和领取毕业证吗?...
- 前端经典面试题 | Vue组件间的通信方式
- 联想R7000 ubuntu 18.04 安装1650ti驱动
- Ubuntu16.04开机后桌面只有壁纸!!!
- 启动apache,却访问不了页面
- SQLite效率评测!
- 电大本科计算机考试英语成绩查询,(2017年电大)电大计算机考试本科试题.doc...