gpt4 book ai didi

c# - 如何在 HttpWebRequest 中更改原始 IP

转载 作者:可可西里 更新时间:2023-11-01 07:43:23 24 4
gpt4 key购买 nike

我在分配了 5 个 IP 的服务器上运行此应用程序。我使用 HttpWebRequest 从网站获取一些数据。但是当我建立连接时,我能够指定从 5 个 IP 中的哪一个建立连接。 HttpWebRequest 是否支持这个?如果不能,我可以从它继承一个类来改变它的行为吗?我在这里需要这样的想法。

我现在的代码是这样的:

System.Net.WebRequest request = System.Net.WebRequest.Create(link);
((HttpWebRequest)request).Referer = "http://application.com";
using (System.Net.WebResponse response = request.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}

最佳答案

根据 this , 不。您可能不得不使用套接字,我知道您可以在其中选择本地 IP。

编辑:实际上,这似乎是可能的。 HttpWebRequest 有一个 ServicePoint 属性,它又具有 BindIPEndPointDelegate ,这可能是您正在寻找的。

给我一​​分钟,我要举个例子...

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://stackoverflow.com");

req.ServicePoint.BindIPEndPointDelegate = delegate(
ServicePoint servicePoint,
IPEndPoint remoteEndPoint,
int retryCount) {

if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) {
return new IPEndPoint(IPAddress.IPv6Any, 0);
} else {
return new IPEndPoint(IPAddress.Any, 0);
}

};

Console.WriteLine(req.GetResponse().ResponseUri);

基本上,委托(delegate)必须返回一个 IPEndPoint。你可以选择任何你想要的,但如果它不能绑定(bind)到它,它会再次调用委托(delegate),最多 int.MAX_VALUE 次。这就是我包含处理 IPv6 的代码的原因,因为 IPAddress.Any 是 IPv4。

如果您不关心 IPv6,则可以摆脱它。另外,我将 IP 地址的实际选择作为练习留给读者:)

关于c# - 如何在 HttpWebRequest 中更改原始 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com