【问题标题】:dotnet core http request set source ipdotnet core http请求集源ip
【发布时间】:2018-09-10 14:31:13
【问题描述】:

我有 dotnet core 2.1 应用程序,它必须使用多个源 IP 地址发送 Web 请求。

我用谷歌搜索了很多,并尝试找到解决方法。最受欢迎的是

Can I send webrequest from specified ip address with .NET Framework?

但它不适用于 dotnet 核心,并且永远不会调用 BindIPEndPointCallback。

我还发现了包含 curl 功能的 CurlHandler 类

https://github.com/dotnet/corefx/blob/e0ba7aa8026280ee3571179cc06431baf1dfaaac/src/System.Net.Http/src/System/Net/Http/CurlHandler/CurlHandler.cs

curl 本身有设置源 IP 的 --interface 选项,但是 CurlHandler 类没有任何公共方法来设置 CurlOptions。

所以我可以解决这个问题的唯一方法是使用原始套接字,但我不喜欢它。

有没有简单的设置web请求源ip的解决方案?

提前谢谢你

【问题讨论】:

  • 有没有什么办法可以在你的机器上配置路由表,这样你就可以让操作系统来处理这个了? (注意,这取决于你在做什么,这可能已经按照你的意愿工作了,你的代码中没有任何特殊的逻辑)
  • 只有一个 RemoteEndpoint,我需要不时轮换本地端点。或者我可能需要运行我的应用程序的多个实例并为每个实例设置不同的本地端点
  • 这个问题悬而未决一年多。所以看起来没有希望了
  • 由于他们所说的原因,只有微软不愿意实现这一点,而且这种用法虽然合理,但恕我直言,很少见。由于原始套接字是一种可行的解决方法,因此也不急于推动这个问题。 .NET Core 中完全托管的套接字实现应该是 2.2 或 3.0 中的东西,所以你应该等到那些版本再检查。

标签: c# linux curl .net-core


【解决方案1】:

看起来解决问题的最简单方法就是使用 curl 作为外部命令

 var command =string.Format("curl --interface {0} {yourCommandHere}", localIpString);

 Process proc = new Process();
 proc.StartInfo.FileName = "/bin/bash";
 proc.StartInfo.Arguments = "-c \" " + command + " \"";
 proc.StartInfo.UseShellExecute = false;
 proc.StartInfo.RedirectStandardOutput = true;
 proc.Start();
 var result = proc.StandardOutput.ReadToEnd();
 Console.Writeline("curl result {0}", result);

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 2010-11-13
    • 2016-09-28
    • 2013-11-08
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多