Я не могу отправить многоадресный запрос в ЛС с Go на Win10.
У меня Windows 10 1909.
У меня запущен wireshark с фильтром host 239.255.255.250 or host 172.19.21.116 or port 1982
, где .116
это IP-адрес устройства, которое я ищу.
У меня есть Приложение YeeLight UWP установлено
У меня есть этот код ( удаляется каждые if err != nil
):
package main
import (
"bytes"
"net"
"time"
)
func main() {
bulbMulticastAddr := &net.UDPAddr{IP: net.IPv4(239, 255, 255, 250), Port: 1982}
bulbSearchRequest := new(bytes.Buffer)
_, err := bulbSearchRequest.WriteString("M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1982\r\nMAN:\"ssdp:discover\"\r\nST:wifi_bulb\r\n")
conn, err := net.ListenUDP("udp4", bulbMulticastAddr)
conn.WriteTo(bulbSearchRequest.Bytes(), bulbMulticastAddr)
time.Sleep(time.Duration(6) * time.Second)
}
Когда я запускаю go run myapp
, в WireShark я вижу одиночный пакет UDP с источником 127.0.0.1
и назначением 239.255.255.250
Когда я запускаю приложение Yeelight UWP в WireShark Я вижу в WireShark два одинаковых пакета: один с интерфейсом Ethe rnet, а другой с обратной связью.
И через некоторое время ОС работает (несколько часов - работают разные приложения), она начинает работать.
Когда я использую
iflist, _ := net.Interfaces() // iflist[0] is Ethernet
conn, err := net.ListenMulticastUDP("udp4", &iflist[0], bulbMulticastAddr)
conn.WriteTo(bulbSearchRequest.Bytes(), bulbMulticastAddr)
Все идет хорошо
Что я делаю не так? Каждый урок о многоадресной рассылке показывает, как я поступаю правильно, но он работает не так, как ожидалось. Я что-то упустил?
Почему ListenUDP () не работает должным образом?
go version go1.14 windows/amd64