libpcap使用原始套接字吗?

15

我有点困惑如何使用原始套接字(raw sockets)和libcap,能否有人简单地指出使用两者的优点。我读了一些链接,但是它们让我感到困惑。

2个回答

14

libpcap在不同的操作系统上使用不同的机制。 在Linux上,它使用PF_PACKET原始或套接字,具体取决于它是否知道接口的Linux链路层类型(ARPHRD_值)以及是否该链路层类型的接口生成有用的链路层头(PPP接口不支持,因此无法查看网络层协议标识符)。 在Irix上,它使用带有RAWPROTO_SNOOP协议的PF_RAW套接字。 在其他系统上,它根本不使用原始套接字。

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


在Windows上,它使用较低级别的网络驱动程序来捕获数据。在现代版本的Windows上,RAW套接字仅限于管理员用户。 - Remy Lebeau

0
"libpcap"和"原始套接字"是不同的主题。
Libpcap是用于Linux的数据包捕获库,用于捕获通过网络接口(如eth0)传递的流量/数据包。
在Windows上,Winpcap库执行相同的功能。
原始套接字是操作系统提供的套接字API的一项功能,可用于发送由应用程序定义而不是操作系统定义的带有标头的数据包。因此,使用原始套接字,我们可以指定IP、TCP标头并发送数据包。
原始套接字在Linux上一直可用。在Windows上,原始套接字仅在Windows XP和Windows XP(SP1)中可用。
在Windows上,winpcap库具有发送任意内容的功能,这意味着可以通过winpcap在Windows上实现原始套接字功能。

如果我们谈论网络和数据捕获,可能需要问一下什么是主题,因为它们基本上是同一个主题。请查看得分最高的答案,而不是这个答案。 - Marlord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接