有任何人比較兩個ipv6地址的好主意。看起來短缺規則讓它變得複雜。比較IP v6地址
例如完整地址 1234:將0db8:0000:0000:0000:FF00:FF00:0011
- 前導零可移除=> 1234:將0db8 :::: FF00:FF00:11
- 空字段的一組可以被移除1234:將0db8 :: FF00:FF00:00111
- 的最後32位可以是一個老式的IPv4地址1234:將0db8 :::: FF00:172.0.0.15
有任何人比較兩個ipv6地址的好主意。看起來短缺規則讓它變得複雜。比較IP v6地址
例如完整地址 1234:將0db8:0000:0000:0000:FF00:FF00:0011
你可以用冒號分開,然後比較每個值。 如果遇到空字段 - >爲其插入'0000'。 如果您遇到少於4位的字段 - >用零填充
此外,您可以給每個字段加權以強調字段的值。
可以使用標準庫函數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
功能在不同的平臺和語言:
*正常化*插入任一其最緊湊表格或比較前的完整形式... – deceze
第1步是錯誤的。它應該是'1234:0db8:0:0:0:ff00:ff00:11'。儘管技術上是正確的,但單個'0'不再是領先的,因爲它沒有任何可能導致的結果。否則,'1234:0000:0000:4321:0000:0000:0000:0001'可以轉換爲'1234 ::: 4321 :::: 1',這顯然是錯誤的。 – glglgl