ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
我想在 Python 中使用 IP 子网/IP 地址。我使用 ipaddress
模块创建了 Python 代码。当我 运行 pycharm IDE 中的代码时,它工作正常。但是当我在命令提示符下输入 python test.py
运行 时,它显示以下错误。
ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
test.py:
import ipaddress
srcIp = ipaddress.ip_network("10.0.0.0/24")
print(srcIp)
它似乎在 Python 2.7 中工作,如果你使用 Unicode 字符串。
import ipaddress
srcIp = ipaddress.ip_network(u'10.0.0.0/24')
print srcIp
潜在的问题是 ip_network()
实例化了一个 IPv4Network/IPv6Network
对象,它要求网络地址是一个 unicode 字符串。在 Python 3 中这没问题,但在 Python 2 中默认情况下字符串不是 unicode。在 Python 2:
>>> import ipaddress
>>> ipaddress.IPv4Network('10.0.0.0/24')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ipaddress.py", line 1486, in __init__
self.network_address = IPv4Address(address)
File "ipaddress.py", line 1271, in __init__
self._check_packed_address(address, 4)
File "ipaddress.py", line 528, in _check_packed_address
expected_len, self._version))
ipaddress.AddressValueError: '10.0.0.0/24' (len 11 != 4) is not permitted as an IPv4 address (did you pass in a bytes instead of a unicode object?)
>>> ipaddress.IPv4Network(u'10.0.0.0/24')
IPv4Network(u'10.0.0.0/24')
ipaddress.ip_network()
捕获此异常并引发 ValueError
并提供不太详细的消息:
>>> ipaddress.ip_network('10.0.0.0/24')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ipaddress.py", line 148, in ip_network
address)
ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
看来是 unicode 问题。一种可能的解释是 PyCharm 可能正在使用 Python >= 3.3,它在标准库中提供模块 ipaddress
并且默认情况下字符串是 unicode。您的命令行 Python 可能是版本 2,其中字符串默认为字节字符串,并且 ipaddress.ip_network()
将失败,如上所示。我不确定这一点,因为 print srcIp
语句表明您在两种情况下都使用 Python 2?
另一种可能性是 PyCharm 以某种方式影响 Python 中字符串文字的编码 2. 我对 PyCharm 几乎一无所知,但可以设置编码选项.也许这些有效地做了类似于 from __future__ import unicode_literals
.
的事情
请注意 10.0.0.0/24 是无效子网。 10.0.0.0/8 (Class A) 网络中的第一个有效子网,现在用 /24
子网掩码切片是... 10.0.1.0/24
。您必须在网络端丢弃 top/bottom,就像您在该位掩码的主机端丢弃 top/bottom 一样。同样的道理,10.255.255.0/24也是无效的。
对于任何给定的子网掩码,有 2x - 2 个子网和 2x - 2 台主机
...其中 x 是掩码那一侧的位数。因此,对于 /24
,网络端有 24 个,主机端有 8 个,从而构成 16777214 个子网和 254 个主机。请注意位掩码网络端计算的“- 2”部分。这意味着你必须扔掉(你不能发出)那些,因为它们对 tcp/ip 的传输层有意义,在这种情况下。
对于已经知道您同样不能绑定任何 10.x.y.0/24
和 10.x.y.255/24
地址的人来说,这应该是有意义的,因为它们已经意味着什么。
回滚笔记本版本对我有用。
pip uninstall notebook
pip install notebook==5.6.0
我想在 Python 中使用 IP 子网/IP 地址。我使用 ipaddress
模块创建了 Python 代码。当我 运行 pycharm IDE 中的代码时,它工作正常。但是当我在命令提示符下输入 python test.py
运行 时,它显示以下错误。
ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
test.py:
import ipaddress
srcIp = ipaddress.ip_network("10.0.0.0/24")
print(srcIp)
它似乎在 Python 2.7 中工作,如果你使用 Unicode 字符串。
import ipaddress
srcIp = ipaddress.ip_network(u'10.0.0.0/24')
print srcIp
潜在的问题是 ip_network()
实例化了一个 IPv4Network/IPv6Network
对象,它要求网络地址是一个 unicode 字符串。在 Python 3 中这没问题,但在 Python 2 中默认情况下字符串不是 unicode。在 Python 2:
>>> import ipaddress
>>> ipaddress.IPv4Network('10.0.0.0/24')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ipaddress.py", line 1486, in __init__
self.network_address = IPv4Address(address)
File "ipaddress.py", line 1271, in __init__
self._check_packed_address(address, 4)
File "ipaddress.py", line 528, in _check_packed_address
expected_len, self._version))
ipaddress.AddressValueError: '10.0.0.0/24' (len 11 != 4) is not permitted as an IPv4 address (did you pass in a bytes instead of a unicode object?)
>>> ipaddress.IPv4Network(u'10.0.0.0/24')
IPv4Network(u'10.0.0.0/24')
ipaddress.ip_network()
捕获此异常并引发 ValueError
并提供不太详细的消息:
>>> ipaddress.ip_network('10.0.0.0/24')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ipaddress.py", line 148, in ip_network
address)
ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
看来是 unicode 问题。一种可能的解释是 PyCharm 可能正在使用 Python >= 3.3,它在标准库中提供模块 ipaddress
并且默认情况下字符串是 unicode。您的命令行 Python 可能是版本 2,其中字符串默认为字节字符串,并且 ipaddress.ip_network()
将失败,如上所示。我不确定这一点,因为 print srcIp
语句表明您在两种情况下都使用 Python 2?
另一种可能性是 PyCharm 以某种方式影响 Python 中字符串文字的编码 2. 我对 PyCharm 几乎一无所知,但可以设置编码选项.也许这些有效地做了类似于 from __future__ import unicode_literals
.
请注意 10.0.0.0/24 是无效子网。 10.0.0.0/8 (Class A) 网络中的第一个有效子网,现在用 /24
子网掩码切片是... 10.0.1.0/24
。您必须在网络端丢弃 top/bottom,就像您在该位掩码的主机端丢弃 top/bottom 一样。同样的道理,10.255.255.0/24也是无效的。
对于任何给定的子网掩码,有 2x - 2 个子网和 2x - 2 台主机
...其中 x 是掩码那一侧的位数。因此,对于 /24
,网络端有 24 个,主机端有 8 个,从而构成 16777214 个子网和 254 个主机。请注意位掩码网络端计算的“- 2”部分。这意味着你必须扔掉(你不能发出)那些,因为它们对 tcp/ip 的传输层有意义,在这种情况下。
对于已经知道您同样不能绑定任何 10.x.y.0/24
和 10.x.y.255/24
地址的人来说,这应该是有意义的,因为它们已经意味着什么。
回滚笔记本版本对我有用。
pip uninstall notebook
pip install notebook==5.6.0