我对使用原始套接字和 libcap 感到有些困惑。可以,任何人都可以简单地指出使用两者的优点。我读了几个链接,但是,它让我感到困惑。
2 回答
libpcap 在不同的操作系统上使用不同的机制。在 Linux 上,它使用 PF_PACKET 原始或熟套接字,这取决于它是否知道接口的 Linux 链路层类型(ARPHRD_ 值)以及该链路层类型的接口是否产生有用的链路层标头(PPP 接口不't,所以你看不到网络层协议标识符)。在 Irix 上,它使用 PF_RAW 套接字和 RAWPROTO_SNOOP 协议。在其他系统上,它根本不使用原始套接字。
原始套接字可用于多种目的,例如发送和接收原始 IPv4 数据包而不必担心链路层(即,它们插入 IP 层而不是网络设备驱动程序)。如果您需要访问原始链接层,大多数操作系统上的原始套接字不支持(Linux 和 Irix 是明显的例外,根据上一段),但 libpcap 支持。
“libpcap”和“原始套接字”是不同的主题。
Libpcap 是一个用于 linux 的数据包捕获库,用于捕获通过 eth0 等网络接口的流量/数据包。
在 Windows 上,Winpcap 库做同样的事情。
原始套接字是操作系统提供的套接字 api 的一项功能,可用于发送带有由应用程序而不是操作系统定义的标头的数据包。因此,使用原始套接字我们可以指定 IP 、 TCP 标头并发送数据包。
原始套接字一直在 Linux 上可用。在 Windows 上,原始套接字仅在 Windows XP 和 Windows XP(SP1) 中可用。
在 Windows 上,winpcap 库具有发送具有任意内容的数据包的功能,这意味着可以在 Windows 上使用 winpcap 实现原始套接字功能。