как узнать компьютер за NAT или нет?
каким образом можно узнать, компьютер находиться за NAT или нет?
может через командную строку windows или программой какой узнать это как-то.
Ответы (3 шт):
Если локальный IP-адрес принадлежит одной из внутренних подсетей 10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16, то да.
Чисто теоретически ничто не мешает настроить NAT с использованием других подсетей подсетей или прокинуть VPN с использованием этих подсетей, так что полноценный ответ, охватывающий все возможные конфигурации, будет несколько шире, но это всё скорее всего нужно уже уточнять у системного администратора настраивавшего сеть (поэтому я и ограничился комментариями вместо полноценного ответа) (c) andreymal.
Получить внешний и внутренний адреса можно по протоколу STUN. Поможет в этом програмка http://www.stunprotocol.org/
> stunclient.exe stun.ekiga.net
Binding test: success
Local address: 192.168.117.138:57896
Mapped address: 93.81.33.123:57896
Она пробрасывает udp порт на внешний адрес, а сравнив локальный и внешний адрес получим ответ комп за натом или нет.
При включенном впн
> stunclient.exe stun.ekiga.net
Binding test: success
Local address: 10.100.10.254:60641 -- адрес на впн клиенте
Mapped address: 185.189.уу.хх:60641 -- адрес выхода в интернет впн сенрвера
Тут stun.ekiga.net один из публичных серверов
Для обнаружения NAT со стороны сервера можно попробовать получить TTL входящего соединения через setsockopt(IP_RECVTTL) или pcap, а потом пингануть его адрес. Сравнив TTL можно делать примерные выводы о NAT.