为什么Go仅使用环回接口发送我的多播数据包?

问题描述 投票:0回答:1

我无法从Win 10上的Go发送多播请求到LAN。

我有Windows 10 1909。

我正在使用过滤器host 239.255.255.250 or host 172.19.21.116 or port 1982运行wireshark,其中.116是我要寻找的设备的IP。

我已安装YeeLight UWP app

我有此代码(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中,我看到带有源127.0.0.1和目标239.255.255.250的单个UDP数据包

[当我运行Yeelight UWP应用时,在WireShark中,我在WireShark中看到两个相同的数据包:一个使用以太网接口,另一个使用环回。

并且一段时间后,操作系统开始工作(几个小时-不同的应用程序正在运行,它开始工作。

我使用时

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

我无法从Win10上的Go发送多播请求到LAN。我有Windows 101909。我正在运行带有过滤器主机239.255.255.250或主机172.19.21.116或端口1982的wirehark,其中.116是IP的...

go udp multicast
1个回答
0
投票

似乎go1.14.1解决了此问题。但更改日志中没有任何内容。

© www.soinside.com 2019 - 2025. All rights reserved.