2013-08-02 107 views
0

有任何人比較兩個ipv6地址的好主意。看起來短缺規則讓它變得複雜。比較IP v6地址

例如完整地址 1234:將0db8:0000:0000:0000:FF00:FF00:0011

  1. 前導零可移除=> 1234:將0db8 :::: FF00:FF00:11
  2. 空字段的一組可以被移除1234:將0db8 :: FF00:FF00:00111
  3. 的最後32位可以是一個老式的IPv4地址1234:將0db8 :::: FF00:172.0.0.15
+2

*正常化*插入任一其最緊湊表格或比較前的完整形式... – deceze

+0

第1步是錯誤的。它應該是'1234:0db8:0:0:0:ff00:ff00:11'。儘管技術上是正確的,但單個'0'不再是領先的,因爲它沒有任何可能導致的結果。否則,'1234:0000:0000:4321:0000:0000:0000:0001'可以轉換爲'1234 ::: 4321 :::: 1',這顯然是錯誤的。 – glglgl

回答

0

你可以用冒號分開,然後比較每個值。 如果遇到空字段 - >爲其插入'0000'。 如果您遇到少於4位的字段 - >用零填充

此外,您可以給每個字段加權以強調字段的值。

2

可以使用標準庫函數socket.inet_pton的地址轉換爲一個字節的字符串進行比較:

>>> socket.inet_pton(socket.AF_INET6,'1234:0db8::ff00:ff00:0011') 
'\x124\r\xb8\x00\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x11' 
>>> socket.inet_pton(socket.AF_INET6,'1234:0db8:0000:0000:0000:ff00:ff00:0011') 
'\x124\r\xb8\x00\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x11' 

這將減少你創建你自己的IPv6的bug的風險。上述


例子是蟒蛇,但inet_pton功能在不同的平臺和語言: