Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux libpcap是由socketapi实现的吗?_Linux_Sockets_Networking_Network Programming_Libpcap - Fatal编程技术网

Linux libpcap是由socketapi实现的吗?

Linux libpcap是由socketapi实现的吗?,linux,sockets,networking,network-programming,libpcap,Linux,Sockets,Networking,Network Programming,Libpcap,用于包捕获。据我所知,它可以从所有端口捕获网络包。它可以在链路层(如以太网帧)捕获包数据 这看起来有点让我困惑,因为在类Unix系统中,仅仅使用socket API似乎不可能拦截所有网络流量(来自所有端口)。此外,socket API似乎无法获取链路层的信息(如以太网帧头) libpcap是由socketapi实现的吗?如果没有,使用哪个操作系统级别的API来实现它?它是通过将驱动程序插入网络堆栈来实现的。它是通过将驱动程序插入网络堆栈来实现的。在Linux上,使用PF\u PACKET套接字访

用于包捕获。据我所知,它可以从所有端口捕获网络包。它可以在链路层(如以太网帧)捕获包数据

这看起来有点让我困惑,因为在类Unix系统中,仅仅使用socket API似乎不可能拦截所有网络流量(来自所有端口)。此外,socket API似乎无法获取链路层的信息(如以太网帧头)


libpcap是由socketapi实现的吗?如果没有,使用哪个操作系统级别的API来实现它?

它是通过将驱动程序插入网络堆栈来实现的。

它是通过将驱动程序插入网络堆栈来实现的。

在Linux上,使用
PF\u PACKET
套接字访问libpcap所需的原始数据包


请参见

在Linux上,使用
pfu数据包
套接字访问libpcap所需的原始数据包


请参见

libpcap不是sockets API的一部分。在Linux上使用PF_数据包,这是BSD机制的演变。在其他操作系统上还有其他机制(DLPI,Windows需要DLL)。
任何接口上的捕获机制都是Linux特有的机制,捕获机制发生在网络接口层之上。 内核中的捕获机制要么显式调用内核包过滤器,要么通过调整管道(SVR4)插入。
libpcap不是sockets API的一部分。在Linux上使用PF_数据包,这是BSD机制的演变。在其他操作系统上还有其他机制(DLPI,Windows需要DLL)。
任何接口上的捕获机制都是Linux特有的机制,捕获机制发生在网络接口层之上。 内核中的捕获机制要么显式调用内核包过滤器,要么通过调整管道(SVR4)插入。

libpcap是由socketapi实现的吗

如果您使用的是Linux或IRIX,这是真的。如果你在玩另一种UN*X,那就不是真的

如果不是,使用哪个操作系统级API来实现它

在*BSD、OS X、AIX和Solaris 11及更高版本上:BPF

在早期版本的Solaris和HP-UX上:STREAMS+DLPI

在类Unix系统中,仅使用套接字API似乎不可能拦截所有网络流量(来自所有端口)

在Linux上,如果您打开一个PF_数据包套接字,并且没有将其绑定到特定接口,那么来自所有接口的数据包都会传递到该套接字

套接字API似乎无法获取链接层中的信息

您必须使用正确类型的套接字,即Linux上的PF_数据包套接字或IRIX上的带有RAWPROTO_SNOOP协议的PF_原始套接字。其他UN*XE没有用于数据包捕获的套接字类型,并使用其他机制

libpcap是由socketapi实现的吗

如果您使用的是Linux或IRIX,这是真的。如果你在玩另一种UN*X,那就不是真的

如果不是,使用哪个操作系统级API来实现它

在*BSD、OS X、AIX和Solaris 11及更高版本上:BPF

在早期版本的Solaris和HP-UX上:STREAMS+DLPI

在类Unix系统中,仅使用套接字API似乎不可能拦截所有网络流量(来自所有端口)

在Linux上,如果您打开一个PF_数据包套接字,并且没有将其绑定到特定接口,那么来自所有接口的数据包都会传递到该套接字

套接字API似乎无法获取链接层中的信息


您必须使用正确类型的套接字,即Linux上的PF_数据包套接字或IRIX上的带有RAWPROTO_SNOOP协议的PF_原始套接字。其他UN*X没有用于数据包捕获的套接字类型,并使用其他机制。

谢谢!但是驱动程序是如何插入的?Linux是否提供了这样的API?@Alnitak在某些系统(例如windows)上是这样的,但在Linux或大多数Unix上不是这样的。问题被标记为“Linux”,OP在问题中也谈到了“类Unix”系统。谢谢!但是驱动程序是如何插入的?Linux是否提供了这样的API?@Alnitak在某些系统(如windows)上是这样的,但在Linux或大多数Unix上不是这样的。问题被标记为“Linux”,OP在问题中也谈到了“类Unix”系统。