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?
Réponses
Trop de publicités?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).
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.
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.
http://sipsorcery.codeplex.com a un serveur d'étourdissement qui fonctionne.
SipSorcery.core -> SipSorcery.Net -> Stun