Mucho depende de tu escenario.
Si los dos hosts colaboran, solo uno de los dos envía su IP al otro. Opcionalmente, hash / encrypt para evitar que los filtros de reescritura de protocolo (como ftp-masq) vuelvan a escribir no solo la IP del paquete de encabezado sino también la carga útil. Luego, si las dos direcciones no coinciden, NAT debe haber estado en el trabajo.
Si solo tiene un host, que, por ejemplo, se conecta a su host y desea saber si se trata de una "IP verdadera" o una IP natada, probablemente no podrá hacerlo, si se espera la conexión de la máquina. para tener algún servicio disponible, puede intentar conectarse a su dirección y puerto correspondientes; a menos que la máquina NATting también realice una traducción enmascarada / "servidor virtual" inversa, debería poder ver si el servicio está abierto en la máquina solicitante (sin NAT) o no (NAT).
Con varios hosts, podría contar los paquetes y salir de los puertos de las conexiones entrantes. Las cajas NAT y las cajas "ordinarias" tienen diferentes esquemas de asignación de puertos. Las asimetrías de tráfico de diferentes puertos de origen también pueden ser síntomas de NAT (o alguien que mantiene varias páginas web abiertas en un proxy; la probabilidad de que eso , depende del escenario. Dos pares de puertos que tienen ambos el tráfico generalmente interactivo de un tipo muy diferente probablemente se deba a que hay dos usuarios detrás de un NAT. Y así sucesivamente).
Otro enfoque podría ser inspeccionar la sincronización de paquetes y TTL. Por lo general, las implementaciones de NAT no restablecen el contador TTL, por lo que se reducirá en uno al NATting. NAT también toma un poco de tiempo, y esto puede ser investigado estadísticamente.
Finalmente, puedes intentar ser sigiloso y responder con paquetes falsificados, nuevamente jugando con TTL. Si el cuadro NAT está regenerando el TTL para ocultar su NAT, es probable que lo haga solo para los paquetes de salida , y confíe en el código normal para el tráfico entrante. Si envía un paquete con TTL diseñado para que "expire en el momento del impacto", una máquina que no tenga NAT aún lo recibirá. La casilla NAT lo recibirá, disminuirá el contador TTL , y el paquete morirá en tránsito sin llegar a la máquina de origen. Obtendrás una gota o una respuesta ICMP superada por TTL.
A veces, se pueden emplear estrategias similares con esquemas de fragmentación de paquetes, pero esto requiere la gran suerte de tener una configuración de MTU asimétricamente favorable en las "piernas" de su máquina al supuesto cuadro NAT, y De esto a la máquina real.