IPアドレスにpingすると異なるIPが返される

IPアドレスにpingすると異なるIPが返される

IP アドレスを ping しようとすると、10.10.208.57その IP アドレスを持つものがネットワーク内に存在しないため、応答がありません。

しかし、pingをしようとすると10.10.208.057代わりに別の IP アドレスが応答します:

root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms

10.10.208.47これはLexmark E120n プリンターであることを考えると、この奇妙な問題の原因は何なのでしょうか?

答え1

この動作は実際には ping の通常の機能によるものであり、実際のハードウェアとは関係ありません。

実際、IPアドレス(またはその一部)の先頭にゼロを付けると、その番号は次のように解釈されます。8進数

つまり、057857進数では47です。したがって、pingは情報処理アドレスにあるマシンにクエリを実行し10.10.208.47、そのマシンから応答を取得します。

0 だけではなく 0x プレフィックスを使用して、16 進数のアドレスに ping を実行することもできることに注意してください。

編集: 多くのコメントが示唆しているように、この機能は実際にはpingIP アドレスを操作する多くの CLI ソフトウェアに固有のものではなく、IP アドレスを操作する多くの CLI ソフトウェアに存在します。

答え2

Ping は、他の多くの UNIX プログラムと同様に、名前解決に UNIX システム上の C ライブラリを使用します。使用される関数の 1 つは ですinet_aton

のマニュアルページには次のようにinet_aton書かれています:

「.」表記の「部分」として提供されるすべての数値は、C 言語で指定されているように、10 進数、8 進数、または 16 進数にすることができます (つまり、先頭の 0x または 0X は 16 進数を意味し、先頭の 0 は 8 進数を意味し、それ以外の場合は数値は 10 進数として解釈されます)。

したがって、先頭にゼロを使用すると、数値は 8 進数として解釈されます。つまり、57 = 047 = 0x39 となります。

関連情報