-2

私はアプリケーションでpcapdotnetDLLを使用しており、追加したオプションの1つは、pcapファイルを送信する前にパケットのIPアドレスを変更することです(変更したい古いIPアドレスと新しいIPアドレスを関数2に送信します)。

ここで、IPアドレスの範囲を変更できる別のオプションを追加したいと思います。

例えば:

古いIPアドレスは70.1.2.3で、範囲は10.0.0.1から212.0.0.0までです。

したがって、IPアドレス70.1.2.3は10.0.0.1に変更され、10.0.0.2から70.1.2.3までに変更され、私はそれを行うための最良の方法を探しています。

これまでのところ、私は私を助けなかったこの投稿だけを見ています:2つの与えられたIPアドレスからIPの数を計算する簡単な方法はありますか?

4

2 に答える 2

1
  1. IPv4 アドレスは 4 バイトで構成され、これらの 4 バイトを組み合わせると、プレーンな 32 ビットの数値が得られます。リンクしたスレッドで説明されている方法を使用して、この番号を簡単に取得できます(@DarkSquirrel42が干渉している間に同じ回答をすでに投稿していることに気付きました)。その答えで私が変更する唯一のことは、符号なし整数uint)を返すことです:

    public static uint IPToInt(string IP)
    {
         return (uint)IPAddress.NetworkToHostOrder(
             BitConverter.ToInt32(IPAddress.Parse(IP).GetAddressBytes(), 0));
    }
    
  2. それを取得したら、それは簡単な計算の問題です。

    IP 番号の範囲を別の範囲の IP 番号にマップする

    10.0.0.1to212.0.0.0は非常に大きな範囲であることに注意してください。にマップ10.0.0.1すると70.1.2.3、 に到達する前にアドレス空間が不足します212.0.0.0

于 2012-11-08T12:46:59.883 に答える
0

「役に立たなかった」という投稿には、必要なものがすべて含まれています。

IPv4 を 3 つのドット形式で Int32 に変換する方法を示します (IPv4 アドレスのサイズは正確に 32 ビットであるため、これが機能します)。

そこから簡単にカウントを開始できます

あなたがしたいことは次のようになります:

IP 範囲を 2 つの 32 ビット整数に変換します

一方から他方へのforループを実行します

ループ変数を 3 ドット形式に変換します

オプションで、使用すべきではない IP をチェックし、それらをスキップします (クラスレス IP 範囲の場合、クラスフル範囲のネットワークまたはブロードキャスト アドレスになる IP を除外したい場合があります...)

于 2012-11-08T12:17:39.807 に答える