Как создать программу, которая прозрачно перенаправляет соединения на новые IP-адреса/порты?Как можно создать программный маршрутизатор на .NET?
Например, если клиент инициирует TCP-подключение IP-адресом 111.111.111.111 и TCP-портом 111, тогда программа может быть настроена для пересылки этого и следующих пакетов IP/port 222.222.222.222:222.
Под прозрачных, я имею в виду:
- Минимальной производительность штраф
- Нет необходимости корректировать клиент или конечный пункт назначения программного обеспечения/конфигурации (так же, как Прозрачный прокси не требует явной настройки в браузере, чтобы быть настроить)
- предложений как низкий уровень, как это возможно с сетевой ОС слоем
Я хотел бы сделать это с .NET, C# и Windows. Но я не хочу создавать простой TCP-прокси по различным, но неуказанным причинам. Если это невозможно сделать, это может быть приемлемым ответом при отсутствии возможного решения.
Это не маршрутизации. То, что вы описываете, является «port-bouncer» или прокси-сервером TCP. Они тривиальны для реализации. – Dai
@Dai Thanks - Googling «TCP proxy» дает полезную информацию. Это работает: {1. Создайте прослушивающий сокет. 2. Получать байты из входящих соединений. 3. Откройте новый сокет для адресата пересылки. 4. Отправьте байты в новый сокет.}? Я боюсь, что эта тривиальная схема не будет прозрачной. – Nat
Хотя в сущности вашего вопроса есть более простой ответ кандидата, существует ответ, который больше соответствует вашему названию и характеру вашего комментария: https://bitbucket.org/merarischroeder/softrouter/wiki/Home [примечание: незавершенное]. Когда кто-то подключается к 111.111.111.111:111, программа (программное обеспечение, выполняемая через устройство Winpcap 10 Мбит/с) может перехватывать такой пакет - даже если на этом порту нет прослушивателя TCP и пересылается по мере необходимости. Это было бы прозрачно, успокаивая ваш страх. Некоторые моды чрезмерно усердны, когда речь идет о закрытии вопросов, это трудная работа. – Todd