Prise en charge du port 445 / SMB (engagements autorisés uniquement)
É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 :
root@kitploit:~
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 :
Vérification des privilèges — confirme que le processus est exécuté avec des droits élevés
(administrateur). Sinon, il s'arrête avec un message clair.
Affichage du processus actuel — identifie le PID/processus actuellement lié au
port 445 (normalement System, PID 4, via le pilote noyau srvnet).
Désactivation de SMB et libération du port — arrête LanmanServer et les pilotes srv2 /
srvnet (en arrêtant récursivement les services dépendants), en imprimant chaque
étape pour plus de visibilité.
Vérification et liaison — confirme que le port 445 est libre, puis se lie et transfère normalement.
Exemple de sortie :
root@kitploit:~
[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.
Cas d'utilisation
Développement local
Accéder aux services exécutés dans des conteneurs ou des machines virtuelles
Rediriger les ports de WSL2 vers l'hôte Windows
Tester les points de terminaison webhook localement
Pont réseau
Relier différents segments réseau
Contourner les restrictions de pare-feu (utilisation autorisée uniquement)
Accéder aux services internes depuis la DMZ
Accès aux bases de données
Sécuriser les connexions aux bases de données avec une liste blanche IP
Tunneliser le trafic de base de données via des hôtes intermédiaires
Exposer des bases de données locales pour le développement à distance
Tests de sécurité
Surveiller et analyser les modèles de trafic TCP
Tester les contrôles d'accès basés sur IP
Auditer les tentatives de connexion avec le mode verbeux
Informations de sortie
Le forwardeur fournit une journalisation détaillée :
root@kitploit:~
[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)
Sortie en mode verbeux
Lorsque l'option -v est activée, les connexions rejetées sont également journalisées :
root@kitploit:~
[INFO] Connexion depuis 192.168.1.99:54322 REJETÉE (IP non autorisée)
Détails techniques
Optimisations des performances
Taille du tampon : tampons de 8 Ko pour un transfert de données efficace
TCP_NODELAY : algorithme de Nagle désactivé pour une latence plus faible
Keepalive : paramètres agressifs (10s initial, 1s d'intervalle) pour détecter les connexions mortes
Pool de threads : jusqu'à 100 connexions simultanées avec des threads de transfert dédiés
Accept non bloquant : select() basé sur un délai d'attente pour un arrêt réactif
Gestion des connexions
Chaque connexion génère un thread de transfert dédié qui :
Établit la connexion avec l'hôte distant
Définit les options de socket (délais d'attente, keepalive, TCP_NODELAY)
Utilise select() pour le transfert bidirectionnel
Suit les octets transférés dans chaque direction
Ferme gracieusement les deux sockets lors de la terminaison
Gestion des erreurs
Le forwardeur gère les erreurs réseau courantes avec élégance :
WSAECONNRESET - Connexion réinitialisée par le pair
WSAECONNABORTED - Connexion abandonnée
WSAENETRESET - Le réseau a provoqué une déconnexion
WSAETIMEDOUT - La connexion a expiré
Sécurité des threads
Les sections critiques protègent le tableau de connexions
Indicateur volatile running pour un arrêt propre
Synchronisation des threads lors du nettoyage
Considérations de sécurité
⚠️ Notes de sécurité importantes :
Liste blanche IP : utilisez le paramètre [allowed_ip] en production pour restreindre l'accès
Aucun chiffrement : ce forwardeur ne chiffre pas le trafic. Utilisez-le avec des tunnels SSH ou des VPN pour les données sensibles
Authentification : pas d'authentification intégrée. Assurez-vous que le service distant dispose d'une sécurité appropriée
Pare-feu : configurez le pare-feu Windows pour restreindre l'accès au port d'écoute
Journalisation : désactivez le mode verbeux en production pour éviter le gonflement des fichiers journaux
Limites de ressources : la limite de 100 connexions évite l'épuisement des ressources
Dépannage
Port déjà utilisé
root@kitploit:~
[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.
Impossible de se connecter au distant
root@kitploit:~
[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é.
Permission refusée
root@kitploit:~
[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é.
Connexion rejetée
root@kitploit:~
[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.
Arrêt du forwardeur
Appuyez sur Ctrl+C pour arrêter gracieusement le forwardeur. Il va :
Arrêter d'accepter de nouvelles connexions
Attendre la fin des connexions actives (jusqu'à 5 secondes)
Fermer tous les sockets
Nettoyer les ressources
Afficher la confirmation du nettoyage
Limitations
Windows uniquement : utilise l'API Winsock2 (non portable vers Linux/macOS)
IPv4 uniquement : prend actuellement en charge uniquement les adresses IPv4
Filtre IP unique : une seule adresse IP autorisée peut être spécifiée
Pas d'équilibrage de charge : le trafic est redirigé vers un seul point de terminaison distant
Aucune inspection du trafic : transfert TCP brut sans analyse du contenu
Aucune limitation de bande passante : pas de limitation de débit ou de QoS intégrée
Améliorations futures
Fonctionnalités potentielles pour les versions futures :
Prise en charge IPv6
Liste blanche/noire IP multiple
Wrapper de chiffrement SSL/TLS
Tableau de bord des statistiques de trafic
Prise en charge des fichiers de configuration
Limitation de bande passante
Équilibrage de charge round-robin
Limitation du taux de connexion
Prise en charge multiplateforme (Linux/macOS)
Licence
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.
Contribution
Les contributions sont les bienvenues ! Veuillez vous assurer que :
Le code suit le style existant
Les modifications sont bien testées sur Windows
Les commentaires expliquent la logique complexe
Le README est mis à jour pour les nouvelles fonctionnalités
Support
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