Если одноранговый узел находится за NAT, вы можете говорить о двух разных IP-адресах (из вашего вопроса неясно, какой вам нужен):
- IP-адрес однорангового узла во внутренней сети (например, 192.168.1.2);
- внешний IP-адрес самого NAT
В первом случае не существует решения, доступного из стека TCP / IP: эта информация просто нена вашем хосте не существует, поскольку NAT заменяет все внутренние IP-адреса своими IP-адресами для каждого пакета.Таким образом, единственным решением для вас будет поддержка этой функциональности в вашем протоколе.
В последнем случае вы можете просто спросить стек TCP / IP: getpeername () , как вы делаетеэто.