问题标签 [libpcap]

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.

0 投票
1 回答
359 浏览

c - Ruby/C/Makefile,-lpcap/#include 中使用的默认 pcap.h 文件是什么

如何确定哪个 pcap.h 文件包含在通过 Makefile 编译/安装的 C 源代码中?

具体来说,它是一个 Ruby 库 (pcaprub),通过以下方式安装:

而 extconf.rb 是:

0 投票
1 回答
1561 浏览

c - 如何使用 netfilter 捕获数据包?

我现在用libpcap抓GRE包转发,我觉得效率不是很好。

所以我决定使用 netfilter 进行转发,但我对此并不陌生。谁能给我一个

使用 netfilter 捕获 IP 或 GRE 数据包的简单示例?谢谢!

0 投票
2 回答
1230 浏览

c++ - 使用 libpcap 速度限制发送数据包

我编写了一个程序,它以高速(约 1Gbps)从某个 NIC(即 eth0)捕获以太网数据包,并将流量转发pcap_sendpacket()到另一个 NIC(即 eth1)。

虽然转发器以太网接口没有连接到另一台计算机网卡,但转发速度是理想的,但是当我连接它时,发送速度下降得非常厉害(从 900 Mbps 到 100 Mbps)。

任何人都可以解释原因吗?

操作系统:Kubuntu linux 10.10
语言:C++
:Libpcap

0 投票
3 回答
3505 浏览

linux - libpcap setfilter() 函数和丢包

这是我在这里@stackoverflow 的第一个问题。

我正在为一些 VoIP 生产服务器编写一个监视工具,特别是一个嗅探工具,它允许使用 Perl 中的 pcap 库捕获与给定模式匹配的所有流量(VoIP 呼叫)。

我不能使用较差的选择性过滤器,例如“udp”,然后在我的应用程序代码中进行所有过滤,因为这会涉及过多的流量并且内核无法处理报告数据包丢失。

然后我要做的是在捕获过程中迭代地构建更具选择性的过滤器。一开始我只捕获(所有)SIP信令流量和IP片段(模式匹配必须在任何情况下在应用程序级别完成)然后当我在SIP数据包中找到一些关于RTP的信息时,我添加'或'子句到具有特定 IP 和 PORT 的实际过滤器字符串,并使用 setfilter() 重新设置过滤器。

所以基本上是这样的:

  1. 初始过滤器:“(udp and port 5060) or (udp and ip[6:2] & 0x1fff != 0)” -> 捕获所有 SIP 流量和 IP 片段

  2. 更新过滤器:“(udp 和端口 5060)或(udp 和 ip[6:2] & 0x1fff != 0)或(主机 IP 和端口 PORT)”-> 还捕获特定 IP、PORT 上的 RTP

  3. 更新过滤器:“(udp and port 5060) or (udp and ip[6:2] & 0x1fff != 0) or (host IP and port PORT) or (host IP2 and port PORT2)”->捕获第二个RTP流以及

等等。

这工作得很好,因为我能够获得 RTP 流的“真实”数据包丢失以用于监控目的,而我的工具的选择性过滤器版本较差,RTP 数据包丢失百分比不可靠,因为有一些数据包由于内核丢包而丢失。

但是,让我们来看看这种方法的缺点。

捕获时调用 setfilter() 涉及到 libpcap 丢弃接收到的数据包“同时更改过滤器”的事实,如函数 set_kernel_filter() 的代码注释中所述到 pcap-linux.c(检查 libpcap 版本 0.9 和 1.1)。

所以发生的情况是,当我调用 setfilter() 并且某些数据包以 IP 分段形式到达时,我确实丢失了一些分段,而 libpcap 统计信息最后没有报告这一点:我发现它正在挖掘痕迹。

现在,我明白了这个动作由 libpcap 完成的原因,但在我的情况下,我绝对不需要丢包(我不关心获得一些不相关的流量)。

您对如何解决这个不修改 libpcap 代码的问题有任何想法吗?

0 投票
3 回答
4231 浏览

c++ - std::cout << stringstream.str()->c_str() 什么也不打印

在一个函数中,得到 unsigned char && unsigned char 长度,

结果:

  • WAS:什么都不打印(猜想有一个指向 const .. case 的指针)
  • 好:打印数据
  • BAD:什么都不打印
  • 测试,断言:打印 mystr.size() 等于传递的无符号字符大小。

我试过:

  • string.assign(scp.rdbuf());
  • memcpy(char, scp.str(), 10);
  • 创建/分配临时字符、字符串的不同方法

没有帮助..它想要获得一个包含数据的std::cout 'able std::string (从foo中挑选,它是unsigned char,它是数据包数据)。

猜测原始foo可能不是以空值终止的,或者问题是这样的 - 简单,但无法进入......这里要寻找什么?

(此代码是使用 libpcap 的另一种尝试,只是以 C++ 方式打印数据包,而不使用已知的 C++ 魔术包装器,如 libpcapp)。

0 投票
1 回答
1998 浏览

python - 用于 Python2.6 (Windows) 的 libpcap

目前想在windows下使用Python2.6下的libpcap。

我尝试了 Pypcap,但它只有 python 2.5 或更早版本的二进制构建,pylibpcap 似乎没有任何二进制构建。

我也无法从源代码安装它们,看来我必须先构建 libpcap。

我想开发一个应用程序,然后使用 py2exe 打包它,然后我想确保 lib 易于安装并与 py2exe 兼容

0 投票
2 回答
1951 浏览

code-injection - 防止 libpcap 捕获使用 pcap_inject() 注入的数据包

目前正在考虑仅使用 pcap 嗅探同一接口并使用 pcap_inject 注入数据包的可能性。

可以使用以下任一方法轻松解决此问题:

  • 持久校验和跟踪/大慢图/,
  • 校验和跟踪 - 直到注入所有数据,例如第一个 http 请求;
  • hacking bpf/libipq/Netfilter 为每个真实的 PHY 数据包携带附加参数

但:

pcap 侦听 eth0 /realworld 情况更接近“pcap 通过源魔法侦听和丢弃”/,pcap 通过 eth0 的句柄发送数据包,因此它们可以被路由出去。libpcap 不捕获使用相同库注入到相同接口的数据包的理论基础是什么 - 例如,注入的数据包没有通过所有伯克利的数据包过滤器代码?

实际测试待定。

0 投票
1 回答
2046 浏览

objective-c - 以 root 权限部署应用程序

我编写了一个 Cocoa 应用程序,它使用 libpcap 来监控网络流量。由于 libpcap 需要 root 权限,我想知道赋予它 root 权限的最佳方法是什么(例如,使用 Package Maker?)。我是否可以使用拖放安装程序来部署它,还是 Package Maker 是我唯一的选择?

此外,我想知道授予我的应用 root 权限所带来的安全风险。该应用程序还写入磁盘(sqlite 数据库),我读到给一个写入磁盘根权限的应用程序不是一个好主意。

0 投票
1 回答
941 浏览

perl - Perl 网络帧/数据包解析器

作为个人项目的一部分,我正在编写一个小型嗅探器。我正在使用Net::Pcap(真的很棒的工具)。

在数据包处理循环中,我使用出色Net::Frame的解包所有标头并获取数据。我开始担心这可能不是非常有效(Net::Frame很好,但似乎超出了我对这个项目的需要)。

此外,我不喜欢某些 Debian 系统,我必须手动编译 libdumbnet(官方 apt 存储库中提供的软件包似乎不起作用,Net-Libdnet-0.92不喜欢它)。

我想要的只是获取 TCP 段内的有效负载。有没有其他选择?谢谢你。

PS 如果我只是拿起数据包并在其中搜索某种模式,那真的会很糟糕(阅读“thedailywtf.comworthy”)吗?

0 投票
3 回答
3013 浏览

c++ - pcap_set_rfmon 不起作用?

我正在尝试将我的设备设置为监控模式,并且我知道它能够处于监控模式并执行“iwconfig wlan0 模式监控”工作,我运行我的代码,我可以从任何地方捕获数据包。

问题在于,在 libpcap 中,它根本无法将我的设备设置为监控模式(无需输入上述命令行)。在手动连接到接入点之前,我无法捕获任何数据包。

这是代码问题,还是 pcap 库问题?有人在不使用命令行的情况下成功将设备设置为监控模式吗?我正在使用 Realtek2500 顺便说一句。