首页 > 解决方案 > 无法在原始套接字上接收 GRE 数据包

问题描述

我正在尝试编写一个通过 IPv4 数据包接收 GRE 的程序。

这是我的python代码:

from socket import socket, AF_INET, SOCK_RAW, IPPROTO_GRE
s = socket(AF_INET, SOCK_RAW, IPPROTO_GRE)

msgAndAddress = s.recvfrom(1024)

print("got message");

我正在运行该程序,然后另一个程序通过 veth 对在同一台机器上发送 GRE 数据包。这是发送数据包时 veth 接收端 tcpdump 的结果:

22:00:07.250726 da:1d:20:cc:b1:5f > 2a:59:3c:6f:14:9c, IPv4, length 176: (tos 0x0, ttl 1, id 42963, offset 0, flags [DF], proto GRE (47), length 162)
    10.254.1.6 > 10.254.3.0: GREv0, Flags [key present], key=0x96040000, proto TEB (0x6558), length 142
    84:40:76:00:00:01 > 55:01:02:00:01:00, IPv4, length 134: (tos 0x0, ttl 1, id 1, offset 0, flags [none], proto Options (0), length 20)
    1.2.2.1 > 1.2.2.2:  ip-proto-0 0

但是python代码不打印任何东西。我还尝试将套接字绑定到特定的 IP 地址或接口,但没有帮助。

标签: pythonlinuxsocketsnetworkingnetwork-programming

解决方案


当我将 veth 的另一侧移动到新的网络命名空间时,问题得到了解决。


推荐阅读