linux 网口 混杂模式,如何在Linux上正确地将网络接口置于混杂模式(How to properly put network interface into promiscuous mode on...

本文介绍了如何在Linux上正确设置网络接口的混杂模式,包括使用ioctl的潜在问题和通过setsockopt使用PACKET_MR_PROMISC的方法。虽然setsockopt方法在某些情况下可能不更新ifconfig状态,但确实能生效并允许程序如Wireshark捕获所有数据包。
摘要由CSDN通过智能技术生成

如何在Linux上正确地将网络接口置于混杂模式(How to properly put network interface into promiscuous mode on Linux)

那么你如何正确地做到这一点?

我知道如何通过创建套接字,然后使用ioctl设置IFF_PROMISC标志(如“ 如何检查C中的网络设备状态? ”和其他地方中所述),但这至少在理论上看起来有缺陷。

1)你通过ioctl读取标志2)你更新标志3)别人修改标志4)你通过ioctl设置更新的标志

有更好的方法还是我太担心?

后来我发现应该通过setsockopt(也没有竞赛)将接口添加到PACKET_MR_PROMISC,如下所示:

void set_promisc(const char *ifname, bool enable)

{

struct packet_mreq mreq = {0};

int sfd;

int action;

if ((sfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == -1) {

perror("unable to open socket");

return;

}

mreq.mr_ifindex = if_nametoindex(ifname);

mreq.mr_type = PACKET_MR_PROMISC;

if (mreq.mr_ifindex == 0) {

perror("unable to get interface index");

return;

}

if (enable)

action = PACKET_ADD_MEMBERSHIP;

else

action = PACKET_DROP_MEMBERSHIP;

if (setsockopt(sfd, SOL_PACKET, action, &mreq, sizeof(mreq)) != 0) {

perror("unable to enter promiscouous mode");

return;

}

close(sfd);

}

不幸的是,这对接口没有任何影响,尽管它应该,如果我正确地解析文档 。 自2001年(tm)以来可能会被打破 ? pcap source中的评论也抱怨这一点。

So how do you do this properly?

I know how to do it by cr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值