2016-05-11 5 views
3

IPアドレスを整数または実際の値に変換する方法を見つけようとしているので、数学的にグループ分けして意味のある方法でプロットすることができます。理想的には、同じ左端オクテットを持つIPは似ていますが、一番左の2オクテットを共有するIPはより似ています。IPアドレスをシリアル化しプロットする標準的な方法は?

これを行うための標準的な方法がありますか? Pythonライブラリでは、例えば、Codified?それとも、自分のアルゴリズムを調理しなければならないのですか?

ありがとうございました。

答えて

2

あなたは... ipaddress moduleのような意味ですか?あなたはintにアドレスを変換する場合、それだけでIPアドレスが表す実際の数(10.9.8.7≙10 * 256^3 + 9を参照しているため、同じ左端のオクテットと

>>> import ipaddress 
>>> i = ipaddress.ip_address('10.9.8.7') 
>>> int(i) 
168364039 

IPアドレスは、近くなります* 256^2 + 8 * 256^1 + 7 * 256^0)。

また、IPv6のために働く:

>>> int(ipaddress.ip_address("2001:db8::1")) 
42540766411282592856903984951653826561 
+0

私はこのことについて考えていたが、実際には、このモジュールは、実際に一緒にグループ化する必要があり、互いに大幅に異なる番号を生成します。例えば10.255.35.2 == 184493058と10.1.1.2 == 167837954。この翻訳は、私が理想的に思っているよりも少し騒々しいですが、多分それはする必要があります。 – zzu

+1

あなたが見るように、それはまだかなり近いでしょう。たとえば、最初のオクテットが一致するかどうかを確認するには、両方の値24を右に移動します。つまり、「184493058 >> 24 == 167837954 >> 24」です。 – L3viathan

関連する問題