GRE封装server1至server2流量失效:ping未被捕获问题求助
问题:GRE封装Server1到Server2流量未生效,Ping流量未被捕获
概述
我尝试对server1发往server2的所有流量进行GRE封装,通过ping server2的IP地址10.1.1.1开展测试,同时在server2上部署tcpdump以验证流量是否已被封装。
但运行该二进制文件前后,ping均能成功,说明流量并未被封装,与预期不符。
拓扑图
Server1<-.3-------->172.16.241.0<---.2-->Server2
问题细节
我在server1上运行如下Go代码,并在server1发起ping请求,但ping流量似乎未被捕获。
代码
package main import ( "log" "net" "github.com/google/gopacket" "github.com/google/gopacket/layers" "github.com/google/gopacket/pcap" ) func main() { // Open a network interface in promiscuous mode handle, err := pcap.OpenLive("eth0", 65535, true, pcap.BlockForever) if err != nil { log.Fatal(err) } defer handle.Close() // Set a capture filter that drops all packets err = handle.SetBPFFilter("ip") if err != nil { log.Fatal(err) } // Start capturing packets packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) for packet := range packetSource.Packets() { // Check if the packet is an IPv4 packet ipv4Layer := packet.Layer(layers.LayerTypeIPv4) if ipv4Layer != nil { ipv4 := ipv4Layer.(*layers.IPv4) // Extract the Ethernet layer from the received packet ethLayer := packet.Layer(layers.LayerTypeEthernet) if ethLayer == nil { log.Printf("Error extracting Ethernet layer") continue } eth := ethLayer.(*layers.Ethernet) greLayer := &layers.GRE{ Protocol: layers.EthernetTypeIPv4, } newIpv4 := &layers.IPv4{ Version: 4, SrcIP: net.IP{192, 168, 1, 1}, DstIP: net.IP{192, 168, 1, 2}, Protocol: layers.IPProtocolGRE, Flags: layers.IPv4DontFragment, TTL: 64, Id: 33852, IHL: 5, } // Update the checksums options := gopacket.SerializeOptions{ ComputeChecksums: true, } buf := gopacket.NewSerializeBuffer() err := gopacket.SerializeLayers(buf, options, eth, greLayer, newIpv4, ipv4, gopacket.Payload(ipv4.BaseLayer.LayerPayload()), ) if err != nil { log.Printf("Error serializing layers: %v", err) } // Send the modified packet err = handle.WritePacketData(buf.Bytes()) if err != nil { log.Printf("Error sending packet: %v", err) } } } }
看起来ping流量未被代码捕获。
内容的提问来源于stack exchange,提问作者amb1s1
相关产品推荐
相关产品推荐

