1

ASP.NET アプリケーションを作成しました。このアプリケーションでは、要求の IP アドレスをログに記録します。また、さまざまな IP 範囲に応じてさまざまなコンテンツを提供しています。

私の質問は、私の限られたテスト環境では、5 台のマシンしかなく、各マシンには 1 つの IP アドレスしかありません。IP アドレス ベースの ASP.NET の機能について完全にテストしたいので、私の状況では HTTP リクエストを作成する方法テスト マシンの 5 つの IP アドレス以外の任意の IP アドレスを含むのはどれですか?

.Net/C# でのソリューションを歓迎します。ただし、既存のツールも同様に高く評価されます。

EDIT1:私は、さまざまな都市の学生にさまざまなコンテンツを提供する学校教育 Web アプリケーションを作成しています。都市ごとにクラス/セミナー/トレーニングが異なり、特定の都市の学校の支部の (代理) 住所に従って、最も魅力的なコンテンツを表示したいと考えています。

4

8 に答える 8

4

1 つのオプションは、IP アドレスまたはX-Forwarded-Forヘッダーを調べるようにロジックを変更することです。このヘッダーは、要求がプロキシ サーバーを通過するときに発信元の IP アドレスを示すためによく使用されます。はい、ここでプロキシを考慮する必要はありませんが、そうすることで、ロジックをテストする非常に簡単な方法が得られます。

これは、IP アドレスのなりすましを試みるよりも、最速のルートになると思います。

編集

        Uri uriObj = new Uri("http://localhost");
        HttpWebRequest request =
         (HttpWebRequest)WebRequest.CreateDefault(uriObj);

        request.Headers.Add("X-Forwarded-For", "125.125.125.125");

        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        Console.WriteLine(reader.ReadToEnd());

編集

サーバー側のロジックを次のように変更する必要があります。

    string ip = Request.Headers.Get("X-Forwarded-For");
    if (string.IsNullOrEmpty(ip))
    {
        ip = Request.UserHostAddress;
    }

これは基本的に、ヘッダーが含まれている場合はそれを使用し、それ以外の場合は、彼らが教えてくれるIPアドレスを使用することを示しています. このようにして、テスト コードと実際のユーザーの両方が取得されます。

于 2009-04-28T13:53:22.757 に答える
2

IP アドレスに依存しないでください。クライアントの 1 つが何らかの種類のプロキシ サーバーまたはネットワーク アドレス変換デバイスの背後にある場合、期待する IP アドレス範囲がありません。現在のネットワークにそのようなデバイスがない場合でも、アプリケーションが将来ネットワークが変更される方法を制限することはほとんど意味がありません。

クライアントが実際に誰であるかを判断するには、実際の認証メカニズムを使用する必要があります。IP アドレスは、明らかにコンピュータを識別するようには設計されていません。


ジョージの編集に応じて編集します

あなたのシナリオは、絶対に IP アドレスに依存してはならないシナリオです。地理的な場所の代用として IP アドレスに依存する必要があります。それはただの怠惰な設計です。IP アドレスがたまたま地理的位置に間接的に対応しているという事実は、それらが (現在) 割り当てられているプロセスの成果物にすぎません。

代わりに、地理的な場所が重要な場合、クライアントはサーバーに自分の場所を伝える必要があります! そうすれば、ネットワークが変わっても常に正確です。

于 2009-04-28T13:41:43.347 に答える
2

ここでは、仮想マシンを使用しています。必要な数の IP を持つことができます。それらはいくつかの製品です。私たちは主にhttp://www.virtualbox.org/を使用しています(無料です...笑)。

ビルドしてからコピー/貼り付けするだけです。固定 IP を構成します。以上です; 同じ物理 PC ですべてをテストすることもできます。

この助けを願っています... :)

于 2009-04-28T13:55:57.117 に答える
1

raw ソケットの制限により、Windows では IP アドレスのスプーフィングは不可能です (または、少なくともまったく簡単ではありません)。

Linux ではhpingツールを使用するか、Windowsでは WinPcapライブラリを使用して raw パケットを生成しますが、無駄に多くの時間を費やすことになります。

最善の方法は、5 台のマシンの IP を手動で異なる IP (使用する各範囲から 1 つ) に設定することだと思います。

于 2009-04-28T13:44:03.090 に答える
1

IP は、HTTP 要求の「実際の」本文ではなく、TCP/IP ヘッダーから取得されます。したがって、偽造することは自明ではありません。ただし、LAN 上にある場合は、静的 IP を使用してテストできます。

于 2009-04-28T13:36:44.463 に答える
1

おっと。間違ったもの

于 2009-04-28T13:59:39.260 に答える
1

LAN 上にサイトをセットアップし、仮想マシンを作成して、これらのマシンに LAN 上の異なる静的 IP アドレスを割り当てます。アプリの IP 範囲を LAN のものに変更し、それが機能することを確認してから、アプリの製品版で必要な範囲に設定します。サイトの開発バージョンが必要であり、LAN に接続できない理由はありません。

于 2009-04-28T13:54:42.487 に答える
0

おそらく、http "referer" ヘッダーを送信するだけでロジックをテストできます。例えば:

Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("www.MySite.com")
request.Referer = "http://1.2.3.4"
Dim response As System.Net.HttpWebResponse = request.GetResponse()
于 2009-04-28T14:01:40.537 に答える