Многосетевые UDP-серверы Python прослушивают 0.0.0.0 - PullRequest
1 голос
/ 18 марта 2019

Поскольку в python нет поддержки IP_PKTINFO (для IPv4), нет ли в производстве многопользовательских серверов python UDP?

Если есть (и я ожидаю, чтобыть), как они решают проблему отправки ответных пакетов UDP на интерфейс, с которого они получили запрос!


РЕДАКТИРОВАТЬ для уточнения

Позволяетскажем, у меня есть сервер UDP с несколькими интерфейсами (рассмотрим 2 здесь), каждый с IP 172.217.163.68 и 172.217.163.69 соответственно.На сервере есть вызов связывания сокета на 0.0.0.0.Теперь, если пакет запроса приходит 172.217.163.68, сервер обрабатывает его, формирует ответный пакет и затем отправляет на какой интерфейс?Нет никакого способа узнать интерфейс, из которого поступил пакет запроса, поэтому он не может заполнить IP интерфейса отправителя.Это потому, что в python нет поддержки IP_PKTINFO.

Также следует отметить, что мы не можем использовать маршрут по умолчанию здесь.Если используется маршрут по умолчанию, то с точки зрения клиента он отправляет запрос на 172.217.163.68, но получает ответ от 172.217.163.69, что, очевидно, неверно.

1 Ответ

0 голосов
/ 18 марта 2019

UDP-серверы используют recvfrom и sendto , чтобы получить IP-адрес источника и отправить ответ:

Получение: message, address = socket.recvfrom(1024)

Отправить: socket.sendto(message, address)

Вы можете увидеть пример UDP-сервера на python в этот вопрос

...