IPアドレスの奇妙なドットレス10進表記…どのように機能しますか?


89

本日、クリップボードにURLがあると思っていましたが、実際には、スプレッドシートからコピーされた4つの9桁の整数がありました。これは独自のシステムの識別番号です。実行中のタスクとは完全に無関係です。それをFirefoxに貼り付けたところ、実際にページが読み込まれたことに驚きました。IPv4アドレスのドットなし10進表記を見たことはありますが、この長い数値ははるかに大きいものです。

714687644714805209715128610715964400(前にHTTP://を付ける)

これはどのように作動しますか?インターネットで見つかったすべての10進数-> IPv4コンバーターはすべて、無効な入力と見なします。実際にロードするIPv4アドレスを取得し、同じ計算を実行してドットなし10進数に変換すると、非常に小さな数になります。

私はそれを読んでpingがダブルワードを受け入れて、いくつかの変換を行うことができますが、それは、IPアドレスにこの番号を変換することはできません。IPv6は、 IPv6接続を持っていない、このホストなど論外です。

これはどんな狂気ですか?それは私自身と私の同僚を困惑させました。

編集:今すぐオンラインに戻りました。


4
参照してくださいpc-help.org/obscure.htm
Shamtam

2
あなたは本当にそれがIPv6アドレスではありません確認してください?この番号は、ベース65536で8桁に分割されるためです。IPv6アドレスのベース65536には8桁があります。IPv6の通常のように16進数で表され、89:a4d2:471b:45ef:77ed:c70f:da35:93f0です。
クリスチャン

2
@Christian数字ジャイブのソースの説明。実際の数字は36桁です(各IDは714xxxxxxまたは715xxxxxxの9桁です)。コンピューターにはIPv6さえありません。IPv4アドレスとして取得された数値は、実際にWebページを返します。〜5E33から〜3E38までの数字の基数65536は8桁です。彼がその範囲に収まったのは偶然だと思います(さらに、それより小さい数字も有効なIPv6アドレスになります)
Tim S.

1
@beeksわかりました。昨日試したときはすでに機能していませんでしたが、セキュリティで保護されていないルーターであることを考えると、それほど驚くことではないでしょう。あなたは基本的にあなたのアドレスバーに乱数を入れると言っているのですか?または、セキュリティで保護されていないルーターの奇妙にコード化されたIPアドレスを含むどのようなスプレッドシートがありましたか?;)
クリスチャン

1
@クリスチャン、LOL。これらは、コンプライアンスシステム内の一意のメッセージ識別子です。それらをアドレスバーに貼り付けたまったくのチャンスで、うまくいきました。私はそれが私の人生で二度と起こらないと
確信

回答:


93

これは非常に興味深い質問であり、理解するのに少し時間がかかりました。簡単な答えは、数値の最後の32ビットは3660944368(10進数で、で見つけることができます714687644714805209715128610715964400 mod 2^32)です

これはIPv4アドレス218.53.147.240の10進数値で、3660944368 = 218*(256^3)+53*(256^2)+147*(256)+24010進数(10進数)で書き出すのに似た、256 進数に変換することで見つけることができます。たとえば234 = 2*10^2+ 3*10 + 4

@chritohnideが指摘しているように、ドット付きIPv4アドレスの各セクションは8桁の2進数を表すため、オクテットと呼ばれます。また、IPv4アドレスのさまざまな形式(ドット付き10進数や純粋な10進数など)が、32ビットの2進数を表すための単なる異なる方法であることにも注意してください。

IPv4アドレスは32ビットの数字であるため、アドレスの解決には数字の最後の32ビットのみが使用されます。これが本当である理由はそれほど明白ではありません。他の人が指摘したように、完全な数は10進数でIPv6アドレスと驚くほど似ていますが、有効なアドレスではありません。

見てのTeredo仕様(参照4のTeredoアドレスを、クライアントのIPv4、IPv6アドレスの最後の32ビットを占有するが、Teredoの仕様と一致しない数の接頭辞は、(参照)ウィキペディア)。


12
素敵な答え。また、ドット付きIPv4アドレスの各セクションは、8ビットの2進数の10進表現(4オクテット= 4 x 8ビット= 32ビットのIPv4アドレス)であるため、オクテットと呼ばれ、バージョンは本当に私たちの利益のためだけです。
chritohnide

4
確かにIPv6の10進表記ではありませんか?正常に変換されます0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata

5
@Izkata:そのアドレスがIPv6アドレス空間の未割り当ておよび予約済みの部分にあるため、ありそうもない。
ヘニングマクホルム14

3
数値(ASCII形式)は、おそらくC stdlib文字列の1つを介してint関数に渡され、32ビットipv4アドレスに変換されます。C stdlibのほとんどの実装では、これらの変換は自動的にモジュロ2 ^ <所望の整数サイズ>を実行します。その場合の結果は、観察された動作とまったく同じです。
トニー14

3
これはおそらくFirefoxのURLパーサーの奇抜なものであることに注意してください。URLではなく数字であることを認識し、32ビットのドットなしIPアドレスとして解析しようとするようです(結果の解析された整数は32ビットを法として終わり、実際には入力でエラーチェックを行いません)。たとえば、Chromeはこの動作を示しません。実際、Firefoxの些細なバグとして報告する価値があるかもしれません。
ジェイソンC 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.