IPアドレスをPingすると、異なるIPで応答する


21

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

ただし、代わりに10.10.208.0をpingしようとすると、57別の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プリンターであることを考えると、この奇妙な問題の原因は何でしょうか?


3
バンプ、このスレッドで答えを見て:superuser.com/questions/486788/...
ミハルSokolowski

回答:


43

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

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

したがって、ベース8の47を057意味57します。したがって、pingはICMPクエリをアドレスにあるマシンに送信し、それから10.10.208.47応答を取得します。

0の代わりに0xプレフィックスを使用して、16進数でアドレスをpingすることもできます。

編集:多くのコメントが示唆しているように、この機能は実際には特定のものpingではなく、IPアドレスを操作する多くのCLIソフトウェアで見つけることができます。


おっ!ありがとうございました!私の心は数分間停止しました:
PsyStyle

4
pingだけではありません。多くのことはそれを行います。
ジェニーDは、Reinstate Monica

1
Bashはすべての「整数」をaskubuntu.com/questions/621500/…の
ティム

15

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

のmanページにinet_atonは次のように書かれています:

「。」で「パーツ」として提供されるすべての数字 表記は、C言語で指定されている10進数、8進数、または16進数です(つまり、先頭の0xまたは0Xは16進数を意味します。それ以外の場合、先頭の0は8進数を意味します。

したがって、先行ゼロを使用している場合、数値は8進数として解釈されます。したがって、57 = 047 = 0x39。


Windowsでも同じように動作することに気付きました。詳細な回答ありがとうございます!
PsyStyle

@PsyStyleどういたしまして!これは、オペレーティングシステムとプログラミング言語の広い範囲にわたる数値の標準表記です。
ジェニーDは、Reinstate Monica

「したがって、先行ゼロを使用している場合、数値は小数として解釈されます。」これはタイプミスだと思いますが、8進数として解釈されるのですか?
ランチャー

1
@Cruncherに感謝します。カフェインの流れの中の血の濃度が高すぎると思います。
ジェニーDは、モニカを復元する
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.