【问题标题】:Force a C# program which uses HttpClient to use IPv6 only when also IPv4 is available强制使用 HttpClient 的 C# 程序仅在 IPv4 可用时才使用 IPv6
【发布时间】:2021-11-27 07:35:36
【问题描述】:

我有一个 C# 程序,它也依赖于其他库,它通过库使用 HttpClient 从服务器获取数据。

在我运行程序的机器上,IPv6 和 IPv4 都可用。

我想确保程序仅将 IPv6 用于其 HttpClient 连接,不包括 IPv4。

有没有办法实现这一点,可能无需修改使用 HttpClient 的库的源代码,即在 Main 方法中使用某种“每个进程”设置来禁用整个进程的 IPv4?

【问题讨论】:

  • 出于兴趣,您为什么要强制使用 IPv6(我只是想知道您是否可以通过其他机制实现您的结果)?一种选择是使用 IPv6 地址代替 URL 中的主机名 - 如果您的网络服务器需要主机名,则使用在 IPv6 地址上运行的 Fiddler 或 nginx 等代理将流量重定向到正确的服务器。
  • @RB 我正在尝试制作一个大规模的金融数据爬虫,所以它不仅仅是一个网络服务器,但我理解你的意思:使用 HttpClient 不是适合这项工作的工具。
  • @EnricoDetoma 啊,有趣的用例!一种选择是使用 TcpClient 编写您自己的 HTTP 客户端。这样您就可以完全控制 IP 地址等,并且如果您基本上只是使用一些基本标头执行 GET 请求,那么它可能不是 那 很多工作......只是把它作为一个选项扔掉:)
  • @EnricoDetoma 您是否完全确定运行此程序的机器甚至支持 65,000 个活动连接?这是相当大量的线程并行工作。
  • 您最好创建一小段代码来从给定的 URL 中检索数据,然后使用 Hangfire 或 HPC 调度程序之类的东西来实际执行所有操作

标签: c# .net network-programming ipv6


【解决方案1】:

检查这个:Disable/Enable IPv6

基本上可以修改注册表。这是一个 hack 修复,但我目前想不出其他解决方案。

【讨论】:

  • 不幸的是,不是 Windows,而是带有 .NET Core 3.1 的 Linux,我目前无法完全禁用整台机器的 IPv4。
猜你喜欢
  • 2016-01-07
  • 2016-09-19
  • 1970-01-01
  • 2023-03-06
  • 2021-02-10
  • 2019-05-02
  • 1970-01-01
  • 2014-10-28
  • 2021-10-27
相关资源
最近更新 更多