问题标签 [bpf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 C++ 中读取 pcap 文件
我正在尝试用 c++ 读取 pcap 文件(我使用的是 VS 2008),但出现以下错误:
1) 错误 C2011: 'bpf_program' : 'struct' 类型重新定义。
2) 错误 C2011: 'bpf_insn' : 'struct' 类型重新定义
我想问题是我在一个文件中包含了 Packet32.h,在另一个文件中包含了 pcap.h(我需要某个类中的 Packet32.h 函数,我需要 pcap.h 来读取另一个类中的 pcap 文件) . 我在每个文件中都有标头保护。
在主要课程中,我包括了前面提到的两个课程。如果我切换包含顺序,我会收到另一个错误。这是一个看起来像我的简单代码:
在 class1.h 中:
在 class2.h 中:
在 main.cpp 中:
我想知道是否有人可以帮助我解决这个问题。将不胜感激。
libpcap - 验证有效 BPF 过滤器的简单方法
作为普通用户验证 BPF 过滤器的最简单方法是什么?
我发现最简单的方法是使用一个小的 pcap 文件作为选项的输入来运行 tcpdump -r
。
返回无效或有效 BPF 过滤器的标准错误代码。这要求我有一个 PCAP 文件作为输入提供。
有没有办法在没有 PCAP 文件或特殊权限的情况下进行这个简单的测试?
networking - 如何使用 BPF 过滤器过滤数据包负载?
我需要做一个关于分析一些数据包的作业。
我发现 BPF 过滤对我的作业来说是一件好事,我想过滤所有具有以特定字符串(如“Test it”)开头的有效负载的数据包。这些数据包是 TCP、UDP、ICMP 的组合,有些甚至可能没有有效负载。
如何设置过滤器?
tcp - BPF 过滤 TCP 连接
我正在尝试从正确启动(使用 3 路协议:syn、syn-ack、ack)并正确结束的 pcap 文件连接中捕获。
我不只通过 ack 进行过滤,因为它会过滤每个包含 ack 的包并且对我没有用处。所以我使用: SYN 或 SYN-ACK 标志来过滤。那仅用于启动连接,所以我应该如何过滤包以获取结束包?
我不觉得这是正确的,因为我不知道每个连接到底是如何结束的,这取决于实现?还是总是一样?
linux - 在 Linux 机器上使用 BPF 和 SOCK_DGRAM
是否可以在数据报套接字上使用 BPF 过滤数据包?
当我尝试附加过滤器时没有发生错误,但我没有收到任何数据包。我使用 libpcap 编译了一个过滤器,该过滤器与 tcpdump 一起使用。
这是我的代码的缩短版本:
我的机器是 ubuntu 12.04 x86。
linux - 如何使用原始套接字仅监听想要的流量?
三个相关问题:
原始套接字是否有任何等效于内核 BPF(由 libpcap 使用)的过滤方法?
打开原始套接字是否意味着它会接收机器上的每个IP 数据包?
iptables 如何与原始套接字交互 - 原始套接字是否看到 iptables 丢弃的数据包?
linux - 使用 Netfilter 的 NFQUEUE 与 Berkeley Packet Filter (BPF) 进行数据包过滤
我刚刚在这些答案中阅读了有关在 linux 中开发数据包过滤器的两个选项。
第一个是使用iptables和netfilter,可能NFQUEUE
还有libnetfilter_queue库。
第二个是使用BPF(伯克利包过滤器),快速阅读它似乎具有类似的过滤功能。
那么,这些替代方案中的哪一个是创建数据包过滤器的更好方法?有什么区别?我的软件将作为网关代理或“中间人”运行,它应该从一台计算机接收数据包(目标地址到另一台计算机,而不是过滤器的本地地址),并在一段时间后将其发送出去过滤。
非常感谢!
c - seccomp-bpf - 如何使用 bpf 过滤系统调用的参数?
我有一个函数 f(),它返回 0 或 1 - 0 表示假,1 表示真。我想做的是用 seccomp-bpf 设置一个规则,这样系统调用“fopen”只有在 f(--fopen 的第一个参数--) == 1 时才被允许。
我该怎么做?
c - 更正 libpcap 中用于传出数据包的过滤器表达式
我只想从我的系统中嗅探传出的“TCP-ACK”数据包。因此,我在lib-pcap
程序中将过滤器表达式设置为:
但它在运行时显示 lib-pcap 语法错误:
无法解析过滤器 src 主机 172.16.0.1 和 tcp[tcpflags] 和 (tcp-syn | tcp-fin | tcp-rst | tcp-psh) == 0:语法错误
谁能告诉这里出了什么问题以及正确的过滤器表达式是什么?
我从这里得到了语法(在示例部分)。
c - 原始套接字/ BPF - 过滤一次或多次?
语境
在 Linux Debian 64 位上研究 Berkeley 数据包过滤器,对打开的套接字接收到的数据包进行过滤。
我使用AF_PACKET
所以我甚至管理第 2 层数据包。
到目前为止,它工作得很好。但是我必须过滤每个套接字上的每个数据包,而且效率不高。因此我使用 BPF。
问题
因为我有我的应用程序自己设置过滤器
我想知道 :
如果内核将过滤数据包并将其定向到正确的套接字(过滤在内核级别的系统上每个数据包发生一次)
- 或者
如果内核将像以前一样发送所有数据包,并且 bpf 将在每个套接字中进行过滤(每个数据包将被分析 + 过滤的次数与系统上打开的套接字一样多,因为每个应用程序都会看到数据包进入 <-> 混杂模式. 这效率不高)。
我不知道。
谢谢