【发布时间】:2020-11-02 02:56:57
【问题描述】:
我正在尝试为 Linux 编写一个 C 嗅探器,并了解嗅探时内核中发生的操作。
我无法找到以下问题的答案: 如果我按以下方式初始化我的套接字:
sock_raw = socket(AF_PACKET , SOCK_RAW , htons(ETH_P_ALL));
内核中发生了什么?我如何看到所有传入和传出的数据包,而不是“劫持”它们?因为到目前为止我所理解的就是当内核接收到一个数据包时,它会将它发送给相关的协议处理函数。因此我无法理解 - 除了我打开的套接字之外,内核是否会克隆数据包并将其发送?
【问题讨论】:
-
man packet: "当协议设置为 htons(ETH_P_ALL) 时,所有协议都会被接收。该协议类型的所有传入数据包将在传递给协议之前传递给数据包套接字在内核中实现。”
标签: c linux sockets linux-kernel