1

ユーザーから From IP アドレスと To IP アドレスを取得し、それらの間の IP アドレスのリストを表示するプログラムを作成しています。たとえば、ユーザーが 10.0.0.1 と 10.0.0.5 を指定した場合、これら 2 つの間の 5 つの IP アドレスが表示されます。私の頭に浮かぶ現在の解決策は次のとおりです。

  1. すべての IP アドレスのリストを取得し、結果の IP アドレス リストを探すには
  2. ネストされたループを使用する

これらの間でどの解決策を採用する必要がありますか (またはより良い解決策を提案します)? 最初の解決策として、IP アドレス テーブル/リストへのリンクは何ですか?

JavaScript または Java に関する解決策は何ですか?

4

4 に答える 4

4

最初に IP アドレスを で分割します.。最初の IP アドレスから、4 番目の部分を 255 まで増やしてから、3 番目の部分に 1 を追加し、4 番目の部分を 1 に設定します。宛先 IP アドレスに到達するまで。

  • IP アドレス バイト -> ビット -> Int32
  • から: 10.0.10.10-> 00001010 00000000 00001010 00001010->167774730
  • 宛先: 10.1.45.1-> 00001010 00000001 00101101 00000001->167849217
  • From から To までのカウントを開始し、 と である不要なバイトをチェックし11111111ます00000000

それで全部です。

于 2012-09-26T08:09:57.630 に答える
3

「ドット」書きは人間用です。コンピュータの場合、これは 1 つの 4 バイト数値です。したがって、それを数値に解析します。次に、境界に達するまで数値を増やし、出力用にフォーマットし直すだけで、範囲内のすべてのアドレスを取得します。

于 2012-09-26T08:13:25.163 に答える
2

私は更新された jsFiddleで実験していましたが、最終的に以下の解決策にたどり着きました。次のコードは、すべての IP アドレスで機能するはずです。開始 IP アドレスと終了 IP アドレスを 16 進数で指定する必要があります (簡単なので、コードは書きませんでした)。

var startIp = 0x0A000001,
endIp = 0x0A000F05;

var  temp, list = [],str;
for(var i=startIp ; i <= endIp ; i++){
    temp = (i).toString(16);
    str ='';
    if(temp.length == 7){
        temp = "0"+temp;
    }

    for(var k=temp.length-1; k  >= 0 ; k-=2){
       str = parseInt(temp[k-1] + "" + temp[k], 16) +"." + str ;
    }
    document.write(temp + " " + str+ "<br>");
    list.push(str.substring(0, str.length-1));
}

?
于 2012-09-26T08:15:56.063 に答える
-3

(ネットワーク、ファイル システム、またはユーザー入力から) アドレスを取得するのに十分な知識がある場合は、アドレス自体を減算してテストし、その場で IP アドレスの数を取得できます。

これは単純化されていますが、アドレスについて知っていれば取得できます: 000044-000002 = 000042.

于 2012-09-26T08:09:51.010 に答える