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" &lt;= "2240.0.0.0" &lt;= "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地址是不是为多播? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python实现ip地址的包含关系判断

判断一个字符串是不是一个合法的IP地址

判断一个对象是不是属于某一类?

Java中如何判断两个String是不是相等

c++判断ip地址是不是合法

如何根据ip地址判断属于哪个市区