You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:30:58