
Я пытаюсь использовать ncat (из дистрибутива nmap для Windows) для простой пересылки потока UDP.
Пример: видеопоток можно получить на порту 5444. Я хочу переслать этот поток на другую машину (например, 192.168.10.10) на порту 5555.
Я нашел, где это можно легко сделать для TCP-соединений (т.е.
netsh interface portproxy add v4tov4 listenport=5444 listenaddress=192.168.10.9 connectport=80 connectaddress=192.168.10.10
), но я не вижу, как это сделать для UDP.
Socat — очевидное решение в Linux, но мне приходится использовать Windows.
Я попробовал это:
ncat -l -u 5444 | ncat -u 192.168.10.10 5555
Но производительность настолько ужасна, что ее невозможно использовать. Думаю, я лаю не на то дерево с ncat.
Это ДОЛЖНО быть легко, но я новичок в iptables и т. п. (где, как я подозреваю, и кроется ответ). Буду признателен за любые указания.
решение1
Я нашел «легкое» решение на базе Windows без сторонних зависимостей. Оно заключается в включении RRAS NAT на ОС Windows Server. Затем,
netsh routing ip nat add portmapping "Ethernet" udp 0.0.0.0 5444 192.168.10.10 5555
где «Ethernet» — это имя сетевой карты, которая является «публичным интерфейсом» с включенным NAT в маршрутизации и удаленной помощи.
При правильной настройке следующая команда приведет к следующему выводу:
>netsh routing ip nat show interface
NAT Ethernet Configuration
---------------------------
Mode : Private Interface
NAT Static Port Mapping Configuration
-------------------------------------
Protocol : UDP
Public address : 0.0.0.0
Public port : 5444
Private address : 192.168.10.10
Private port : 5555
Предложение harrymc о sudpproxy также было хорошим ответом, но для моего приложения дополнительные накладные расходы на собственный подход Windows являются меньшим недостатком, чем зависимость от стороннего инструмента.