Bem, se sua interface tiver um endereço privado RFC 1918, mas você ainda puder acessar hosts comuns da Internet, seu host ficará atrás de um NAT em algum lugar. : -)
Podemos encontrar uma seqüência de pacotes que um host pode transmitir para determinar se ele está localizado atrás de uma caixa NAT?
Quero dizer, sem qualquer suporte especial ao servidor como o STUN.
Não, não há a menos que o ponto final oposto (chamá-lo de B) intencionalmente (ou não) inclua uma referência ao IP do seu par (chame-o de A). Outro requisito acima do mencionado acima é que o ponto B não deve estar usando o próprio NAT.
Em suma, você precisa da assistência de um servidor padrão / não padrão (por exemplo, STUN ou "home-made") ou um vazamento na abstração de comunicação. Este último deve ser considerado uma falha de projeto e considerado não confiável (em alguns ponto alguém provavelmente consertará ).
Aparentemente, isso pode ser feito usando o campo TTL nos pacotes IP: link .
Eu não acho que seja possível. Tanto quanto eu sei, não há nenhuma maneira real de saber se o NAT está sendo usado.
Tags nat