Windows TCP-Port-Weiterleiter
Ein leistungsstarker TCP-Port-Weiterleiter für Windows mit optionaler IP-Whitelist und ausführlicher Protokollierung.
Funktionen
- ✅ TCP-Datenverkehr von einem lokalen Port zu einem beliebigen Remote-Host:Port weiterleiten
- ✅ Optionale IP-Whitelist für erhöhte Sicherheit
- ✅ Port 445 / SMB-Übernahmemodus (deaktiviert SMB und gibt Port 445 für Relay frei)
- ✅ Unterstützt bis zu 100 gleichzeitige Verbindungen
- ✅ Bidirektionale Datenweiterleitung mit Echtzeitstatistiken
- ✅ Ausführlicher Modus zum Debuggen abgelehnter Verbindungen
- ✅ Aggressive TCP-Keepalive-Einstellungen zur Erkennung toter Verbindungen
- ✅ Weiterleitung mit geringer Latenz (Nagle-Algorithmus deaktiviert)
- ✅ Ordentliches Herunterfahren (Strg+C)
- ✅ Thread-sicheres Verbindungsmanagement
Anforderungen
- Windows-Betriebssystem
- Visual Studio (zur Kompilierung) oder MinGW-w64
- Winsock2-Bibliothek (im Windows SDK enthalten)
Kompilierung
Verwendung der Visual Studio-Entwicklereingabeaufforderung:
cl PortForwarder.c /Fe:PortForwarder.exe ws2_32.lib
Verwendung von MinGW-w64:
gcc PortForwarder.c -o PortForwarder.exe -lws2_32
Verwendung
PortForwarder.exe <local_port> <remote_host> <remote_port> [allowed_ip] [-v]
Parameter
<local_port> - Lokaler Port, auf dem gehört werden soll (1-65535)
<remote_host> - Remote-Hostname oder IP-Adresse, an die der Datenverkehr weitergeleitet werden soll
<remote_port> - Remote-Port, an den der Datenverkehr weitergeleitet werden soll (1-65535)
[allowed_ip] - Optional - Nur Verbindungen von dieser IP-Adresse akzeptieren
[-v] - Optional - Ausführlichen Modus aktivieren (abgelehnte Verbindungen anzeigen)
Beispiele
Grundlegende Port-Weiterleitung (keine IP-Filterung)
Lokalen Port 8080 an Remote-Server 192.168.1.100 Port 80 weiterleiten:
PortForwarder.exe 8080 192.168.1.100 80
Port-Weiterleitung mit IP-Whitelist
Nur Verbindungen von 192.168.1.50 akzeptieren:
PortForwarder.exe 8080 192.168.1.100 80 192.168.1.50
Port-Weiterleitung mit IP-Whitelist und ausführlicher Protokollierung
Abgelehnte Verbindungsversuche anzeigen:
PortForwarder.exe 8080 192.168.1.100 80 192.168.1.50 -v
Weiterleitung an Remote-Hostname
PortForwarder.exe 3306 database.example.com 3306
SSH-Port-Weiterleitung mit IP-Einschränkung
PortForwarder.exe 2222 10.0.0.50 22 192.168.1.100
Port 445 / SMB-Übernahme (nur autorisierte Einsätze)
Auf SMB-Port 445 lauschen und an einen entfernten SMB-Endpunkt weiterleiten. Wenn 445 der lokale Port ist, gibt das Tool den Port zuerst vom integrierten Windows-SMB-Server frei:
PortForwarder.exe 445 10.0.0.50 445 192.168.1.100
Wenn der lokale Port 445 ist, wird das Tool vor dem Binden automatisch:
- Berechtigungen prüfen — bestätigen, dass der Prozess mit erhöhten Rechten (Administrator) ausgeführt wird. Falls nicht, wird mit einer klaren Meldung abgebrochen.
- Aktuellen Inhaber anzeigen — die PID/den Prozess identifizieren, der derzeit an Port 445 gebunden ist (normalerweise
System, PID 4, über den srvnet-Kernel-Treiber).
- SMB deaktivieren und Port freigeben —
LanmanServer und die Treiber srv2/srvnet stoppen (abhängige Dienste rekursiv stoppen), wobei jeder Schritt zur Transparenz ausgegeben wird.
- Überprüfen und binden — bestätigen, dass Port 445 frei ist, dann wie gewohnt binden und weiterleiten.
Beispielausgabe:
[445] === Port 445 / SMB takeover ===
[445] Privilege check: running elevated (administrator). OK
[445] Port 445 currently held by PID 4 (System (kernel / srvnet))
[445] Disabling SMB server and releasing port 445...
[445] Stopping 'LanmanServer'...
[445] service 'LanmanServer' stopped
[445] Stopping 'srv2'...
[445] service 'srv2' stopped
[445] Stopping 'srvnet'...
[445] service 'srvnet' stopped
[445] Port 445 is now free. Proceeding to bind.
[445] (Restore SMB later with: net start LanmanServer)
⚠️ Das Stoppen dieser Dienste deaktiviert die Datei-/Druckerfreigabe auf dem Host für die Dauer des Einsatzes. Stellen Sie sie anschließend mit net start LanmanServer wieder her (die Treiber werden bei Bedarf oder beim nächsten Start neu gestartet). Nur auf Systemen verwenden, die Sie testen dürfen.
Anwendungsfälle
Lokale Entwicklung
- Auf Dienste zugreifen, die in Containern oder VMs laufen
- Ports von WSL2 an den Windows-Host weiterleiten
- Webhook-Endpunkte lokal testen
Netzwerkbrücke
- Verschiedene Netzwerksegmente überbrücken
- Firewall-Beschränkungen umgehen (nur autorisierte Nutzung)
- Von der DMZ auf interne Dienste zugreifen
Datenbankzugriff
- Datenbankverbindungen mit IP-Whitelist sichern
- Datenbankverkehr durch Sprunghosts tunneln
- Lokale Datenbanken für die Remote-Entwicklung bereitstellen
Sicherheitstests
- TCP-Datenverkehrsmuster überwachen und analysieren
- IP-basierte Zugriffskontrollen testen
- Verbindungsversuche mit ausführlichem Modus protokollieren
Der Weiterleiter bietet eine detaillierte Protokollierung:
[INFO] Configuration:
Local port: 8080
Remote host: 192.168.1.100
Remote port: 80
Allowed IP: 192.168.1.50 (filtered mode)
Verbose: OFF
[INFO] Listening on port 8080...
[INFO] Press Ctrl+C to stop
[INFO] New connection from 192.168.1.50:54321 ACCEPTED
[INFO] Connected to remote 192.168.1.100:80
[INFO] Connection established, forwarding traffic...
[INFO] Closing connection (Sent: 1024 bytes, Received: 2048 bytes, Total: 3072 bytes)
Ausgabe im ausführlichen Modus
Wenn das Flag -v aktiviert ist, werden auch abgelehnte Verbindungen protokolliert:
[INFO] Connection from 192.168.1.99:54322 REJECTED (IP not allowed)
Technische Details
Leistungsoptimierungen
- Puffergröße: 8KB-Puffer für effiziente Datenübertragung
- TCP_NODELAY: Nagle-Algorithmus für geringere Latenz deaktiviert
- Keepalive: Aggressive Einstellungen (10s initial, 1s Intervall) zur Erkennung toter Verbindungen
- Thread-Pool: Bis zu 100 gleichzeitige Verbindungen mit dedizierten Weiterleitungsthreads
- Nicht-blockierender Accept: Zeitüberschreitungsbasierte select() für reaktionsschnelles Herunterfahren
Verbindungshandhabung
Jede Verbindung erzeugt einen dedizierten Weiterleitungsthread, der:
- Verbindung zum Remote-Host herstellt
- Socket-Optionen setzt (Zeitüberschreitungen, Keepalive, TCP_NODELAY)
- select() für bidirektionale Weiterleitung verwendet
- In jede Richtung übertragene Bytes verfolgt
- Beide Sockets bei Beendigung ordnungsgemäß schließt
Fehlerbehandlung
Der Weiterleiter behandelt häufige Netzwerkfehler ordnungsgemäß:
WSAECONNRESET - Verbindung vom Peer zurückgesetzt
WSAECONNABORTED - Verbindung abgebrochen
WSAENETRESET - Netzwerk verursachte Trennung
WSAETIMEDOUT - Verbindungszeitüberschreitung
Thread-Sicherheit
- Kritische Abschnitte schützen das Verbindungsarray
- Volatile
running-Flag für sauberes Herunterfahren
- Thread-Synchronisation während der Bereinigung
Sicherheitshinweise
⚠️ Wichtige Sicherheitshinweise:
- IP-Whitelist: Verwenden Sie den Parameter
[allowed_ip] in der Produktion, um den Zugriff einzuschränken
- Keine Verschlüsselung: Dieser Weiterleiter verschlüsselt den Datenverkehr nicht. Verwenden Sie für sensible Daten SSH-Tunnel oder VPNs
- Authentifizierung: Keine integrierte Authentifizierung. Stellen Sie sicher, dass der entfernte Dienst über eine angemessene Sicherheit verfügt
- Firewall: Konfigurieren Sie die Windows-Firewall, um den Zugriff auf den lauschenden Port einzuschränken
- Protokollierung: Deaktivieren Sie den ausführlichen Modus in der Produktion, um übermäßiges Log-Wachstum zu vermeiden
- Ressourcengrenzen: Das Limit von 100 Verbindungen verhindert Ressourcenerschöpfung
Fehlerbehebung