1

perl で gethostbyname 関数に間違った形式の IP を指定するとどうなりますか? 私たちのスクリプトの 1 つは、間違った形式の IP (たとえば 1.1.1) を指定すると、奇妙な動作をしていました。デバッグ中に、たとえば 1.1.1 を指定すると gethostbyname が値を返すことがわかりました..これについて何か考えはありますか?... 私の意見では、gethostbyname は undef を返すはずですよね?

4

2 に答える 2

3

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」へのリンクが含まれています。完全なドメインを指定するか、コード ブロックでラップして修正してください。

これは、「広くサポートされていない」という意味です。

于 2012-07-04T09:10:59.763 に答える
2

数値 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
于 2012-07-04T10:04:48.190 に答える