ничего. нат потому и нат, что скрывает адреса. вы можете только запросить у клиента его адрес на уровне приложения, если это предусмотрено в протоколе/приложении
getpeername не может выдать внутренний айпишник никак (или я чего-то в этой жизни не понимаю)
Вы уверены, что через НАТ соединение идет? А то, если клиент тестируется на самом сервере, может не на тот интерфейс забиндились, мало ли…
> Вы уверены, что через НАТ соединение идет? А то, если клиент тестируется на самом сервере <...>
Мало того — соединение идёт вообще из другого города за 100км, так что этот тест был максимально приближен к реальности.
Попробуйте tcpdump'ом посмотреть.
Тут либо Вы что-то не так описываете, либо происходит нечто совсем невероятное. getpeername просто смотрит IP адрес входящих пакетов, если бы он и был из сетки 192.168, соединение между двумя хостами из разных сетей просто бы не могло установиться, т.к. по сути ответные пакеты пойдут на нереальный адрес.
Господа, расходимся.
Ошибка не имеет отношения к сети: она заключается в обновлении IP-адреса клиента в БД; определяется же адрес корректно.
192.168.1.1 был получен в одной подсети с сервером, после чего он просто не обновился.
Всем спасибо за содействие.