LINUX.ORG.RU

Получить адрес клиента, подключенного через NAT, по дескриптору сокета


0

1

Есть клиент, есть сервер в Интернете; клиент подключается к серверу из локальной сети через NAT.
Точнее, через несколько NAT:
192.168.3.x (это клиент) ->192.168.3.1 -> 192.168.2.1 -> 192.168.1.1 -> (ISP) -> сервер

Проблема: сервер делает getpeername(..) и получает адрес клиента 192.168.1.1; нужен же его внешний Интернет-адрес (для геолокации).

Что делать?


нужен же его внешний Интернет-адрес (для геолокации).

Это что? 192.168.3.x ? Если протокол уровня приложения этот адрес никак не передаёт - то ты его никак и не получишь.

roy ★★★★★ ()

Блджад, откуда вы такие лезете? Напиши официальное письмо провайдеру с копией решения суда, он вам и откроет айпишники.

anonymous ()
Ответ на: комментарий от Spym

броузер хранит данные о локальном айпи
другие протоколы не хранят
хотя вот к примеру icq в своем прото передает инфо о локальном айпи

так что ответ - никак

anonymous ()
Ответ на: комментарий от Spym

Если схема сети в топике правильная, то сервер должен видеть адрес последнего ната, через который идёт клиент. Это должен быть ISP (если он делает нат), либо 1.1, если ISP просто роутит.

roy ★★★★★ ()

Из accept попробуй выдрать, man 2 accept: int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

gh0stwizard ★★★★★ ()

192.168.3.x (это клиент) ->192.168.3.1 -> 192.168.2.1 -> 192.168.1.1 -> (ISP) -> сервер

Проблема: сервер делает getpeername(..) и получает адрес клиента 192.168.1.1;

это проблема и кривизна рук ISP. (конечно если ISP и сервер общаются через интернет то есть с реальными адресами)

MKuznetsov ★★★★★ ()
Ответ на: комментарий от MKuznetsov

хотя по трезвому размышлению и этого быть неможет..скорее у вас всё работает не так как вы это представляете и описываете

MKuznetsov ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.