开发者社区> 问答> 正文

在fedora38虚拟机中ebpf程序跟踪socket得到的源IP地址和目的ip地址一样

在虚拟机上进行编译和执行,得到的结果源地址IP和目的地址IP是一样的,网络用的桥接模式。
image.png
在user程序中进行对百度的ping操作。而且监控网口改成了我自己的网口。
image.png
image.png
但是得到的就有我虚拟机的地址,socket源和目的地址都是。
这是负责储存信息的结构体,在map中作为键key。
image.png
这是给结构体中源和目标地址赋值的操作函数部分。
image.png
image.png
这是map,值为包的数量和大小的结构体。
image.png
image.png

这是user态的输出。
image.png

像是端口,协议号,包数和数据大小都能正常输出,就是这个源地址和目的地址是一样的。
然后我把源和目的地址改成定值1和2.
image.png
输出就是1和2,感觉这是对的(没有ping百度,是连接的vscode,走22端口)
image.png
然后我又去看了这个struct sk_buff的偏移量,确实也是不一样的,源地址n1的偏移量26,目的地址n2的偏移量30,理应得到两个不同的内容才对。
image.png
image.png
这俩load_word函数得到的理应是不同的值才对。但输出的确实是同一个值。
image.png
但输出就是一样的,就怀疑是struct
sk_buff结构体里面填充的源和目的地址是一样的。
这个程序就是源码目录下/samples/bpf/sockex3.
我不能理解为什么,也许是我没理解到程序在做什么,求救大佬指导。

展开
收起
游客cw5pf7w7zlhtk 2024-05-08 18:15:50 48 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载