
Утилита перенаправления TCP-портов на C
Высокопроизводительный перенаправитель TCP-портов для Windows с возможностью 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, инструмент сначала освобождает порт от встроенного SMB-сервера Windows:
PortForwarder.exe 445 10.0.0.50 445 192.168.1.100
Если локальный порт — 445, перед привязкой инструмент автоматически:
System, PID 4, через драйвер ядра srvnet).LanmanServer и драйверы srv2 / srvnet (рекурсивно останавливая зависимые службы), выводя каждый шаг для наглядности.Пример вывода:
[445] === Захват порта 445 / SMB ===
[445] Проверка привилегий: запущен с повышенными правами (администратор). OK
[445] Порт 445 currently занят PID 4 (System (kernel / srvnet))
[445] Отключение SMB-сервера и освобождение порта 445...
[445] Остановка 'LanmanServer'...
[445] служба 'LanmanServer' остановлена
[445] Остановка 'srv2'...
[445] служба 'srv2' остановлена
[445] Остановка 'srvnet'...
[445] служба 'srvnet' остановлена
[445] Порт 445 теперь свободен. Выполняю привязку.
[445] (Восстановить SMB позже с помощью: net start LanmanServer)
⚠️ Остановка этих служб отключает общий доступ к файлам/принтерам на хосте на время тестирования. Восстановите его после с помощью
net start LanmanServer(драйверы перезапускаются по требованию или при следующей загрузке). Используйте только на системах, которые вам разрешено тестировать.
Перенаправитель предоставляет подробное логирование:
[INFO] Конфигурация:
Локальный порт: 8080
Удаленный хост: 192.168.1.100
Удаленный порт: 80
Разрешенный IP: 192.168.1.50 (режим фильтрации)
Подробный режим: ВЫКЛ
[INFO] Прослушивание порта 8080...
[INFO] Нажмите Ctrl+C для остановки
[INFO] Новое соединение от 192.168.1.50:54321 ПРИНЯТО
[INFO] Подключение к удаленному 192.168.1.100:80
[INFO] Соединение установлено, пересылка трафика...
[INFO] Закрытие соединения (Отправлено: 1024 байт, Получено: 2048 байт, Всего: 3072 байт)
При включенном флаге -v также логируются отклоненные соединения:
[INFO] Соединение от 192.168.1.99:54322 ОТКЛОНЕНО (IP не разрешен)
Каждое соединение создает выделенный поток пересылки, который:
Перенаправитель корректно обрабатывает типичные сетевые ошибки:
WSAECONNRESET - Соединение сброшено другой сторонойWSAECONNABORTED - Соединение прерваноWSAENETRESET - Сеть вызвала разрыв соединенияWSAETIMEDOUT - Тайм-аут соединенияrunning для чистого завершения⚠️ Важные замечания по безопасности:
[allowed_ip] в продакшене для ограничения доступа[ERROR] bind() failed: 10048
Решение: Другое приложение использует этот порт. Выберите другой локальный порт или остановите конфликтующий сервис.