1

我编写了一个 ASP.NET 应用程序,并在此应用程序中记录了请求 IP 地址。而且我还根据不同的IP范围提供不同的内容。

我的问题是,在我有限的测试环境中,我只有5台机器,每台机器只有1个IP地址,我想全面测试一下我的IP地址基于ASP.NET的功能,所以在我的情况下如何创建HTTP请求哪个包含超出我的测试机器的5个IP地址的任意IP地址?

.Net/C# 中的解决方案值得赞赏。但是任何现有的工具也很受欢迎。

EDIT1:我正在编写一个学校教育网络应用程序,它为来自不同城市的学生提供不同的内容。不同的城市有不同的课程/研讨会/培训,我想根据特定城市的学校分支机构的(代理)地址显示最相关的内容。

4

8 回答 8

4

一种选择是更改逻辑以查看 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 地址。如果您的其中一个客户端位于任何类型的代理服务器或网络地址转换设备之后,那么他们将不会拥有您期望的 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

IP 来自 TCP/IP 标头,而不是 HTTP 请求的“真实”正文。因此,伪造并非易事。但是,如果您在 LAN 上,则可以使用静态 IP 进行测试。

于 2009-04-28T13:36:44.463 回答
1

由于原始套接字限制......等原因,在 Windows 中欺骗 IP 地址是不可能的(或至少根本不容易)。

你可能会使用linux 下的hping工具,或windows 的WinPcap库来生成原始数据包,但你会花很多时间白费。

我想最好的方法是将您的 5 台机器的 IP 手动设置为不同的 IP(您使用的每个范围中的一个)。

于 2009-04-28T13:44:03.090 回答
1

在局域网上设置您的站点,创建虚拟机,并在局域网上为这些机器分配不同的静态 IP 地址。将应用程序中的 IP 范围更改为局域网上的 IP 范围,确保其正常工作,然后将范围设置为您在应用程序的生产版本中所需的范围。您应该拥有该站点的开发版本,并且没有理由不能在局域网上。

于 2009-04-28T13:54:42.487 回答
1

哎呀。错误的东西

于 2009-04-28T13:59:39.260 回答
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 回答