我必须验证两个IP地址是否可以通信。如果第一个IP位于更高的子网中,我还必须考虑。我已经设法通过导入netaddr(python)检查IP是否在同一网络中,但我卡住了。
答案 0 :(得分:2)
通过检查IP地址是否在同一网络/范围内,您始终可以检查IP是否理论上可以相互通信。这可以通过使用 Python 3.3 模块ipaddress
来实现。这里有一个小例子,我创建了IPv4Address
和一个IPv4Network
实例的两个实例。使用此标准库模块,您只需检查IPvAddress
的实例是否在IPv4Network
的实例中。
>>> import ipaddress
>>> ip1 = ipaddress.IPv4Address('192.168.0.1')
>>> ip2 = ipaddress.IPv4Address('192.168.0.2')
>>> ip3 = ipaddress.IPv4Address('192.168.1.1')
>>> net = ipaddress.IPv4Network('192.168.0.0/24')
>>> ip1 in net
True
>>> ip2 in net
True
>>> ip3 in net
False
>>>
请注意,模块ipaddress仅通过 Python 3.3 到达。
要记住的另一件事是无法保证,您指定的IP地址实际上可以相互通信。也许在特定机器或网络中存在一些防火墙规则。这只是一种理论方法,并不适用于现实生活。