作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下设置:
client(eth0) --- (eth2) linux bridge (eth1) --- (eth1) server
fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
read()
,读取数据的前6个字节为目的mac地址,正确读取为server(eth1)。
fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
read()
,读取数据的前6个字节显示目的mac地址是linux bridge (eth2)。
最佳答案
对于 ETH_P_IP 情况,您所描述的听起来像是正常的“路由”场景。
(即路由 mac 是目标 mac。)
如果您的客户端和服务器位于不同的子网/vlan 上,并且介于两者之间,那将是有意义的。
但是,该图指示了一个 linux“桥”。
它只做桥接而不做路由吗?
编辑
ETH_P_IP 仅根据此答案捕获传入的 IP 数据包:
Packet Sniffing using Raw Sockets in Linux in C
关于sockets - 为什么在执行 read() 时 ETH_P_IP 和 ETH_P_ALL 之间存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783527/
在 Linux(2.6.39 内核)上,使用原始套接字,我试图接收系统本身发出的所有多播帧。 我创建了一个原始套接字 socket(AF_PACKET, SOCK_RAW, htons(ETH_P_I
我有以下设置: client(eth0) --- (eth2) linux bridge (eth1) --- (eth1) server 当我使用在 linux 网桥上打开一个 RAW 套接字时 f
我是一名优秀的程序员,十分优秀!