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