如何生成流量并通过 GTP 隧道获取流量?

问题描述

我的电脑上部署了一个模拟的5G核心网(项目是Free5GC)。我需要生成不同类型的流量(我从一个简单的 Http 获取给定 URL 开始)。该流量将被发送到本地 IP 地址,即模拟的 UE(用户设备)。然后这个 UE 会继续将流量路由到网络之外,它也会将响应返回给我。这部分过程对我来说是透明的(我可以用 Wireshark 观察)。 我现在只有项目给出的测试ping的代码,如下:

    // ping IP(tunnel IP) from 60.60.0.2(127.0.0.1) to 60.60.0.20(127.0.0.8)
        gtpHdr,err := hex.DecodeString("32ff00340000000100000000")
        assert.Nil(t,err)
        icmpData,err := hex.DecodeString("8c870d0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637")
        assert.Nil(t,err)
        ipv4hdr := ipv4.Header{
            Version:  4,Len:      20,Protocol: 1,Flags:    0,TotalLen: 48,TTL:      64,Src:      net.ParseIP("60.60.0.1").To4(),Dst:      net.ParseIP("60.60.0.101").To4(),ID:       1,}
        checksum := test.CalculateIpv4HeaderChecksum(&ipv4hdr)
        ipv4hdr.Checksum = int(checksum)

        v4HdrBuf,err := ipv4hdr.Marshal()
        assert.Nil(t,err)
        tt := append(gtpHdr,v4HdrBuf...)

        m := icmp.Message{
            Type: ipv4.ICMPTypeEcho,Code: 0,Body: &icmp.Echo{
                ID: 12394,Seq: 1,Data: icmpData,},}
        b,err := m.Marshal(nil)
        assert.Nil(t,err)
        b[2] = 0xaf
        b[3] = 0x88
        _,err = upfConn.Write(append(tt,b...))
        assert.Nil(t,err)

老实说,我不太清楚我必须做什么。我知道我可以使用 http get 请求:

resp,err := http.Get(url)

但是由于我必须将其发送到一个具有 GTP 隧道的 IP 地址,我不知道该怎么做。 我应该创建一个 ipv4 消息吗?我如何将信息放入 http get 请求中? 抱歉,我不能说得更具体了,但我对这个主题有点迷茫,我找不到有关它的有用信息。 等待你的答复。 问候,维克多。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...