
C言語版TCPポートフォワーディングユーティリティ
Windows向け高性能TCPポートフォワーダー。オプションのIPホワイトリストと冗長ログ出力機能を備えています。
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> - リッスンするローカルポート(1-65535)<remote_host> - 転送先のリモートホスト名またはIPアドレス<remote_port> - 転送先のリモートポート(1-65535)[allowed_ip] - オプション - このIPアドレスからの接続のみ許可[-v] - オプション - 冗長モードを有効(拒否された接続を表示)ローカルポート8080をリモートサーバー192.168.1.100のポート80に転送:
PortForwarder.exe 8080 192.168.1.100 80
192.168.1.50からの接続のみ受け入れ:
PortForwarder.exe 8080 192.168.1.100 80 192.168.1.50
拒否された接続試行を表示:
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
SMBポート445でリッスンし、リモートSMBエンドポイントに転送します。ローカルポートが 445 の場合、ツールはまずWindowsの組み込みSMBサーバーからポートを解放します:
PortForwarder.exe 445 10.0.0.50 445 192.168.1.100
ローカルポートが 445 の場合、バインド前にツールは自動的に以下を実行します:
System、PID 4、srvnet カーネルドライバ経由)。LanmanServer と srv2 / srvnet ドライバを停止し(依存サービスも再帰的に停止)、各ステップを可視化するために出力します。出力例:
[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)
⚠️ これらのサービスを停止すると、テスト期間中ホスト上のファイル/プリンター共有が無効になります。後で
net start LanmanServerで復元してください(ドライバはオンデマンドまたは次回起動時に再起動します)。テストを許可されたシステムでのみ使用してください。
フォワーダーは詳細なログを提供します:
[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)
-v フラグが有効な場合、拒否された接続もログに記録されます:
[INFO] Connection from 192.168.1.99:54322 REJECTED (IP not allowed)
各接続は専用の転送スレッドを生成し、以下を実行します:
フォワーダーは一般的なネットワークエラーを適切に処理します:
WSAECONNRESET - ピアによる接続リセットWSAECONNABORTED - 接続が中断されましたWSAENETRESET - ネットワークによる切断WSAETIMEDOUT - 接続がタイムアウトしましたrunning フラグ⚠️ 重要なセキュリティ注意:
[allowed_ip] パラメータを使用してアクセスを制限してください[ERROR] bind() failed: 10048
解決策: 別のアプリケーションがそのポートを使用しています。別のローカルポートを選択するか、競合するサービスを停止してください。
[ERROR] connect() to remote failed: 10061
解決策: リモートホストに到達可能であり、指定されたポートでサービスが実行されていることを確認してください。
[ERROR] bind() failed: 10013
解決策: 1024未満のポートには管理者権限が必要な場合があります。管理者として実行するか、より高いポート番号を使用してください。
[INFO] Connection from X.X.X.X:XXXXX REJECTED (IP not allowed)
解決策: 冗長モード(-v)を有効にして拒否されたIPを表示するか、IPフィルタリングを削除してください。
Ctrl+C を押してフォワーダーをグレースフルに停止します。以下の動作を実行します:
将来のバージョンで考えられる機能:
本ソフトウェアは、教育目的および正当なネットワーク管理目的のために現状のまま提供されます。適用法規に従い、責任を持って使用してください。
貢献を歓迎します!以下の点にご注意ください:
問題、質問、機能リクエストについては、プロジェクトリポジトリでIssueを開いてください。
また、Patreon で私の活動を支援することもできます。