perl で gethostbyname 関数に間違った形式の IP を指定するとどうなりますか? 私たちのスクリプトの 1 つは、間違った形式の IP (たとえば 1.1.1) を指定すると、奇妙な動作をしていました。デバッグ中に、たとえば 1.1.1 を指定すると gethostbyname が値を返すことがわかりました..これについて何か考えはありますか?... 私の意見では、gethostbyname は undef を返すはずですよね?
2 に答える
IPv4 の初期、CIDR 以前は、アドレスはネットワーク部分とホスト部分で構成されると考えられていました。部分はドット付き 10 進形式で独立して書くことができ、完全にバイトに分解する必要はありませんでした。1.1
ネットワーク 1 のホスト 1 も同様で、16777217 という 1 つの大きな 32 ビット数値と同等であるか1.0.0.1
、1 つの大きな 32 ビット数値として記述することもできますhttp://16777127/
。スパマーがフィルターをだますためにそれをやり始めたとき、それは台無しになりました。
どういうわけか、 ping1.1.1
を実行すると、 になり1.1.0.1
ます。私は推測したでしょう1.0.1.1
。正確にどのように分割されるかを決定するためのルールが何であるかはわかりません。
これらの古い形式は、もはや広くサポートされていません (または理解されていません) が、すべてのツールとライブラリから完全に根絶されたわけではありません。
この回答を提出する最初の試みで PS は、stackoverflow は次のように述べています。
あなたの投稿には、無効なドメイン「16777127」へのリンクが含まれています。完全なドメインを指定するか、コード ブロックでラップして修正してください。
これは、「広くサポートされていない」という意味です。
数値 IPv4 アドレスは、1、2、3、または 4 つの数値コンポーネントとして記述できます。各非最終コンポーネントは 8 ビット (1 オクテット) を表し、最終コンポーネントは完全な 32 ビット アドレスを与えるために必要なビット数を表します。したがって、以下はすべてローカル ループバック アドレスを表します。
2130706433
127.1
127.0.1
127.0.0.1
各コンポーネント自体は、10 進数、16 進数、または 8 進数で記述できます。したがって、次のすべても同じアドレスをエンコードします
0x7f000001
127.0x01
0177.0.1
0x7f.0.0.1