2017-06-08 8 views
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しか見ることができず、遠隔地は見えないのですか?

答えて

0

問題を解決しました。コードはOKです - "問題"は赤い帽子で、ファイアウォールは...

関連する問題