Вопрос:
Предположим, что у вас есть UDP-сервер, работающий на порту 9030 в Linux, и вы не можете каким-либо образом получить доступ к этому UDP-серверу. Брандмауэр или аналогичная настройка не предотвращают доступ к этому UDP-порту. А также, пожалуйста, знайте, что пакет достигает сетевого стека O.S. и когда О.С. получает пакет, он немедленно отправляет ICMP-пакет Destination Port Unreachable. И к вашему удивлению, вывод netstat показывает, что UDP-сервер работает на точном порту, который вы назначили, как показано ниже:
udp 0 0 212.253.35.111:9030 0.0.0.0:* 722/udpServerApp
Также обратите внимание, что UDP-сервер прослушивает открытый IP-адрес, а не localhost или т.д. Значение пакета достигает этого общедоступного IP-адреса.
Так что может получиться не так? Что бы вы предпочли? Я действительно смущен.
Ответ №1
Вероятно, вы не слушаете правильный адрес – например. прослушивание 127.0.0.1 (localhost) вместо “любого” адреса. Точный вывод netstat скажет вам, что (но вы не опубликовали его и не попросили угадать, так что вот оно).
Ответ №2
Ваш сокет прослушивает локальный IP-адрес 212.253.35.111, на порт 9030.
Проверьте, через tcpdump или wirehark, что вы действительно отправляете UDP-пакеты на IP 212.253.35.111, порт 9030.
Вы пытаетесь подключиться к неправильному порту, неправильному IP-адресу или иметь брандмауэр (например, некоторые локальные правила iptables), которые вы еще не обнаружили, или есть ошибка маршрутизации, и у вас как-то есть 2 компьютера где-то с тем же IP-адресом (вполне возможно с некоторой настройкой балансировки нагрузки/горячего резервирования, например, если вы используете VRRP)
Ответ №3
Какой IP-адрес связан с сервером UDP?
Если он привязан только к 127.0.0.1, тогда он не будет доступен из внешних сетевых интерфейсов.
Чтобы прослушивать каждый интерфейс, он должен быть привязан к INADDR_ANY.