我有点困惑如何使用原始套接字(raw sockets)和libcap,能否有人简单地指出使用两者的优点。我读了一些链接,但是它们让我感到困惑。
我有点困惑如何使用原始套接字(raw sockets)和libcap,能否有人简单地指出使用两者的优点。我读了一些链接,但是它们让我感到困惑。
libpcap在不同的操作系统上使用不同的机制。 在Linux上,它使用PF_PACKET原始或套接字,具体取决于它是否知道接口的Linux链路层类型(ARPHRD_值)以及是否该链路层类型的接口生成有用的链路层头(PPP接口不支持,因此无法查看网络层协议标识符)。 在Irix上,它使用带有RAWPROTO_SNOOP协议的PF_RAW套接字。 在其他系统上,它根本不使用原始套接字。
原始套接字可用于许多目的,例如发送和接收原始IPv4数据包,而无需担心链路层(即它们插入IP层而不是网络设备驱动程序)。 如果您需要访问原始链路层,则大多数操作系统上的原始套接字不支持(正如前一段所述,Linux和Irix是明显的例外),但是libpcap支持。