我可以使用 .NET Framework 从指定的 IP 地址发送 Web 请求吗?
Posted
技术标签:
【中文标题】我可以使用 .NET Framework 从指定的 IP 地址发送 Web 请求吗?【英文标题】:Can I send webrequest from specified ip address with .NET Framework? 【发布时间】:2010-11-25 03:18:21 【问题描述】:我有一个多 IP 地址的服务器。现在我需要使用 http 协议与几台服务器通信。每台服务器只接受来自我服务器指定IP地址的请求。但是在 .NET 中使用 WebRequest(或 HttpWebRequest)时,请求对象会自动选择一个 IP 地址。我无论如何都找不到将请求与地址绑定。
有没有办法这样做?还是我必须自己实现一个 webrequest 类?
【问题讨论】:
【参考方案1】:您需要使用ServicePoint.BindIPEndPointDelegate
回调。
http://blogs.msdn.com/b/malarch/archive/2005/09/13/466664.aspx
委托在与 httpwebrequest 关联的套接字尝试连接到远程端之前被调用。
public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
Console.WriteLine("BindIPEndpoint called");
return new IPEndPoint(IPAddress.Any,5000);
public static void Main()
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://MyServer");
request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
【讨论】:
太棒了。问题就这么简单的解决了!谢谢,山姆。 我不建议将端口设置为 5000。如果您在此端口上使用多个实例发出请求,这可能会导致超时。相反,我会将端口设置为 0 并让 tcp 层处理连接,无论如何这将始终通过端口 80。 它在 .NET Framework 上运行良好,但在 .NET Core 上无法运行,我不知道为什么。【参考方案2】:如果您想使用 WebClient
来执行此操作,您需要对其进行子类化:
var webClient = new WebClient2(IPAddress.Parse("10.0.0.2"));
和子类:
public class WebClient2 : WebClient
public WebClient2(IPAddress ipAddress)
_ipAddress = ipAddress;
protected override WebRequest GetWebRequest(Uri address)
WebRequest request = (WebRequest)base.GetWebRequest(address);
((HttpWebRequest)request).ServicePoint.BindIPEndPointDelegate += (servicePoint, remoteEndPoint, retryCount) =>
return new IPEndPoint(_ipAddress, 0);
;
return request;
(感谢@Samuel 提供了所有重要的 ServicePoint.BindIPEndPointDelegate 部分)
【讨论】:
【参考方案3】:不确定您是否阅读过这篇文章(?)
How to specify server IP in HttpWebRequest
或
Specifying Source IP of HttpWebRequest
【讨论】:
以上是关于我可以使用 .NET Framework 从指定的 IP 地址发送 Web 请求吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Entity Framework 6 从 .Net 应用程序访问雪花数据库
mysql 安装异常:this application requires .NET Framework(尚未安装.NET Framework 4.5 原因是:指定)
System.FormatException 从 4.7 运行 .NET Framework 2.0
如何使用 Terraform azurerm_app_service 指定 .net 核心版本