Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 客户端A在发送数据包时将源mac地址更改为客户端B,但客户端B';服务器发送后,s模块无法接收数据包_Linux_Network Programming_Mac Address_Ipv4_Netfilter - Fatal编程技术网

Linux 客户端A在发送数据包时将源mac地址更改为客户端B,但客户端B';服务器发送后,s模块无法接收数据包

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

服务器

我有以下测试场景:

客户端A向服务器发送原始数据包(将源mac地址更改为客户端B的)

服务器回复此数据包(我使用tcpdump确保服务器已回复此数据包)

客户端B安装了一个模块,在netfilter预路由上注册钩子功能,但没有收到任何消息

有人知道为什么客户端B的钩子函数什么都没有收到吗


谢谢

可能是因为您的交换机在客户端A的端口上看到了客户端B的MAC地址,并且记住了这一点。因此,它将通过以太网端口将应答发送到客户端A,而不是客户端B的erhernet端口


这似乎是一个网络问题,而不是编程问题。因此,这个问题在不同的论坛上可能更合适。

服务器端有一个ARP缓存,可能它已经包含主机a和主机a的原始MAC之间的关联(我猜当客户端a与服务器建立连接时会出现此关联)

将显示ARP表的内容。
每个ARP表项都有一些过期超时。当它过期时,服务器试图通过向本地网络中的所有主机发送具有请求的ARP来刷新过期条目。因此,只有在主机A的缓存条目过期后,服务器才会吸收更新的信息。

ARP与此无关,OP正在生成原始以太网数据包。
arp -n