#c_sharp #tcp_ip #ip_address
Как определить внешний Ip адрес своего компьютера на языке c#?
Ответы
Ответ 1
Полагаю, что тривиальное решение с обращением к внешнему сервису не требуется? Выполните трассировку на любой доступный публичный адрес. Первый не-приватный адрес в цепи - это почти наверняка адрес дефолтного шлюза внешнего маршрутизатора. Для определения его (самого маршрутизатора) адреса нужно оттрассировать все адреса подсети найденного дефолтного шлюза - при трассировке до внешнего адреса получите на 1 хоп меньше, чем до остальных адресов подсети. PS1. Поскольку гарантированного способа определить маску подсети дефолтного шлюза имхо нет, придётся делать какие-то допущения. Впрочем, провайдеры редко выделяют под вывод клиентов широкий пул. PS2. Провайдер запросто может учинить бяку и перекосячить трассировку (узлы могут не отвечать или нештатно менять TTL). А если у него OSPF с несколькими равноценными маршрутами, трасссировка может вообще превратиться в ходячий цирк. PS3. Провайдер может иметь несколько внешних каналов, и твой внешний адрес будет зависеть от чего угодно - начиная с адреса узла назначения и кончая ценой на рис в Антарктиде... PS4. И это ещё только для случая, когда выход в мир - прямой. А не приведи господи у тебя прокся какая-нибудь...Ответ 2
Я пару раз пользовался вот таким образам: string pubIp = new System.Net.WebClient().DownloadString("https://api.ipify.org"); тут много примеров https://stackoverflow.com/questions/3253701/get-public-external-ip-address
Комментариев нет:
Отправить комментарий