
Utility di inoltro porte TCP in C
Un port forwarder TCP ad alte prestazioni per Windows con whitelist IP opzionale e funzionalità di logging verbose.
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> - Porta locale su cui ascoltare (1-65535)<remote_host> - Nome host o indirizzo IP remoto a cui inoltrare il traffico<remote_port> - Porta remota a cui inoltrare il traffico (1-65535)[allowed_ip] - Opzionale - Accetta solo connessioni da questo indirizzo IP[-v] - Opzionale - Abilita la modalità verbose (mostra connessioni rifiutate)Inoltra la porta locale 8080 al server remoto 192.168.1.100 porta 80:
PortForwarder.exe 8080 192.168.1.100 80
Accetta solo connessioni da 192.168.1.50:
PortForwarder.exe 8080 192.168.1.100 80 192.168.1.50
Mostra i tentativi di connessione rifiutati:
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
Ascolta sulla porta SMB 445 e inoltra a un endpoint SMB remoto. Quando 445 è la porta locale, lo strumento prima libera la porta dal server SMB integrato di Windows:
PortForwarder.exe 445 10.0.0.50 445 192.168.1.100
Quando la porta locale è 445, prima di fare il bind lo strumento automaticamente:
System, PID 4, tramite il driver kernel srvnet).LanmanServer e i driver srv2 / srvnet (arrestando ricorsivamente eventuali servizi dipendenti), stampando ogni passo per visibilità.Esempio di output:
[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)
⚠️ L'arresto di questi servizi disabilita la condivisione di file/stampanti sull'host per la durata dell'impegno. Ripristinala in seguito con
net start LanmanServer(i driver si riavviano su richiesta o al prossimo avvio). Da utilizzare solo su sistemi che sei autorizzato a testare.
Il forwarder fornisce un logging dettagliato:
[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)
Quando il flag -v è abilitato, vengono registrate anche le connessioni rifiutate:
[INFO] Connection from 192.168.1.99:54322 REJECTED (IP not allowed)
Ogni connessione genera un thread di inoltro dedicato che:
Il forwarder gestisce correttamente gli errori di rete comuni:
WSAECONNRESET - Connessione resettata dal peerWSAECONNABORTED - Connessione interrottaWSAENETRESET - La rete ha causato la disconnessioneWSAETIMEDOUT - Connessione scadutarunning volatile per uno shutdown pulito⚠️ Note Importanti sulla Sicurezza:
[allowed_ip] in produzione per limitare l'accesso[ERROR] bind() failed: 10048
Soluzione: Un'altra applicazione sta usando la porta. Scegli una porta locale diversa o arresta il servizio conflittuale.
[ERROR] connect() to remote failed: 10061
Soluzione: Verifica che l'host remoto sia raggiungibile e che il servizio sia in esecuzione sulla porta specificata.
[ERROR] bind() failed: 10013
Soluzione: Le porte inferiori a 1024 potrebbero richiedere privilegi di amministratore. Esegui come Amministratore o usa un numero di porta più alto.
[INFO] Connection from X.X.X.X:XXXXX REJECTED (IP not allowed)
Soluzione: Abilita la modalità verbose (-v) per vedere gli IP rifiutati, o rimuovi il filtro IP.
Premi Ctrl+C per arrestare correttamente il forwarder. Esso:
Funzionalità potenziali per versioni future:
Questo software è fornito così com'è per scopi educativi e di amministrazione di rete legittimi. Usalo responsabilmente e in conformità con le leggi e i regolamenti applicabili.
I contributi sono benvenuti! Assicurati che:
Per problemi, domande o richieste di funzionalità, apri un issue nel repository del progetto.
Puoi anche supportare il mio lavoro su Patreon