Выберите сетевой интерфейс по умолчанию для запросов Http в консольном приложении.

Я использую моно для компиляции и запуска моего консольного приложения C#. В этом приложении я делаю несколько запросов Http. Теперь у меня проблемы с выбором правильного сетевого интерфейса для экземпляра приложения для отправки запросов.

Допустим, в моей системе есть интерфейсы eth0 и eth1. Мне нужно заставить мое приложение использовать их оба в разных случаях. Например, при первом запуске приложение выбирает использование eth0 и записывает свой номер в cache.txt. Если он запускается снова, он выбирает второй интерфейс, потому что cache.txt говорит, что первый интерфейс используется другим экземпляром.

Вопрос. Как в приложении C# для среды выполнения mono перечислить и указать (при запуске приложения) сетевой интерфейс, который будет использоваться для всех запросов TCP/Http/udp в этом экземпляре?


person Croll    schedule 20.11.2015    source источник
comment
Для входящих TcpListeners вы можете привязаться к IP/порту, и, таким образом, это будет либо ваш IP-адрес eth0, либо eth1. Для исходящего трафика вы смотрите на свой стек TCP routing table, то есть route -n. Если они оба имеют доступ к одним и тем же подсетям/шлюзу/и т. д., то решение основывается на метрике таблиц маршрутизации.   -  person SushiHangover    schedule 21.11.2015
comment
Я не уверен, о чем вы говорите. Мой основной вопрос заключается в том, какие классы или пространства имен .Net/Mono могут помочь выбрать, какой интерфейс используется по умолчанию в приложении для исходящего TCP/HTTP (под интерфейсами я на самом деле подразумеваю IP-адрес, подключенный к моему хосту и да, доступный для использования).   -  person Croll    schedule 21.11.2015
comment
Кроме этого, вы можете управлять через IPEndPoint(s), посмотрите @ stackoverflow.com/questions/4547032/   -  person SushiHangover    schedule 21.11.2015
comment
Теперь я знаю, что мне нужно явно привязываться к порту и адресу перед запросом (что обычно не требуется для подключения), но как я могу настроить свои запросы Http для привязки к определенной локальной конечной точке по умолчанию?   -  person Croll    schedule 21.11.2015
comment
Если класс HTTP-запроса, который вы используете, не раскрывает IPEndPoint сокета (или аналогичный), вы не можете... Классы, такие как tcpClient, раскрывают его, но HTTP-классы... (?)   -  person SushiHangover    schedule 21.11.2015
comment
Код в ответе stackoverflow.com/a/5157593/3367446 выглядит так, как мне нужно. Вопрос работает ли это так, как ожидалось. Я проверю позже, но, возможно, это не правильно.   -  person Croll    schedule 21.11.2015
comment
Круто, совсем забыл про обратный вызов... Теперь мне интересно узнать, правильно ли он работает с фреймворком Mono в Linux... ;-)   -  person SushiHangover    schedule 21.11.2015