校验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相关推荐

  1. IPv4和IPv6报文格式介绍和对比

    IPv4和IPv6报文介绍和对比 IPv4数据报 IPv4报文详解 IPv6数据报 IPv6报文详解 扩展头部详解 IPv4和IPv6报文详细对比 IPv4数据报 IPv4报文详解 版本Version ...

  2. IPv4数据报格式和Ipv6数据报格式(长文,详细解释每个字段)

    IPv4数据报介绍 IPv3数据报结构 版本号.这4比特规定了数据包的IP协议版本.通过查看版本号,路由器能够确定如何 解释IP数据报的剩余部分.因为不同版本的IP数据包的格式是不一样的. 首部长度. ...

  3. IPv4 和 IPv6 数据报格式详解

    IPv4 报文头格式及各字段功能 IPv4 报头格式 各字段功能: 1.版本号(Version):长度 4 bit .标识目前采用的 IP 协议的版本号.一般的值为 0100(IPv4),0110(I ...

  4. ipv6头部格式 c语言,2.2.1 IPv6和IPv4基本头部格式

    2.2  IPv6报文 2.2.1  IPv6和IPv4基本头部格式 根据IPv4报文中存在的问题,IPv6报文头格式与IPv4相比进行了一些改动.IPv6头部结构遵循以下新规则: 基本头部的固定长度 ...

  5. 【网络】IPV4数据报头部格式

    文章目录 前言 前言 系列文章: <Wireshark分析Netty建链过程( tcp三次握手.osi模型)> <IPV4数据报头部格式> <Wireshark分析RST ...

  6. ipv4和计算机地址是什么意思,什么是ipv4 ipv6 ipv9 区别是什么(一) -电脑资料

    自从接触到windows 7操作系统以后,对里面的一些网络连接,什么ipv4与ipv6等,开始也多数不明白是什么意思,今天刚好有网友问到笔者什么是ipv4.ipv6,还有ipv9?围绕这个问题,笔者以 ...

  7. IPv4/IPv6、DHCP、网关、路由

    IPv4地址参考:https://zhuanlan.zhihu.com/p/126753536 IPv4/IPv6 1.IPv4是Internet Protocol Version 4的缩写.IPv6 ...

  8. IP.SB - 在线 IPv4 / IPv6 信息查询

    IP.SB - 在线 IPv4 / IPv6 信息查询 1.IP.SB 的由来 IP.SB 前身是 IP.GS ,一个专门用于查询本地出口 IP 的网站,初衷是为了让用户更方便地知道自己的本地出口 I ...

  9. k8s 1.20,IPv4/IPv6 双协议栈

    还没验证文档先一波 FEATURE STATE: Kubernetes v1.16 [alpha] IPv4/IPv6 双协议栈能够将 IPv4 和 IPv6 地址分配给 Pod 和 Service. ...

最新文章

  1. 接口响应时组装响应json_企业实战之spring项目《接口响应体格式统一封装》
  2. 2018.11.03-dtoj-3130-流浪者(rover)
  3. Feature Pyramid Networks for Object Detection 总结
  4. 网易视频云:分布式转码服务高可用浅析
  5. 大学生计算机二级大集报名最好,在校大学生如何报名计算机二级?
  6. 解决数据库Can't connect to MySQL server on 'localhost' (10061)的问题
  7. jsp怎么接受ajax请求参数,通过ajax发送JSON并通过JSP中的请求获取参数
  8. html+css+javascript实现小游戏2048(详解,附源代码)
  9. c++学习 -- #program once
  10. Git 合并代码操作失误,Rebase current,导致拉取代码一直冲突
  11. ardupilot 增加新的定点控制实现刹车
  12. Flutter 修改APP名称和logo
  13. 中国移动智慧城市建设惠及1.3亿用户
  14. 微信小程序正则判断手机号?
  15. Android 项目集成有米 SDK 添加广告
  16. 提供一个免费的directui界面库(已开源)
  17. 2019武汉理工计算机考研复试题(回忆)
  18. CSDN社区电子杂志项目(CSDN eMag)所有期刊总索引
  19. telnet 126邮箱
  20. matlab混响时间仿真,用PC机测量声室混响时间T60的一种方法.pdf

热门文章

  1. 这可能是最通俗易懂的 webpack 知识全景图
  2. poj 3990 四边形费马点
  3. 共话龙蜥:如何协同构建统一生态?
  4. 安徽初中会考计算机考什么,安徽初中会考考试有什么重要性?会考考试不及格能中考和领取毕业证吗?...
  5. 前端经典面试题 | Vue组件间的通信方式
  6. 联想R7000 ubuntu 18.04 安装1650ti驱动
  7. Ubuntu16.04开机后桌面只有壁纸!!!
  8. 启动apache,却访问不了页面
  9. SQLite效率评测!
  10. 电大本科计算机考试英语成绩查询,(2017年电大)电大计算机考试本科试题.doc...