有没有办法验证Python下面的路由是否有效?
10.1.1.1 255.255.255.0 192.168.1.10
答案 0 :(得分:1)
使用RegEx检查其IP地址,然后您可以使用ipaddress
模块检查其是否有效,例如:
import ipaddress
a = ['10.1.1.1', '255.255.255.0',
'192.168.1.10', '999.999.999.999',
'123.456.789', 'foobar', '123456']
for i in a:
try:
print()
print(i)
ipaddress.ip_address(i)
except ValueError:
print('invalid')
else:
print('valid')
输出:
10.1.1.1
valid
255.255.255.0
valid
192.168.1.10
valid
999.999.999.999
invalid
123.456.789
invalid
foobar
invalid
123456
invalid
此外,使用ipaddress.IPv4Address()
检查IPv4地址,使用ipaddress.IPv6Address
检查IPv6地址。例如:
>>> ipaddress.ip_address('127.0.0.1')
IPv4Address('127.0.0.1')
>>> ipaddress.ip_address('2001:0db8:85a3:0000:0000:8a2e:0370:7334')
IPv6Address('2001:db8:85a3::8a2e:370:7334')
>>> ipaddress.IPv4Address('2001:0db8:85a3:0000:0000:8a2e:0370:7334')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python3.5/ipaddress.py", line 1284, in __init__
self._ip = self._ip_int_from_string(addr_str)
File "/usr/lib/python3.5/ipaddress.py", line 1118, in _ip_int_from_string
raise AddressValueError("Expected 4 octets in %r" % ip_str)
ipaddress.AddressValueError: Expected 4 octets in '2001:0db8:85a3:0000:0000:8a2e:0370:7334'
>>> ipaddress.IPv6Address('2001:0db8:85a3:0000:0000:8a2e:0370:7334')
IPv6Address('2001:db8:85a3::8a2e:370:7334')
>>> ipaddress.IPv6Address('127.0.0.1')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python3.5/ipaddress.py", line 1909, in __init__
self._ip = self._ip_int_from_string(addr_str)
File "/usr/lib/python3.5/ipaddress.py", line 1646, in _ip_int_from_string
raise AddressValueError(msg)
ipaddress.AddressValueError: At least 3 parts expected in '127.0.0.1'
>>> ipaddress.IPv4Address('127.0.0.1')
IPv4Address('127.0.0.1')