Linux网络编程- 开启混杂模式(PROMISC)的两种方式

以下两种方式都是用于开启混杂模式,但它们的工作方式略有不同。

  1. 使用ioctlIFF_PROMISC的方法

    • 这种方法直接操作网络接口,设置它为混杂模式。
    • 使用ioctl系统调用和网络接口配置请求SIOCGIFFLAGS(获取接口标志)和SIOCSIFFLAGS(设置接口标志)。
    • 当这种混杂模式被设置时,我们会看到接口的标志(例如,通过ifconfigip命令)中有PROMISC
    • 使用这种方法开启的混杂模式对所有应用程序都有效,因为它是在设备级别设置的。
  2. 使用setsockoptPACKET_MR_PROMISC的方法

    • 这种方法是在套接字级别设置混杂模式,仅针对特定的套接字。
    • 使用setsockopt系统调用,并使用PACKET_MR_PROMISC标志。
    • 使用这种方法设置混杂模式时,我们不会在接口的标志中看到PROMISC,因为它是在套接字级别设置的,不会改变设备的实际标志。
    • 它仅影响特定的套接字,不会影响其他应用程序或其他套接字。

联系
两者都使网络接口能够捕获所有经过的数据包,而不仅仅是发往接口的数据包。

区别

  • ioctl方法在设备级别设置混杂模式,而setsockopt方法在套接字级别设置。
  • 通过ioctl设置混杂模式时,接口的状态标志会显示PROMISC,而使用setsockopt则不会。

在开发抓包工具或网络监控应用程序时,通常选择哪种方法取决于具体需求。如果只是想要为特定的捕获会话设置混杂模式,而不影响系统上的其他应用程序,使用setsockopt更为合适。如果需要在设备级别更改接口的状态,并希望所有应用程序都能在混杂模式下看到数据包,那么使用ioctl方法可能更合适。


使用ioctlIFF_PROMISC的方法,可参考 Linux网络编程- struct ifreq & ioctl() 系统调用

使用setsockoptPACKET_MR_PROMISC的方法,可参考 Linux网络编程- struct packet_mreq & setsockopt()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫客36

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值