2017-12-18 57 views
0

当我看到ip地址文档:IPv4Address.compressed意为ip地址

https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Address.compressed

当我看到IPv4Address.compressed,我发现有针对compressed没有解释。

谁能告诉我这是什么意思?


source code,只有Return the shorthand version of the IP address as a string.解释,我没有很好地理解shorthand version of the IP address

+0

我会想它会从127.0.0.1中省略可选零来产生127.1,但它不会。也许它对IPv6更有用,包括IPv4的正交性。我看到它在做这个页面描述的IPv6:https://networklessons.com/ipv6/shortening-ipv6-addresses/ – tripleee

+0

@tripleee这很有道理,因为IPv4对象有很多模仿IPv6对象的属性。 – aircraft

回答

2

compressedexploded是由基类ipaddress._IPAddressBase定义的属性,所以每个ip地址实例都有它们。对于IPv4存在两者之间没有区别,因为在历史上,没有必要有一个较短的表示:

>>> i4 = ipaddress.IPv4Address("127.0.0.1") 
>>> i4.exploded 
'127.0.0.1' 
>>> i4.compressed 
'127.0.0.1' 

不同的是使用IPv6地址:

>>> i6 = ipaddress.IPv6Address("::1") 
>>> i6.exploded 
'0000:0000:0000:0000:0000:0000:0000:0001' 
>>> i6.compressed 
'::1' 

这里留出组0的是对可用性有很大的帮助。

由于所有地址都具有这两个属性,因此不需要关心地址对象是什么类型。如果只有IPv6Address对象具有exploded属性,则在处理混合地址类型时使用它会更麻烦。

+0

不存在缩短版本的IPv4地址并不完全正确。有一些晦涩的符号曾经普遍适用,但我想他们最终被滥用为安全漏洞的次数比实际上有用的多。 – tripleee

+0

@tripleee至少似乎没有足够的需要编写RFC,或者我没有遇到过。至少如果你看到这种形式的IP地址,你就会知道它是什么。我曾经遇到过一个十六进制表示地址的日志文件,花了我几分钟的时间来弄清楚这些内容。 – mata

+0

在某些平台上,你仍然可以做'ping 134744072'等东西。 – tripleee

2

我发现有针对压缩

它实际上documented一起没有说明爆炸属性:

压缩

爆炸

以点分十进制表示法的字符串表示形式。前导零不会包含在表示中。

由于IPv4没有为八位位组设置为零的地址定义速记符号,所以这两个属性始终与IPv4地址的 str(addr)相同。公开这些属性使得它更容易编写可处理IPv4和IPv6地址的显示代码 。

属性本身是在IPv4和IPv6两者的基类defined地址如下:

@property 
def compressed(self): 
    """Return the shorthand version of the IP address as a string.""" 
    return str(self) 

对于IPv4Address对象str(self)将十进制点符号,例如返回一个string"192.168.0.1"

+0

有没有一个例子呢?我不是很了解IP地址的简写版本作为一个字符串。 – aircraft