誰もがRFCやIPクラスなどでそれを過度に複雑にしています。いくつかのテストを実行して、ping
コマンドがユーザーによるIP入力を解析する方法を確認します(余分なチャフは削除されます)。
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
ご覧のとおり、ping
コマンド(Windowsの場合)を使用すると、さまざまなIPアドレス形式を使用できます。IPv4アドレスは、次のように4つの部分(「ドットで区切られた」)に分割できます。A.B.C.D
また、このping
コマンドを使用すると、一部を省略して0
、次のデフォルトを入力できます。
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
単一のパーツのみを提供する場合、255(オクテットの最大値)未満の場合、上記のようにオクテットのように扱われますが、255を超える場合は変換され、次のフィールドにロールオーバーされます(つまり、mod 256
)。
4つ以上のパーツを提供しても機能しないように見えるなど、いくつかのエッジケースがあります(たとえば、ping google.com
のIPは、0.74.125.226.4
またはのいずれでも機能しません74.125.226.4.0
)。
16進表記をドット付きクワッド形式とフラット形式の両方で使用することもできますが0x
、各オクテットの前に付加してフォーマットする必要があります。
そのため、(IPv4)IPアドレスを表す方法はたくさんあります。フラットまたはドット付きクワッド(またはドット付きトリプル、ドット付きダブル、またはドット付きシングル)形式を使用でき、それぞれに10進数、8進数、16進数を使用できます(または組み合わせることもできます)。たとえばgoogle.com
、次の方法でping を実行できます。
google.com
(ドメイン名)
74.125.226.4
(ドット付き10進数)
1249763844
(フラット10進数)
0112.0175.0342.0004
(点線の8進数)
011237361004
(平らな8進数)
0x4A.0x7D.0xE2.0x04
(点線の16進数)
0x4A7DE204
(平六角形)
74.0175.0xe2.4
(ಠ_ಠ)
(バイナリ表記のサポートが追加されなかったことに感謝します!)
アプリケーション:
あなたの場合、ping 192.168.072
は上記の表の3番目の形式(A.B.0.C
)を使用するため、実際にはpingを実行しています192.168.0.072
。さらに、最後の部分に先行ゼロがあるため、8進数(10進数では58)として扱われます。
ミステリーは解決しました。
Windows ping
コマンドでは、入力にこのようなさまざまな形式を使用でき、非標準形式を表示されている方法で解釈しますが、そのような形式をどこでも使用できるというわけではありません。一部のプログラムでは、ドットで区切られたクワッドの4つの部分すべてを提供するように強制する場合もあれば、10進数と8進数の混合と一致を許可しない場合もあります。
また、IPv6アドレスは、解析ロジックと入力形式の許容性をさらに複雑にします。
補遺:
syssは指摘あなたは数字の1で無効な文字を使用する場合(例えば、という8
か、9
オクタル、使用している場合g
、次に進モードでは、など)ping
ことを認識し、それを文字列として解釈することが十分にスマートであるが(-al? -ic?)数値のIPアドレスではなくURL。
(多数の動脈瘤と心臓発作を起こし、指数関数的に爆発するデータ値の順列の数に対応するために「単純な」コードを書き込もうとしている人として、私はそれがすべての入力変動を正しく処理することを感謝しています;少なくとも3 1 +3 2 +3 3 +3 4 = 120バリエーション。
そのため、指定したとおり010.020.030.040
にping 8.16.24.32
が実行されますが、に渡す010.020.030.080
ことping
はIPアドレスではなくURLのように扱われますfoo.bar.baz.com
。換言すれば、サブドメインに対してpingを実行しようとした010
サブドメインに020
ドメイン上の030
トップレベルドメインで080
。しかし、080
有効なTLD(のようにではない.com
、.net
と彼らの仲間)、接続は右の最初の段階で失敗しました。
090.010.010.010
無効な文字が異なるオクテットにある場合にも同じことが起こります。同様に0xf.0xf.0xf.0xf
pings 15.15.15.15
ですが、0xh1.0x1.0xg0.0f
失敗します。
まあ、私はそれがあなたが複数の数ベースに流beingでないために得るものだと思います。
常に4ドット四つ(「40q」?「quaddy-quad」?「cutie-q」?)のアドレスを常に使用することを確認する方が簡単で安全です。
だから出かけて、いくつかの基数を学びましょう。パーティーを披露し、パーティーの生活を送ることができます。彼らが言うように、10種類の人々がいます。バイナリを知っている人と知らない人です。
IPv6アドレスについても考えないでください。私は彼らが111シールの1つだと思います!!!