Корреляция пакетов UDP того же хоста в Go

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

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

2 ответа

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

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

: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 функция считает их равными.

Другие вопросы по тегам