我正在考虑使用 pcap 来获取有关可用网络接口的信息。查看
pcap_findalldevices
的文档显示了描述每个接口的标志列表。不过,我感兴趣的两个没有得到充分解释:
:设备是否启动时设置PCAP_IF_UP
:设置设备是否正在运行PCAP_IF_RUNNING
两者有什么区别?什么时候设置
PCAP_IF_UP
而不设置PCAP_IF_RUNNING
,反之亦然?
这些含义主要由操作系统定义。 “启动”和“运行”的概念最初出现在 BSD 网络堆栈的 UN*X 中; 4.2BSD 网络实施说明文档说
接口在分配系统资源并在其管理的设备上发布初始读取后设置
。该状态位用于避免接口地址更改时出现多次分配请求。IFF_RUNNING
“接口”指的是设备驱动程序,而不是硬件。他们没有对
IFF_UP
说太多,只是表示“接口设备已启动”,对于“启动”的某些未指定的含义。 “上”与“下”主要是配置设置;接口可以配置为“向上”或“向下”。
大多数其他 UN*X 网络堆栈也有这些标志。
在 Windows 上,libpcap 尝试匹配该概念。
如果接口已配置为“up”但尚未完全初始化以运行,则何时设置
而不设置PCAP_IF_UP
,反之亦然?PCAP_IF_RUNNING
PCAP_IF_UP
将设置为不带 PCAP_IF_RUNNING
。 PCAP_IF_RUNNING
如果接口未启动,则不会设置。
这些标志主要在 libpcap 内部用于决定将哪些接口放在接口列表的开头 - “up and running”位于“up”之前,“up”位于“not up”之前,因为在未启动的接口上进行捕获“正在运行”但可能会失败,因为它无法打开,或者在运行之前不会给您任何数据包,并且在非“启动”的接口上捕获更有可能失败,因为它无法打开并且不会给你任何包裹。
我会看看文档是否可以改进。