Проблема с идентификацией порта отправителя UDP 'C ++ SOCKET' - PullRequest
0 голосов
/ 02 сентября 2018

Извините, это может быть дубликат, но после 2 часов исследований и тестирования.
Я не нашел ничего полезного, чтобы решить мою проблему или понять это хорошо. Поэтому я решил опубликовать его.


Клиент связан с портом 2000 (без переадресации порта)
Сервер привязан к порту 50000 (с переадресацией порта)

Когда клиент отправляет пакет на сервер, сервер не видит порт отправителя как 2000, а вместо этого случайный порт «пример 57788» (обычно 40000-60000)


Если сервер отвечает на пакет «57788», клиент получает его нормально.

Но если сервер отправит пакет на порт '2000', клиент не получит его.
(получает, только если порт клиента также перенаправлен на маршрутизатор ...)



Также я попытался привязать сервер к порту 50000,
и самому отправлять пакет (IP'85.xx.xx.xx ', порт '50000')
Ведь тогда сервер должен получить пакет с того же IP и порта, но снова. он получает от случайного порта вместо 50000.

ПРИМЕЧАНИЕ: при использовании открытого IP-адреса '85 .xx.xx.xx 'возвращаемый порт является случайным. ПРИМЕЧАНИЕ: при использовании локального IP-адреса «192.168.xx.xx» возвращается порт 50000.





Я пытаюсь создать прокси с партнером udp.
По запросу udp associate клиент должен сообщить прокси-серверу, что это UDP IP '85.xx.xx.xx 'и порт '2000', куда прокси-сервер отправит дейтаграммы. (сервер-> прокси-> ip: предоставленный порт)
Но с этой проблемой прокси должен посылать дейтаграммы на «случайный порт» вместо порта 2000. Ведьма не годится (в целях безопасности ..).



Может кто-нибудь объяснить мне, почему это происходит?
Можем ли мы определить исходный порт «2000», даже если мы должны ответить на 57788?
Поправь меня, если что-то не так.


Заранее спасибо.

...