36 votes

Bibliothèque TCP Hole Punch (NAT Traversal) ou quelque chose?

Je veux faire TCP perforation (NAT Traversal) en C#. Il peut être fait avec un serveur de rendez-vous si nécessaire. J'ai trouvé http://sharpstunt.codeplex.com/ mais ne peut pas obtenir que cela fonctionne. Idéalement, j'ai besoin d'un peu de méthode que je donne un Numéro de Port (int) comme paramètre, qui après un appel à cette méthode est disponible ("Port Transmis") à la NAT. Il serait aussi bien si la méthode retourne juste quelques numéro de port qui est ensuite disponible à la NAT. Personne n'a fait cela en C# ? Pouvez-vous me donner des exemples pour sharpstunt ou autre chose?

25voto

SilverX Points 759

Dans chaque scénario de réseau, TCP, la perforation fonctionne d'une manière similaire à UDP, la perforation. Par exemple, si deux homologues A et B sont différents NATs, chaque pair du premier paquet SYN envoyé à l'autre par les pairs s'ouvre un trou associé à son adresse publique dans son NAT. Si Un premier paquet SYN à B atteint le B NAT avant B premier paquet SYN à Un atteint B NAT, B NAT considère Un du paquet SYN non sollicités et il tombe. Cependant, par la suite B premier paquet SYN pouvez voyager à travers Un NAT avec succès à cause d'Un NAT reconnaît B de l'adresse publique au lieu de destination des sortants de la session, a lancé.

Donc, oui. Il est possible de TCP holepunch. Je ne vois pas pourquoi quelqu'un pourrait penser le contraire.

Pourriez-vous également de ne pas créer ce type de bahaviour manuellement? Il n'a pas besoin de dépendre d'un protocole spécifique, tant que les étapes sont les mêmes pour recueillir tous les renseignements nécessaires.

En général, TCP perforation (3.2.1) se déroule comme suit:

Clients: A, B Serveur: S

• Un utilise sa connexion avec S pour demander S pour une connexion avec B. • S réponses à Un avec B les adresses privées et publiques, et, simultanément, envoie Une adresse à B.

• A et B de manière asynchrone faire la connexion sortante à tente (envoyer des paquets SYN) des uns et des autres publics et les adresses privées, à partir du même port qu'ils ont utilisé pour vous inscrire à S. En même temps, elles sont à l'écoute pour TCP entrant tentatives de connexion sur leur TCP les ports.

• A et B d'attente pour un SYN-ACK réponse à leurs va paquets SYN, ou de la réception d'une demande de connexion (Paquet SYN). Si la connexion échoue, l'interlocuteur peut réessayer c'est jusqu'à un maximum de délai d'expiration.

• Une fois la connexion en trois étapes processus terminé, les pairs de s'authentifier mutuellement. Si le authentifica- tion échoue, les pairs fermer la connexion et attendre jusqu'à ce que une autre connexion est authentifié avec succès. L' première authentifié avec succès la connexion sera utilisée pour le transfert de données TCP.

(Je sais que ce n'est pas une réponse, mais il n'y avait pas assez de place pour un commentaire).

2voto

Anton Points 3129

Nous avons créé une bibliothèque appelée IceLink qui fait du streaming P2P en utilisant ICE / STUN / TURN avec une traversée NAT complète. La perforation basée sur STUN fonctionne pour la majorité des routeurs pour établir une connexion directe entre pairs, et pour les "mauvais" routeurs, la connexion revient à un relais basé sur TURN.

1voto

Tyr Points 432

Il semble que vous pourriez être l'obtention de TCP et UDP mélangés. TCP est un lien orienté sur le protocole, facilement comprise par les pare-feux et les routeurs, et nécessite un initiateur (le client) et un écouteur (serveur). Si le client et le serveur sont derrière un pare-feu ou NAT, vous ne pouvez pas percer un trou à travers sans avoir tous deux reliés à un serveur proxy (ce qui n'est pas derrière un pare-feu). Le problème, c'est que le proxy doit être responsable pour le relais de l'ensemble de leur trafic.

À partir de votre question, il semble que vous êtes plus intéressés par UDP, la perforation, qui exploite la graisse que UDP est apatride, et de ne pas les connexions orientées. Par conséquent, la plupart d'état-pare-feu suivi permettra de faire une "meilleure estimation" à propos de l'UDP de flux de données, et à supposer que le trafic sortant sur un port donné recevrez des réponses sur le même port, et de rediriger automatiquement vers l'arrière. Si, à l'aide de quelques-canal (comme un serveur TCP qui passe simplement des adresses et non des données), les deux pairs peut être la transmission de données à l'autre sur les mêmes ports, leurs pare-feu et des routeurs NAT permettra d'ouvrir des trous permettant le passage en.

Quant à la façon de le faire, tout dépend de la façon dont vous allez obtenir l'adresse IP de pairs les uns aux autres. Une fois que vous avez, il suffit de commencer à transmettre des paquets UDP sur un port, et d'attendre une réponse.

1voto

Ying Points 41

Je ne connais pas votre sujet, mais il se trouve que je connais un P2PVPN open source, qui utilise une lib pour faire du NAT. Vous pouvez le vérifier ici (www.SocialVPN.org).

Bonne chance.

1voto

jgauffin Points 51913

http://sipsorcery.codeplex.com a un serveur d'étourdissement qui fonctionne.

SipSorcery.core -> SipSorcery.Net -> Stun

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X