0
私は次のようにOSPFv2のハローメッセージを受信しようとしている:行くと(OSPF特異的に)マルチキャスト
ens192, err := net.InterfaceByName("ens192")
if err != nil {
return err
}
c, err := net.ListenPacket("ip4:89", "0.0.0.0") // ipv4 proto 89, all local interfaces
if err != nil {
return err
}
defer c.Close()
p := ipv4.NewPacketConn(c)
if err != nil {
return err
}
allSPFRouters := net.ParseIP("224.0.0.5")
if err := p.JoinGroup(ens192, &net.IPAddr{IP: allSPFRouters}); err != nil {
return err
}
if err := p.SetControlMessage(ipv4.FlagDst|ipv4.FlagSrc|ipv4.FlagInterface, true); err != nil {
return err
}
b := make([]byte, 8192)
for {
n, cm, src, err := p.ReadFrom(b)
_ = n
if err != nil {
return err
}
if cm.Dst.IsMulticast() {
if cm.Dst.Equal(allSPFRouters) {
hdr := &ospfHeader{}
hdr.Decode(b)
fmt.Printf("%s\n", hdr)
} else {
// ignore/discard
fmt.Printf("Received packet from: %v to %v\n", src, cm.Dst)
continue
}
} else {
fmt.Printf("Not mcast\n")
}
}
を私はローカルでのみOSPFメッセージを生成見ることができます(つまり、ローカルマシン上のOSPFプロセスから。)。私はリモートマシンから来るOSPFパケットを見ることができません(私はtcpdumpでそれらを見ることができます)。 上記のコードに何が間違っていますか?なぜ私は地元のHellosしか見ることができず、遠隔地は見えないのですか?