【背景】
使用到这个模块是腾讯二面时面试官出了一道题:"判断一个字符串是不是IP地址",当时没写上来,是说了解题思路,面试结束自己写出来后,并进行了拓展,如果是IPV4还比较好处理,因为"."隔开的是0-255之间的数,但IPV6使用":"隔开的是4个16进制的数,后面网上查到有ipaddress这个模块,可以判断是否为IP地址且返回版本号
【常用方法】
1、判断是否是IP地址:
>>>ipaddress.ip_address('192.0.2.1')
IPv4Address('192.0.2.1')
>>>ipaddress.ip_address('2001:DB8::1')
IPv6Address('2001:db8::1')
2、读取IP地址版本
>>> ip1 = ipaddress.ip_address('192.0.2.1')
>>> ip1.version
4
>>> ip2 = ipaddress.ip_address('2001:DB8::1')
>>> ip2.version
6
【拓展方式】
【注意点】
- 编码问题
#这种写法在python2.x中会报错
str = '192.0.0.1'
#不进行转换python2.x中会报错,python3.x正常
#str = str.decode('utf-8')
ipaddress.ip_address(str)
(ipaddress.AddressValueError: '192.168.0.0' does not appear to be an IPv4 or IPv6 address. Did you pass in a bytes (str in Python 2) instead of a unicode object?)
提示类型错误,需要将括号内的字符串转化为unicode类型
解释请参考:https://www.cnblogs.com/yangmingxianshen/p/7990102.html
网友评论