Прямой поддержки для такой вещи нет, но вы можете использовать сокеты udp (SOCK_DGRAM
) для connect
по известному удаленному адресу. Поскольку сокеты udp не сохраняют состояние, это не делает сетевой трафик.
Затем вы можете запросить локальную конечную точку этого сокета (getsockname
), чтобы получить локальный IP-адрес, по которому ваша система будет маршрутизировать. Опять же, поскольку udp не имеет состояния, это просто запрашивает ваши локальные таблицы маршрутизации, и реальный сетевой трафик не выдается.
Не забудьте после этого закрыть розетку.
Удаленные публичные серверы имен хороши для этой цели. Вы можете проверить несколько из них
- один из них может время от времени не работать или не может быть маршрута для
какая-то причина для этой части мира
- ваш процесс может находиться в той же локальной сети, что и сервер, и вы
может получить только специальный локальный адрес
- тест для адресов IPv4 и IPv6