Linux rawSocket 混杂模式下如何才能不接受自己发送的数据包,在线等!!!!

huliweiweiba 2017-12-25 10:06:12
是这样的,小弟最近在做RawSocket,两个网卡eth0和eth1(并没有配置IP),需要把eth0收到的包从eth1发送出去,把eth1收到的包从eth0发送出去,我的socket:fd= socket(AF_PACKET, SOCKET_RAW, htons(0x03));并且将网卡设置为混杂模式。
最后产生了一个现象:从eth1发送出去的包,又被eth1接受。
有没有哪个设置能只让socket收到网卡接受的数据包,不管网卡发送的数据包?
x小弟在此谢过大神!
...全文
1401 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
安倍逸清 2018-11-19
  • 打赏
  • 举报
回复
RecvCount = recvfrom(pds->Fd, buf, buflen, MSG_TRUNC, (struct sockaddr *)&recvaddr, &recvlen);

/*
sll_pkttype: 表示当前接收的数据包的类型,主要有以下几种合法的值:

PACKET_HOST 发送给当前主机的包,
PACKET_BROADCAST 广播数据包,
PACKET_MULTICAST 多播数据包
PACKET_OTHERHOST 因为网卡设置了混杂模式收到的发送给别的主机的包
PACKET_OUTGOING 从本机发出的,不小心loopback到当前socket了
*/
// 屏蔽从本机发出的数据包
if(PACKET_OUTGOING == recvaddr.sll_pkttype)
{
return 0;
}
if(RecvCount < 42)
{
return 0;
}

return RecvCount;
tommyshi 2018-10-12
  • 打赏
  • 举报
回复
楼主你好,你的问题解决了吗?你是怎么解决的呢?
我也遇到了同样的问题,因为ETH0 ,ETH1是用rawsocket做数据转发,由于该数据不是本机产生的,所以发出去的帧中源mac并不是网口eth0或eth1本身的MAC地址,所以用楼上2位的方法无法解决问题。
kinkon007 2018-03-13
  • 打赏
  • 举报
回复
可以通过mac地址过滤一下,判断源mac地址是本机的就不接收,混杂模式会把所有经过网卡的数据包给捕获到。
xiaopi224 2018-03-11
  • 打赏
  • 举报
回复
上层自己过滤吧,好像没现成的。

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧