如何使用Python验证网络路由

时间:2015-11-16 09:52:44

标签: python python-2.7 python-3.x

有没有办法验证Python下面的路由是否有效?

10.1.1.1 255.255.255.0 192.168.1.10

1 个答案:

答案 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')