Risposta breve: si può' essere fatto in modo affidabile
lungo Risposta:
"Perforatura" si riferisce a innescare regole di NAT automatici di un router in modo da consentire il traffico in entrata. Quando si invia un pacchetto UDP, il router (in genere) crea una regola temporanea che associa l'indirizzo di origine e la porta all'indirizzo e alla porta di destinazione e viceversa. I pacchetti UDP di ritorno dall'indirizzo di destinazione e dalla porta (e nessun altro) vengono passati all'indirizzo di origine e alla porta originali (e nessun altro). Questa regola scadrà dopo alcuni minuti di inattività.
Ottenere questo a lavorare quando entrambi i punti finali sono dietro NAT o firewall richiederebbe che i due punti finali di inviare pacchetti fra di loro a circa lo stesso tempo. Ciò significa che entrambe le parti hanno bisogno di sapere di ogni-altro pubblico indirizzi IP e numeri di porta e la necessità di comunicare questo per l'un l'altro in qualche altro modo.
Non è possibile per un programma determinare direttamente il proprio indirizzo IP pubblico se si trova dietro un NAT (verrà visualizzato solo il suo indirizzo privato, ad esempio 192.168.x.x
). Ma dal momento che si presume che gli umani coinvolti conoscano gli indirizzi IP degli altri, questi umani possono semplicemente digitare l'indirizzo dell'altro.
Ma il vero problema è che non v'è anche un modo per un programma per determinare direttamente ciò che il numero di porta del router sta usando sul lato pubblico. Il programma può essere associato a 12345 sul computer locale, ma il router può mapparlo su quasi tutte le porte sul lato pubblico. (Immagina due computer sulla tua rete locale che inviano entrambi dalla porta 12345, ovviamente il router dovrà mapparne uno a un altro numero.) Quindi anche se tu e gli umani potresti sapere a quale numero di porta locale sei legato, c'è nessun modo per sapere quale numero di porta il router mostrerà al mondo.
fonte
2012-01-17 20:04:04
possibile vittima di: http://stackoverflow.com/questions/8523330/programming-p2p-application/8524609#8524609 – selbie
Non esiste una funzione semplice che si può chiamare che la volontà risolvi tutti i tuoi problemi di attraversamento NAT. Vedi il link sopra per una discussione più lunga su NAT traversal e P2P. – selbie