Заставьте программу на C#, использующую HttpClient, использовать IPv6 только в том случае, если также доступен IPv4

#c# #.net #network-programming #ipv6

Вопрос:

У меня есть программа на C#, которая также зависит от других библиотек, которая использует HttpClient через библиотеки для получения данных с сервера.

На компьютере, на котором я запускаю программу, доступны как IPv6, так и IPv4.

Я хочу убедиться, что программа использует IPv6 только для своих подключений HttpClient, исключая IPv4.

Есть ли способ достичь этого, возможно, без необходимости изменять исходный код библиотек, использующих HttpClient, т. Е. с помощью какой-то настройки «для каждого процесса» в основном методе, который отключает IPv4 для всего процесса?

Комментарии:

1. Из интереса, почему вы хотите принудительно использовать IPv6 (мне просто интересно, можете ли вы достичь своего результата с помощью какого-либо другого механизма)? Одним из вариантов было бы использовать IPv6 — адрес вместо имени хоста в URL-адресе-если вашему веб-серверу нужно имя хоста, используйте прокси-сервер, такой как Fiddler или nginx, работающий на IPv6-адресе, для перенаправления трафика на правильный сервер.

2. @RB Я пытаюсь создать крупномасштабный поисковик финансовых данных, так что это не только один веб-сервер, но я понимаю вашу точку зрения: использование HttpClient НЕ является подходящим инструментом для этой работы.

3. @EnricoDetoma Ах, интересный прецедент! Одним из вариантов было бы написать свой собственный HTTP-клиент с TcpClient. Таким образом, у вас есть полный контроль над IP-адресом и т.д., И если вы в основном просто выполняете запросы на ПОЛУЧЕНИЕ с некоторыми базовыми заголовками, это, вероятно, не так уж много работы. .. Просто выкидываю это как вариант 🙂

4. @EnricoDetoma Вы полностью уверены, что машина, с которой вы это запускаете, поддерживает даже 65 тысяч активных подключений? Это довольно огромное количество потоков, работающих параллельно.

5. Возможно, вам было бы лучше создать очень небольшой фрагмент кода для извлечения данных с заданного URL-адреса, а затем использовать что-то вроде Hangfire или планировщика HPC для фактического выполнения всего

Ответ №1:

Проверьте это: Отключить/Включить IPv6

В принципе, вы можете изменить реестр. Это немного похоже на исправление взлома, но в данный момент я не могу придумать другого решения.

Комментарии:

1. К сожалению, не Windows, а Linux с .NET Core 3.1, и я пока не могу полностью отключить IPv4 для всей машины.