Здравствуйте. Есть задача: определить локальный IP адрес клиента (private/public), вызывающего connect(). На транспортном уровне - TCP. Работаю из Win32. Сейчас умею определять IP машины, который можно увидеть через ipconfig. А нужно - тот, который будет видеть сервер. Т.е. у меня private IP 192.168.XXX.YYY. Сервер находится в интернет. При коннекте на него, серверу, понятное дело, пофиг на мой адрес в своей сетке. Так вот, как определить IP, который видит сервер при коннекте на него??? П.С. Надеюсь понятно изъясняюсь, тяжко все это после праздниов.
Смотри то что возвращает accept Там в структуре будет айпи того , кто соединился. Второй способ бредовый но рабочий, связан с функциями getpeername и тп (Надеюсь, я правильно понял эти "предложения")
Дык accept() - он на стороне сервера работает. А надо на стороне клиента этот адрес посмотреть. За getpeername - thx. Сейчас посмотрю.
Когда клиент соединяется адерс сервера он знает - перед вызовом connect() Вот адрес сервера удаленный знаете. А свой - он будет в hostent (там массив айпи адресов, которые привязаны к вашей машине)
Вот я и беру адрес из hostent. И вижу там 192.168.xxx.yyy. А на сервере, естественно, другой адрес. Сейчас кода нет под рукой, позже скину кусок, может у меня просто руки не оттуда.
мне, честно говоря, вообще не приходило в голову, что это возможно сделать средствами TCP/IP по-моему, только через службы сервера (всякие whois там любят показывать клиенту его адрес итд)
TermoSINteZ я об этом и говорю: узнать внутренний - не проблема, а вот существование внешнего ип должно быть для клиента абсолютно прозрачно, поэтому единственный способ - получить IP внутри поля данных пакета, например, в ответе веб сервера имхо вот такого, например: http://www.who.is/
Nouzui Зависит от того, как выдается этот айпи. Если это ВПН или прокси, то конечно так не узнать. Но вроде есть методы, правда сразу не скажу.. (может даже ошибаюсь) А если это айпи присваеваемый например как WAN интерфейс (PPPoE и тп) то тут как из структур можно извлечь то, что нужно.
Если клиент работает через какой-нибудь NAT например то узнать свой внешний адрес на транспортном уровне он не сможет просто по определению NAT. Единственный выход - поднятся выше
бог ты мой.. Span формируешь http запрос, отправляешь его на http://www.who.is/ (или другой, более надежный сервис) читаешь ответ парсишь полученную страничку выцепаешь оттуда свой ip как тольк сервер накроется или изменит дизайн своей странички, все это сразу перестанет работать если есть нормалный способ, то я об этом даже не догадываюсь