• XSS.stack #1 – первый литературный журнал от юзеров форума

Как узнать внешний IP клиента за натом?

SwaRR

floppy-диск
Пользователь
Регистрация
15.02.2009
Сообщения
3
Реакции
0
Есть сервер, слушающий порт. К нему конектится клиент. Сервер принимает от него соединение accept'ом, и из (sockaddr) берет ip клиента. Так вот если клиент сидит за NAT, то сервер получает внутренний IP клиента. Подскажите как получить внешний айпишник?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Странно, вобще из sockaddr должен извлекаться именно внешний IP.
Опиши условия в которых тестируешь. Сервер находится в той-же подсети что и клиент ?
И покажи часть кода которым определяешь IP. Должно быть что-то похожее на
Код:
mov     saddr_len,sizeof sockaddr_in
invoke  getpeername,ClientSock,addr saddr,addr saddr_len
mov     eax,saddr.sin_addr
invoke  inet_ntoa,eax
mov     pClientIP, eax
invoke  MessageBox,0,pClientIP,0,MB_OK
 
Вот кусок кода.

Код:
client[ClientNumber]=accept(server,(struct sockaddr *)&clientaddr[ClientNumber],&clientsize); // ждем, когда к нам приконектятся и получаем его адрес и сокет
  	
  	cout << inet_ntoa(clientaddr[ClientNumber].sin_addr)<< ":"<< ntohs(clientaddr[ClientNumber].sin_port) <<" connected\n"; //выведем в консоль, что к нам приконектились с такого-то ip

Нашел кажется в чем ошибка. Была проблема с синхронизацией потоков. И в итоге использовался не тот номер клиента при выводе на экран.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх