python如何使用字符串比较来判断ip地址是不是为多播? [复制]
Posted
技术标签:
【中文标题】python如何使用字符串比较来判断ip地址是不是为多播? [复制]【英文标题】:How does python use string comparison to determine whether the ip address is multicast or not? [duplicate]python如何使用字符串比较来判断ip地址是否为多播? [复制] 【发布时间】:2022-01-12 21:11:05 【问题描述】:if "224.0.0.0" <= "200.110.11.11" <= "239.255.255.255":
print("Multicast")
else:
print("Unicast")
上面的代码在查找 ip:200.110.11.11 是否为多播时似乎工作正常,字符串比较如何工作?这可以用作确定IP地址是否为多播的有效代码吗?
【问题讨论】:
您的代码并非适用于所有情况。 @martineau 你能告诉我它不起作用的情况吗? 对于任何有效的 IP 地址,它都可以工作——我认为更普遍的是来自"224.0.0.0" <= "2240.0.0.0" <= "239.255.255.255"
的结果。
感谢@martineau,我检查了最有效的 ipv4 多播地址,这似乎工作正常。
【参考方案1】:
在 python 中,字符串是根据每个字符在 ascii 表中的位置按字典顺序进行比较的。这意味着python遍历每个字符串的第一个字符并比较这些字符的ascii值,然后是每个字符串的第二个字符,依此类推,直到满足运算符或到达字符串的结尾。
这不适用于您的代码的所有情况,因为并非每个 ip 都会在字符串的相同索引中具有句点。要解决这个问题,您可以使用 python 3.x 中的内置 ipaddress
模块,如下所示:
from ipaddress import IPv4Address
low = IPv4Address('224.0.0.0')
high = IPv4Address('239.255.255.255')
test = IPv4Address('200.110.11.11')
if low <= test <= high:
print('Multicast')
else:
print('Unicast')
【讨论】:
以上是关于python如何使用字符串比较来判断ip地址是不是为多播? [复制]的主要内容,如果未能解决你的问题,请参考以下文章