混杂模式

概述

混杂模式是网络接口控制器的一种模式,它会将接收到的所有流量都传递给应用,而不是只传递控制器被专门编程接收的帧。该模式通常用于数据包嗅探,通过向应用展示网络上传输的所有数据来诊断网络连接问题。(更多信息见 Wikipedia article on promiscuous mode。)

网络混杂 API 用于启用和禁用该模式,以及等待并接收到达的网络数据。并非所有网络技术或网络设备驱动都支持混杂模式。

用法示例

首先,应用需要像这样打开混杂模式:

ret = net_promisc_mode_on(iface);
if (ret < 0) {
        if (ret == -EALREADY) {
                printf("Promiscuous mode already enabled\n");
        } else {
                printf("Cannot enable promiscuous mode for "
                       "interface %p (%d)\n", iface, ret);
        }
}

如果没有错误,应用就可以开始等待网络数据:

while (true) {
        pkt = net_promisc_mode_wait_data(K_FOREVER);
        if (pkt) {
                print_info(pkt);
        }

        net_pkt_unref(pkt);
}

最后,应用可以像这样关闭混杂模式:

ret = net_promisc_mode_off(iface);
if (ret < 0) {
        if (ret == -EALREADY) {
                printf("Promiscuous mode already disabled\n");
        } else {
                printf("Cannot disable promiscuous mode for "
                       "interface %p (%d)\n", iface, ret);
        }
}

更完整的示例见 Promiscuous mode。

API 参考

Promiscuous mode