Pour développer le post d’ewanm89, TeamViewer utilise effectivement le pinholeing UDP.
UDP est un protocole sans état. Cela signifie que les paquets sont tirés sur leur cible sans vérification (au niveau du protocole) qu’ils ont été reçus ou même atteint la destination. Les pare-feu sont conçus pour rechercher les paquets UDP et enregistrer la source et la destination ainsi que l’horodatage. S’ils voient un paquet entrant qui correspond à un paquet sortant, ils autorisent généralement le paquet à passer, même sans qu’une règle spécifique soit placée dans la liste d’accès du pare-feu. Cela peut être verrouillé sur les appareils de niveau entreprise, mais en général, 90 % des pare-feu existants autoriseront le trafic de retour.
Pour faire un pin hole, votre machine (viewer) dispose d’une connexion TCP de retour au serveur principal TeamViewer. La machine cible (client) a également une connexion TCP avec le serveur principal TeamViewer. Lorsque vous cliquez sur « Connecter », votre machine indique au serveur principal son intention. Le serveur principal vous donne alors l’adresse IP de la machine cliente. Votre machine commence alors à envoyer des paquets UDP au client. Le client est informé de votre intention de vous connecter et reçoit votre adresse IP. Le client commence également à envoyer des paquets UDP vers vous.
Si les pare-feu sont « P2P-friendly », cela fait que les deux pare-feu (le vôtre et celui du client) autorisent le trafic, ce qui « perce des trous » dans le pare-feu. Plus précisément, les pare-feu ne doivent pas modifier le port public d’un paquet sortant simplement parce que sa destination a changé ; le pare-feu doit réutiliser le même port public tant que la source du paquet n’a pas changé. Si vos pare-feu ne se comportent pas de manière aussi conviviale, cela ne fonctionnera pas. De nombreux pare-feu se comportent cependant de cette manière.
Bien sûr, TeamViewer ajoute une certaine sécurité en effectuant une vérification du pin/mot de passe avant que le serveur principal n’envoie les infos IP aux deux parties, mais vous comprenez l’idée.