How to know if the server application is listening on ipv6

In a VPS (webfaction) I opened a port 14152 and I am running an application which is listening connections on that port, this is the output of netstat -putan | grep 14152

udp6       0      0 :::14152         :::*        79238/./server.x86_

So is this server.86 (.net code) listening on 0.0.0.0:14152? on ipv6 port type udp? I am not sure how to confirm it.

If I have a client application which is trying to connect to this port would it work with ipv4? or it has to be ipv6?

I cannot find anything to configure webfaction to listen through ipv4 which is strange.

0
задан 11 April 2018 в 01:02
2 ответа

Так этот сервер.86 (.net code) прослушивает 0.0.0.0:14152?

Если вы предоставили полный вывод этой команды, то нет. Дважды, если это слишком технически.

Во-первых, в техническом смысле, UDP не имеет "прослушивания" системного вызова, поэтому UDP никогда не будет прослушивать, а будет только получать. Однако, скорее всего, вы спрашиваете в более общем смысле, так что...

Во-вторых, две части информации на выходе, которую вы предоставляете, показывают, что это IPv6 сокет. Начало строки udp6 означает, что это UDP-сокет IPv6, в отличие от UDP-сокета IPv4. Различается ли UDP между IPv4 и IPv6? Нет. Тогда почему же разница? Сокет привязан как к адресу L3, так и к L4; это просто помогает пользователю легче различать IPv4 и IPv6 сокеты при просмотре вывода (или использовании сортировки, grep и т.д.)

Тогда у вас есть :::14152, который четко показывает адрес IPv6. Как так? Ну, и с IPv4, и с IPv6 трейлинг : указывает портную часть сокета, а удаление этой части сокета оставляет IP-адрес. В этом случае вы получаете :, который является "неопределённым" IPv6-адресом всех нулей.

Если вы не знакомы с IPv6-адресацией, есть несколько правил, которые позволяют сделать их более удобочитаемыми, когда это возможно. Здесь правило называется "Сжатие нуля" и позволяет использовать "::" для представления "одной или нескольких групп по 16 бит нулей" (RFC 5952 - хотя в разделе 4.2.2 далее указано, что оно должно применяться только к более чем одной группе). Так что адрес только ::, как указано в выводе, это адрес всех нулей.

на порту ipv6 тип udp?

Точно.

Если бы у меня было клиентское приложение, которое пытается подключиться к этому порту, оно бы работало с ipv4?

Опять же, если бы вывод, который вы дали, был полным, нет гнезда для 0.0.0.0:14152. Поэтому ничто не настроено на получение UDP IPv4 на порту 14152. Поэтому нет, IPv4 не должен работать. Единственный способ, при котором он может работать, - это какая-то трансляция 6-4 (т.е. NAT-PT/NAT64), где-то преобразовывающая трафик IPv4 в трафик IPv6

.
0
ответ дан 5 December 2019 в 06:14

Правильно написанный клиент IPv6, использующий udp, сможет взаимодействовать с вашим сервером (если нет падения пакетов), который "прослушивает" этот порт. Но это не вызов функции listen(). Он отличается от tcp.

Смотрите эти статьи:

https://stackoverflow.com/questions/8194323/why-the-listen-function-call-is-not-needed-when-use-udp-socket

https://unix.stackexchange.com/questions/228506/how-to-verify-a-service-is-listening-on-both-ipv4-and-ipv6

Нет никакой гарантии, что это произойдет для IPv4 на основе этого вывода. В конце концов, вы захотите протестировать все случаи использования.

0
ответ дан 5 December 2019 в 06:14

Теги

Похожие вопросы