créer un vpn en python

a marqué ce sujet comme résolu.

Bonjour, dans le cadre d’un projet perso juste par envie de découverte, j’aimerais bien créer en python un vpn avec juste un client et 1-2 serveurs.

Comme je le comprend : d’un point de vue client, un vpn c’est un logiciel qui vas rediriger et recevoir toute les Socket de la machine vers un serveur d’un point de vue serveur, il envoie et reçoit les requêtes en sont nom, et transmet au client les paquets reçus.

J’ai déja fait des architecture clients/serveurs en TCP/UDP avec python,

la question que je pose c’est comment on fait pour capturer toute les sockets de la machine ? y’a t’il une méthode/lib en python pour le faire ?

voila comment je vois l’architecture :

1)le client intercepte toute les Sockets/paquets sortant de la machine et les envoie a un de mes serveurs

2)le serveur (choisit aléatoirement) basé par exemple au japon, en russie..etc. vas ensuite renvoyer ces paquets au destinataire.

3)Si le destinataire répond, il répond a mon serveur au japon, le serveur du japon envoie le paquet au client

je sais comment faire l’étape 2 et 3 mais pour la première je vois pas par quel api/lib on intercepte toute les connections de la machine, un peu comme si je voulais faire une attaque par l’homme du milieu.

+0 -0

la question que je pose c’est comment on fait pour capturer toute les sockets de la machine ? y’a t’il une méthode/lib en python pour le faire ?

En fait, c’est plutôt niveau noyau que ça va se passer. C’est pas vraiment le programme VPN qui va le faire. Il va s’agir d’une interface réseau au même titre que celles qui correspondent aux cartes physiques (wifi, ethernet filaire, …), sauf que celle-ci sera virtuelle. Sous Unix, on appelle ça les interfaces TUN/TAP

Comment une telle interface « intercepte » toutes les connexions ? En fait, elle ne le fait pas vraiment, c’est juste la table de routage de l’OS qui va dire qu’on veut faire passer le trafic par l’interface tun ou tap, et ça serait la même chose avec une interface classique. Dans le cas où j’ai à la fois du wifi et du filaire par exemple, la première interface prise sera celle qui sera trouvée en premier (ou sur les critères les plus sélectifs de routes) de la table de routage de l’OS.

Tu connais sans doute des solutions comme OpenVPN. En fait, ce logiciel (ainsi que les autres) ne fait que s’appuyer sur les interfaces TUN/TAP pour la partie réseau. OpenVPN, son métier, c’est finalement de gérer de qui va aller et sortir d’une interface tun ou tap, en l’occurrence : chiffrer, déchiffrer, compresser, décompresser, … avant d’envoyer ou après réception. De cette façon, il altère le trafic de façon complètement transparente pour les programmes.

Ton programme Python pourrait en faire de même, en fait. Du coup, je chercherais des bindings ou des libs Python pour utiliser TUN/TAP. De là, tu fais ce que tu veux : tu compresses, tu chiffres, tu altères les données avant d’envoyer dans le tuyau. Ça c’est si tu veux faire un VPN à ce niveau là. Mais il y a des niveaux un peu plus hauts et peut-être plus facile à implémenter. Sache que pour TUN/TAP, tu dois te taper quand même le forgeage de paquets IP (TUN) ou de trames Ethernet (TAP)…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte