Корреляция пакетов UDP того же хоста в Go - PullRequest
0 голосов
/ 24 августа 2018

В Go можно отправлять UDP-пакеты, используя интерфейс net.Addr для указания конечной конечной точки.Некоторые специальные адреса, например :8080 и 0.0.0.0, отправляют пакеты с использованием локального интерфейса обратной связи.При получении, все еще на том же хосте, сообщение net.Addr показывает [::1]:8080 в качестве источника.Какой самый простой способ определить, что пакет был отправлен и получен тем же хостом?

Вот пример на игровой площадке Go.Он показывает 0.0.0.0:8080 (ipv4) вместо [::1]:8080.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

В итоге я использовал net.Dial("udp", addr) и окончательно закрыл соединение.Dial также разрешает имена хостов, которые мне также были нужны.

Было бы неплохо избежать создания сокета, но Dial пока работает.

0 голосов
/ 24 августа 2018

:8080 - это не адрес, это номер порта, который обычно используется при тестировании ваших собственных веб-сайтов http в Windows, потому что в Windows вы не можете легко использовать порт 80, фактический порт http. Это будет использовать интерфейс обратной связи, только если вы используете localhost в качестве IP-адреса.

Адрес локального хоста для IPv4 - 127.0.0.1, а для IPv6 - ::1. Адрес 0.0.0.0 обычно используется как адрес-заполнитель для указания, например, прослушивания всех IP-адресов, см. этот вопрос .

Как уже упоминалось в комментарии, вы можете использовать net.IP.Equal , чтобы проверить, является ли ваш пэр localhost. Просто сравните ваш адрес с 127.0.0.1 или ::1, функция net.IP.Equal считает их равными.

...