Molto dipende dal tuo scenario.
Se i due host collaborano, basta che uno dei due invii il suo IP all'altro. Opzionalmente hash / criptalo per mantenere i filtri di riscrittura del protocollo (come ftp-masq) dalla riscrittura non solo del pacchetto IP dell'header ma anche del payload. Quindi, se i due indirizzi non corrispondono, NAT deve essere al lavoro.
Se hai solo un host, che per esempio si connette al tuo host, e vuoi sapere se si tratta di un 'vero IP' o di un IP nattato, probabilmente non sarai in grado di - se la connessione è prevista per avere qualche servizio disponibile, puoi provare a connetterti al suo indirizzo e alla porta corrispondenti; a meno che la macchina NATting esegua anche la conversione reverse masquerading / "virtual server", dovresti essere in grado di vedere se il servizio è aperto sulla macchina richiedente (no NAT) o no (NAT).
Con diversi host, potresti essere in grado di contare i pacchetti e uscire dalle porte delle connessioni in entrata. Le caselle NAT e le caselle "ordinarie" hanno diversi schemi di assegnazione delle porte. Le asimmetrie del traffico provenienti da diverse porte sorgente possono anche essere sintomatiche del NAT (o qualcuno che mantiene aperte diverse pagine Web su un proxy, quanto è probabile che tale dipenda dallo scenario. Due coppie di porte che hanno entrambi il traffico solitamente interattivo di un tipo molto diverso è probabilmente dovuto al fatto che ci sono due utenti dietro un NAT. E così via).
Un altro approccio potrebbe essere quello di ispezionare la tempistica dei pacchetti e il TTL. Solitamente le implementazioni NAT non reimpostano il contatore TTL, quindi verrà ridotto di uno quando si esegue il NAT. Anche NAT richiede un po 'di tempo, e questo può essere investigato statisticamente.
Finalmente potresti provare ad essere subdolo e rispondere con pacchetti contraffatti, giocando di nuovo con TTL. Se la casella NAT sta rigenerando TTL per nascondere il suo NAT, è probabile che lo farà solo per i pacchetti in uscita e si baserà su un codice normale per il traffico in entrata. Se invii un pacchetto con TTL creato per "scadere in caso di impatto", un computer non-NATted lo riceverà comunque. Il box NAT lo riceverà, counter TTL decrement , e il pacchetto morirà in transito senza raggiungere la macchina di origine. Otterrai una risposta o una risposta ICMP superata dalla TTL.
A volte, strategie simili possono essere impiegate con schemi di frammentazione dei pacchetti, ma ciò richiede la notevole fortuna di avere una configurazione MTU asimmetricamente favorevole nelle "gambe" dalla tua macchina alla presunta scatola NAT, e da questo alla macchina reale.