Linux 客户端A在发送数据包时将源mac地址更改为客户端B,但客户端B';服务器发送后,s模块无法接收数据包
我有三个主持人: 客户A 客户B 服务器 我有以下测试场景: 客户端A向服务器发送原始数据包(将源mac地址更改为客户端B的) 服务器回复此数据包(我使用tcpdump确保服务器已回复此数据包) 客户端B安装了一个模块,在netfilter预路由上注册钩子功能,但没有收到任何消息 有人知道为什么客户端B的钩子函数什么都没有收到吗Linux 客户端A在发送数据包时将源mac地址更改为客户端B,但客户端B';服务器发送后,s模块无法接收数据包,linux,network-programming,mac-address,ipv4,netfilter,Linux,Network Programming,Mac Address,Ipv4,Netfilter,我有三个主持人: 客户A 客户B 服务器 我有以下测试场景: 客户端A向服务器发送原始数据包(将源mac地址更改为客户端B的) 服务器回复此数据包(我使用tcpdump确保服务器已回复此数据包) 客户端B安装了一个模块,在netfilter预路由上注册钩子功能,但没有收到任何消息 有人知道为什么客户端B的钩子函数什么都没有收到吗 谢谢 可能是因为您的交换机在客户端A的端口上看到了客户端B的MAC地址,并且记住了这一点。因此,它将通过以太网端口将应答发送到客户端A,而不是客户端B的erhernet
谢谢 可能是因为您的交换机在客户端A的端口上看到了客户端B的MAC地址,并且记住了这一点。因此,它将通过以太网端口将应答发送到客户端A,而不是客户端B的erhernet端口
这似乎是一个网络问题,而不是编程问题。因此,这个问题在不同的论坛上可能更合适。服务器端有一个ARP缓存,可能它已经包含主机a和主机a的原始MAC之间的关联(我猜当客户端a与服务器建立连接时会出现此关联) 将显示ARP表的内容。
每个ARP表项都有一些过期超时。当它过期时,服务器试图通过向本地网络中的所有主机发送具有请求的ARP来刷新过期条目。因此,只有在主机A的缓存条目过期后,服务器才会吸收更新的信息。ARP与此无关,OP正在生成原始以太网数据包。
arp -n