Проблема с Delphi привязкой приложения, связанная с publi c в сравнении с частными IP-адресами - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь подключить два Windows приложения, работающие на разных компьютерах, а не на одном и том же su bnet, с помощью привязки приложения Delphi (10.3.1). Если исходящий компьютер имеет как общедоступный IP-адрес c, так и локальный IP-адрес, отвечающий компьютер, кажется, отвечает, используя локальный IP-адрес отправителя, что не удается. Я пробовал его на 3 разных компьютерах - на экземпляре сервера Amazon Web Services (AWS) EC2 Windows (он имеет как общедоступный c, так и частный IP-адрес), Windows 10 компьютер с общедоступным c (stati c) и частный IP, а также компьютер Windows 10, который имеет только локальный IP, но с настройкой переадресации портов на маршрутизаторе для маршрутизации на него портов UDP / TCP 2020-2100 - и каждый из них дает сбой в так же. Это не проблема с блокировкой пакетов - я открыл соответствующие порты UDP / TCP на всех брандмауэрах - но при использовании неправильного адреса для ответа.

Компьютер 1: Publi c IP = 100.5.195.74 (маршрутизатор), частный IP = 192.168.1.183 (Windows 10, NAT)
Компьютер 2: Publi c IP = 54.175.128.251, частный IP = 172.30.0.213 (AWS)

На компьютере 1 я вызываю TetheringManager.DiscoverManager, используя в качестве цели IP-адрес компьютера 2 Publi c. Используя TTetheringLogItem на компьютере 2, я регистрирую сообщения на входе и выходе - 6 зарегистрированных сообщений показаны ниже. Первые 3 сообщения правильно отмечают опубликованный c IP-адрес компьютера 1 в качестве источника пакета данных, хотя содержимое сообщения (составленного компьютером 1) включает локальный IP-адрес компьютера 1. В последних 3 сообщениях, в том числе, когда компьютер 2 пытается ответить на компьютер 1, он сбрасывает общедоступный IP-адрес компьютера 1 c и использует только свой частный IP-адрес. Компьютер 1 никогда не получает сообщение, поскольку оно не было отправлено на его публичный c IP-адрес.

Есть ли способ сообщить администратору модема ответить, используя опубликованный c IP-адрес, с которого пришли сообщения ? Более того, он может автоматически попытаться опубликовать c IP в случае сбоя частного IP.

2020/02/29 21:17:12: Log: DoOnReceiveData("100.5.195.74$2020") Data: "TetheringDiscoverManagers|192.168.1.183$2020|1|2020~"
2020/02/29 21:17:12: Log: DoOnReceiveData - Enqueue Command: "100.5.195.74$2020|TetheringDiscoverManagers\|192.168.1.183$2020\|1\|2020"
2020/02/29 21:17:12: Log: Net-In(100.5.195.74$2020): MyManager: Waiting -> TetheringDiscoverManagers|192.168.1.183$2020|1|2020
2020/02/29 21:17:12: Log: In(192.168.1.183$2020): 0: MyManager: Waiting -> TetheringDiscoverManagers|192.168.1.183$2020|1|2020
2020/02/29 21:17:12: Log: Out(192.168.1.183$2020): state: Waiting; Resp: <TetheringServerDiscovered|172.30.0.213$2020|1|{9816D745-81C2-4CD9-9F10-92DEB4FF7694}|TetheringManager|MyManager|Network~>
2020/02/29 21:17:12: Log: Net-Out(192.168.1.183$2020): state: Waiting; Resp: TetheringServerDiscovered|172.30.0.213$2020|1|{9816D745-81C2-4CD9-9F10-92DEB4FF7694}|TetheringManager|MyManager|Network~

1 Ответ

0 голосов
/ 07 марта 2020

Это недостаток реализации AppTethering во всех версиях до (включая) 10.3.3. Обходной путь невозможен.

...