0

我正在开发一个应用程序,它有一个 Web 服务器和一个将 XML 发布到 Web 服务器的 C# 客户端。Web 服务器需要知道客户端的本地 IP 地址。我尝试了在服务器端检索 IP 地址的方法,但是当中间有代理服务器或 NAT 时,这些方法不会给出客户端的 IP 地址。所以我需要在客户端应用程序中找到连接的本地 IP 并将其与请求一起发送。

问题出在HttpWebRequest. 我没有看到任何方法可以在发送 HTTP 请求时获取连接的本地 IP 地址。

澄清:
在我的案例中,客户端不是基于浏览器的。它是一个 C# 应用程序。我的服务器有基于本地 IP 的特定规则,用于在发送 HTTP 请求时连接到服务器。就我而言,本地 IP 是固定的。Socket本地计算机上可能有多个 IP——这就是为什么我希望与用于发送请求的本地 IP 相关联的原因。如果我在 C# 中使用并在其上实现 HTTP 协议,则可以解决此问题TcpClient,但我想避免这种情况。那么,有什么方法可以HttpWebRequest在发布请求之前获取关联的套接字?

4

4 回答 4

1

无法获取 HttpWebRequest 将要使用的连接的本地 IPAddress。但是,您可以使用 Dns 或 System.Net.NetworkInformation 类来获取所有本地 IP 地址,并将它们作为自定义标头与您的请求一起发送。在服务器端,您可以解析此标头,并查看是否有任何 IP 与您期望的匹配。

然而,正如 Damien 上面所指出的,这种解决方案并非万无一失,人们可能会将 IP 地址欺骗到服务器所期望的地址。也许你需要退后一步,想想你想通过这个实现什么安全?看看您是否可以通过不同的方法来实现您的目标 - 例如:使用支持的方法(如 Basic(通过 HTTPS)、Digest、NTLM、Kerberos、Negotiate 或使用 SSL 和客户端证书)进行用户身份验证?

于 2009-11-24T21:07:27.963 回答
0

没有保证的方法可以做到这一点。Javascript 和服务器端代码只能看到公共地址,不能看到本地地址。有一种使用 Java 获取它的方法(在此处提到),但它依赖于可用的 Javascript 和 Java,以及支持该特定调用的用户浏览器。

鉴于根据需要分配了许多本地 IP(我的家用 PC 使用 DHCP 分配,我的工作 PC 也偶尔更改),您认为知道本地 IP 真的有用吗?

于 2009-11-24T08:14:54.900 回答
0

如果 XML 是您通过线路发送的,也许您应该从 HttpWebRequest 转移到 SOAP 请求/响应。实现 ASPX Web 服务或 WFC Web 服务。HttpWebRequest 总是被服务器看到,因为它们来自发布它们的最后一个 IP,因此它们将是 NAT 或代理。

但是,我也觉得很奇怪,您需要知道服务器端的本地计算机 IP。

于 2009-11-24T21:13:37.843 回答
0

一种可能的解决方案是告诉客户端在连接到服务器时应该使用什么 ip,并将该 ip 包含在自定义标头中以供服务器读取。

var srcip = IPAddress.Parse("10.0.0.1");
var request = (HttpWebRequest)HttpWebRequest.Create ("http://example.com/");
request.Headers.Add("X-Original-Client-IP", srcip.ToString());
request.ServicePoint.BindIPEndPointDelegate = delegate { return new IPEndPoint(srcip, 0); };
request.GetResponse();
于 2013-09-04T00:58:58.947 回答