
Utilitaire de redirection de ports TCP en C
Un forwardeur de port TCP haute performance pour Windows avec liste blanche IP optionnelle et capacités de journalisation détaillée.
cl PortForwarder.c /Fe:PortForwarder.exe ws2_32.lib
gcc PortForwarder.c -o PortForwarder.exe -lws2_32
PortForwarder.exe <local_port> <remote_host> <remote_port> [allowed_ip] [-v]
<local_port> - Port local sur lequel écouter (1-65535)<remote_host> - Nom d'hôte ou adresse IP distante vers laquelle rediriger le trafic<remote_port> - Port distant vers lequel rediriger le trafic (1-65535)[allowed_ip] - Optionnel - Accepter uniquement les connexions depuis cette adresse IP[-v] - Optionnel - Activer le mode verbeux (afficher les connexions rejetées)Rediriger le port local 8080 vers le serveur distant 192.168.1.100 port 80 :
PortForwarder.exe 8080 192.168.1.100 80
Accepter uniquement les connexions depuis 192.168.1.50 :
PortForwarder.exe 8080 192.168.1.100 80 192.168.1.50
Afficher les tentatives de connexion rejetées :
PortForwarder.exe 8080 192.168.1.100 80 192.168.1.50 -v
PortForwarder.exe 3306 database.example.com 3306
PortForwarder.exe 2222 10.0.0.50 22 192.168.1.100
Écouter sur le port SMB 445 et rediriger vers un point de terminaison SMB distant. Lorsque 445 est le
port local, l'outil libère d'abord le port du serveur SMB intégré de Windows :
PortForwarder.exe 445 10.0.0.50 445 192.168.1.100
Lorsque le port local est 445, avant de se lier, l'outil effectue automatiquement :
System, PID 4, via le pilote noyau srvnet).LanmanServer et les pilotes srv2 /
srvnet (en arrêtant récursivement les services dépendants), en imprimant chaque
étape pour plus de visibilité.Exemple de sortie :
[445] === Prise en charge du port 445 / SMB ===
[445] Vérification des privilèges : exécution avec droits élevés (administrateur). OK
[445] Le port 445 est actuellement détenu par PID 4 (System (kernel / srvnet))
[445] Désactivation du serveur SMB et libération du port 445...
[445] Arrêt de 'LanmanServer'...
[445] service 'LanmanServer' arrêté
[445] Arrêt de 'srv2'...
[445] service 'srv2' arrêté
[445] Arrêt de 'srvnet'...
[445] service 'srvnet' arrêté
[445] Le port 445 est désormais libre. Procédure de liaison en cours.
[445] (Restaurer SMB plus tard avec : net start LanmanServer)
⚠️ L'arrêt de ces services désactive le partage de fichiers/imprimantes sur l'hôte pendant toute la durée de l'engagement. Restaurez-le ensuite avec
net start LanmanServer(les pilotes redémarrent à la demande ou au prochain démarrage). Utilisez uniquement sur des systèmes que vous êtes autorisé à tester.
Le forwardeur fournit une journalisation détaillée :
[INFO] Configuration :
Port local : 8080
Hôte distant : 192.168.1.100
Port distant : 80
IP autorisée : 192.168.1.50 (mode filtré)
Verbeux : OFF
[INFO] Écoute sur le port 8080...
[INFO] Appuyez sur Ctrl+C pour arrêter
[INFO] Nouvelle connexion depuis 192.168.1.50:54321 ACCEPTÉE
[INFO] Connecté au distant 192.168.1.100:80
[INFO] Connexion établie, transfert du trafic...
[INFO] Fermeture de la connexion (Envoyé : 1024 octets, Reçu : 2048 octets, Total : 3072 octets)
Lorsque l'option -v est activée, les connexions rejetées sont également journalisées :
[INFO] Connexion depuis 192.168.1.99:54322 REJETÉE (IP non autorisée)
Chaque connexion génère un thread de transfert dédié qui :
Le forwardeur gère les erreurs réseau courantes avec élégance :
WSAECONNRESET - Connexion réinitialisée par le pairWSAECONNABORTED - Connexion abandonnéeWSAENETRESET - Le réseau a provoqué une déconnexionWSAETIMEDOUT - La connexion a expirérunning pour un arrêt propre⚠️ Notes de sécurité importantes :
[allowed_ip] en production pour restreindre l'accès[ERROR] bind() a échoué : 10048
Solution : une autre application utilise le port. Choisissez un port local différent ou arrêtez le service en conflit.
[ERROR] connect() vers le distant a échoué : 10061
Solution : vérifiez que l'hôte distant est accessible et que le service est en cours d'exécution sur le port spécifié.
[ERROR] bind() a échoué : 10013
Solution : les ports inférieurs à 1024 peuvent nécessiter des privilèges d'administrateur. Exécutez en tant qu'administrateur ou utilisez un numéro de port plus élevé.
[INFO] Connexion depuis X.X.X.X:XXXXX REJETÉE (IP non autorisée)
Solution : activez le mode verbeux (-v) pour voir les IP rejetées, ou supprimez le filtrage IP.
Appuyez sur Ctrl+C pour arrêter gracieusement le forwardeur. Il va :
Fonctionnalités potentielles pour les versions futures :
Ce logiciel est fourni tel quel à des fins éducatives et d'administration réseau légitimes. Utilisez-le de manière responsable et conformément aux lois et réglementations applicables.
Les contributions sont les bienvenues ! Veuillez vous assurer que :
Pour les problèmes, questions ou demandes de fonctionnalités, veuillez ouvrir un ticket dans le dépôt du projet.
Vous pouvez également soutenir mon travail sur Patreon