Можно ли перенести порт с одного интерфейсного порта на другой интерфейсный порт? - PullRequest
0 голосов
/ 10 апреля 2019

Я «программирую TCP-сокеты» и у меня есть несколько фундаментальных вопросов.

Когда я указываю IP-адрес и порт для TCP-клиента, я знаю, что IP-адрес принадлежит сетевому интерфейсу, а не фактическомукомпьютера в целом, и этот компьютер имеет несколько сетевых интерфейсов, включая внутренний обратный интерфейс локального хоста.

Принадлежит ли порт, указанный клиенту TCP, указанному интерфейсу?Как, например, могут ли быть два порта с одинаковым номером, но на двух разных интерфейсах?Как порт 5000 интерфейса A и порт 5000 обратной петли интерфейса?

Я спрашиваю об этом, потому что я пытаюсь создать клиент TCP, который будет подключаться через сокет к серверу TCP, работающему на виртуальном устройстве Android.TCP-клиент работает на компьютере A, а эмулятор Android работает на компьютере B.

Я просмотрел переадресацию портов для эмуляторов Android и узнал, что эмулятор работает за виртуальным маршрутизатором, и что мне нужно настроить порт.переадресация так, что соединения сокетов TCP могут маршрутизироваться от одного порта к другому, но в этих документах есть только инструкции о том, как перенести порт с интерфейса обратной связи (так называемого локального хоста), поэтому, очевидно, если я попытаюсь создатьсокета к интерфейсу, который не является интерфейсом обратной связи, я не получаю свой сокет TCP, перенаправленный на эмулятор, и мое соединение TCP не удается.

Поэтому мне интересно, есть ли у порта 5000 на интерфейсе обратной связи двоюродный братпорт 5000 на внешнем сетевом интерфейсе?

И мне интересно, могу ли я на каком-то низком уровне перенести порт с внешнего интерфейса 5000 на порт обратной связи, который затем будет перенаправлен на порт эмулятора

Возможно ли это?

1 Ответ

0 голосов
/ 11 апреля 2019
adb -s emulator-5554 forward tcp:5000 tcp:6000
echo "1" > /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.conf.enp0s31f6.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp --dport 5001 -j DNAT --to 127.0.0.1:5000
sudo iptables -A FORWARD -p tcp -d 127.0.0.1 --dport 5000 -j ACCEPT
...