python - 无法在原始套接字上接收 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 地址或接口,但没有帮助。
解决方案
当我将 veth 的另一侧移动到新的网络命名空间时,问题得到了解决。
推荐阅读
- reactjs - 时间在 React 中没有正确显示
- python - 慢熊猫扩展().std()窗口函数的替代方法
- python - 如何使用配置文件指定要排序的目录?
- java - 如何将自定义图标设置为 JFrame?
- flutter - 如何在颤振中使用过期包构建和发布
- python - 如何使用 Django 访问网页的数据?
- bash - 如何在 Debian 上查看非当前内核的日期
- python - Traceback(最近一次通话最后一次)错误,即使是空项目
- asp.net-core - Razor Pages - 重复名称返回错误
- regex - 如何匹配除选项卡以外的所有内容(用于 git diff --word-diff-regex)