libpcap是否在它们下面使用原始套接字?

时间:2011-10-22 00:00:48

标签: libpcap raw-sockets

我对使用原始套接字和libcap感到有些困惑。可以,任何人都可以简单地指出使用两者的优点。我看了几个链接,但是,它让我感到困惑。

2 个答案:

答案 0 :(得分:10)

libpcap在不同的操作系统上使用不同的机制。在Linux上,它使用PF_PACKET raw或cooked套接字,具体取决于它是否知道接口的Linux链路层类型(ARPHRD_值)和该链路层类型的接口是否产生有用的链接-layer头(PPP接口没有,所以你看不到网络层协议标识符)。在Irix上,它使用带有RAWPROTO_SNOOP协议的PF_RAW套接字。在其他系统上,它根本不使用原始套接字。

原始套接字可用于多种目的,例如发送和接收原始IPv4数据包,而不必担心链路层(即,它们插入IP层而不是插入网络设备驱动程序)。如果您需要访问原始链接层,大多数操作系统上的原始套接字都不支持(Linux和Irix是明显的例外,如前一段所述),但libpcap确实如此。

答案 1 :(得分:1)

" libpcap的"和"原始套接字"是不同的主题。

Libpcap是一个用于linux的数据包捕获库,用于捕获通过eth0等网络接口的流量/数据包。

在Windows上,Winpcap库也做同样的事情。

原始套接字是操作系统提供的套接字api的一项功能,可用于发送包含应用程序而不是操作系统定义的标头的数据包。因此,使用原始套接字,我们可以指定IP,TCP标头并发送数据包。

原始套接字在Linux上始终可用。在Windows上,原始套接字仅在Windows XP和Windows XP(SP1)中可用。

在Windows上,winpcap库具有发送包含任意内容的数据包的功能,这意味着可以使用Windows上的winpcap实现原始套接字功能。