I just figured this out. I need to manually set the NIC to promiscuous mode.
Now the question is, is there a way to set the NIC to promiscuous mode in code, like in pcap.openlive?? I don't see that option with AF_packet. Thanks, Chun On Tuesday, October 17, 2017 at 6:31:21 PM UTC-4, Chun Zhang wrote: > > Hi, friends, > > I am trying to create a very simple network sniffer. Initially I > implemented it with libpcap, but I got not only performance issue, but also > timing issue. Now I am trying to replace libpcap with afpacket. However, I > am not able to get any packet from the GRE tunneled terminated at the > listening NIC. > > I know I have quite a few packets terminated at this NIC. If using pcap as > below, then I see all those packets, decoded up to the GRE layer, and its > payload. > But switching to afpacket, I can only get non-GRE packet, such as IGMP, > ICMP, etc. (These packets are also seen in the above pcap version). I can > see normal TCP packets as well, but no GRE packets, they are not even read > from wire as far as I can see, since there is no decoding error at all. > > So, my dear gophers, what have I done wrong? Any help is appreciated. I > have googled quite a bit, but does not really get any useful answer. > Do I need to somehow magically enable the promiscuous mode? I don't see an > option in afpacket. > > > Here is my code snippet > > > //pcap version > handle, err = pcap.OpenLive(device, snapshot_len, promiscuous, timeout) > if err == nil { > Info.Println("Open interface ", device, "successfully") > } > defer handle.Close() > > > > //afpacket version > handle, err := afpacket.NewTPacket(afpacket.OptInterface(device)) > > if err != nil { > Error.Printf("Error opening afpacket interface: %s", err) > } > > defer handle.Close() > > > //create a source and listen to it > > packetSource := gopacket.NewPacketSource(handle, layers.LinkTypeEthernet) > > > for { > > packet, err := packetSource.NextPacket() > // Iterate over all layers, printing out each layer type > for _, layer := range packet.Layers() { > fmt.Println("PACKET LAYER:", layer.LayerType()) > } > > > > Here is my code snippet, > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.