2017-12-18 159 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