首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >libpcap是由socket API实现的吗?

libpcap是由socket API实现的吗?
EN

Stack Overflow用户
提问于 2015-12-04 10:10:28
回答 5查看 607关注 0票数 1

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

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

libpcap是由socket API实现的吗?如果没有,那么使用哪个OS级别的API来实现它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-12-04 19:43:28

libpcap是由socket API实现的吗?

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

如果没有,那么使用哪个OS级别的API来实现它?

关于*BSD、OS、AIX和Solaris 11及更高版本: BPF。

关于Solaris的早期版本,以及HP-UX: STREAMS+DLPI。

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

在Linux上,如果您打开一个PF_PACKET套接字,并且不将它绑定到特定的接口,则来自所有接口的数据包将被传递到套接字。

socket API似乎无法获取链接层中的信息。

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

票数 2
EN

Stack Overflow用户

发布于 2015-12-04 12:20:56

libpcap不是套接字API的一部分。在Linux上使用PF_PACKET,这是BSD机制的一种发展。在其他操作系统上还有其他机制(DLPI,Windows需要DLL)。

任何接口机制上的捕获都是Linux特有的机制,捕获机制发生在网络接口层之上。内核内部的捕获机制要么对内核数据包过滤器进行显式调用,要么通过调整管道(SVR4)插入。

票数 3
EN

Stack Overflow用户

发布于 2015-12-04 10:19:41

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

请参阅http://man7.org/linux/man-pages/man7/packet.7.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34085818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档