问题标签 [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.
c - Ruby/C/Makefile,-lpcap/#include 中使用的默认 pcap.h 文件是什么
如何确定哪个 pcap.h 文件包含在通过 Makefile 编译/安装的 C 源代码中?
具体来说,它是一个 Ruby 库 (pcaprub),通过以下方式安装:
而 extconf.rb 是:
c - 如何使用 netfilter 捕获数据包?
我现在用libpcap抓GRE包转发,我觉得效率不是很好。
所以我决定使用 netfilter 进行转发,但我对此并不陌生。谁能给我一个
使用 netfilter 捕获 IP 或 GRE 数据包的简单示例?谢谢!
c++ - 使用 libpcap 速度限制发送数据包
我编写了一个程序,它以高速(约 1Gbps)从某个 NIC(即 eth0)捕获以太网数据包,并将流量转发pcap_sendpacket()
到另一个 NIC(即 eth1)。
虽然转发器以太网接口没有连接到另一台计算机网卡,但转发速度是理想的,但是当我连接它时,发送速度下降得非常厉害(从 900 Mbps 到 100 Mbps)。
任何人都可以解释原因吗?
操作系统:Kubuntu linux 10.10
语言:C++
库:Libpcap
linux - libpcap setfilter() 函数和丢包
这是我在这里@stackoverflow 的第一个问题。
我正在为一些 VoIP 生产服务器编写一个监视工具,特别是一个嗅探工具,它允许使用 Perl 中的 pcap 库捕获与给定模式匹配的所有流量(VoIP 呼叫)。
我不能使用较差的选择性过滤器,例如“udp”,然后在我的应用程序代码中进行所有过滤,因为这会涉及过多的流量并且内核无法处理报告数据包丢失。
然后我要做的是在捕获过程中迭代地构建更具选择性的过滤器。一开始我只捕获(所有)SIP信令流量和IP片段(模式匹配必须在任何情况下在应用程序级别完成)然后当我在SIP数据包中找到一些关于RTP的信息时,我添加'或'子句到具有特定 IP 和 PORT 的实际过滤器字符串,并使用 setfilter() 重新设置过滤器。
所以基本上是这样的:
初始过滤器:“(udp and port 5060) or (udp and ip[6:2] & 0x1fff != 0)” -> 捕获所有 SIP 流量和 IP 片段
更新过滤器:“(udp 和端口 5060)或(udp 和 ip[6:2] & 0x1fff != 0)或(主机 IP 和端口 PORT)”-> 还捕获特定 IP、PORT 上的 RTP
更新过滤器:“(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 代码的问题有任何想法吗?
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)。
python - 用于 Python2.6 (Windows) 的 libpcap
目前想在windows下使用Python2.6下的libpcap。
我尝试了 Pypcap,但它只有 python 2.5 或更早版本的二进制构建,pylibpcap 似乎没有任何二进制构建。
我也无法从源代码安装它们,看来我必须先构建 libpcap。
我想开发一个应用程序,然后使用 py2exe 打包它,然后我想确保 lib 易于安装并与 py2exe 兼容
code-injection - 防止 libpcap 捕获使用 pcap_inject() 注入的数据包
目前正在考虑仅使用 pcap 嗅探同一接口并使用 pcap_inject 注入数据包的可能性。
可以使用以下任一方法轻松解决此问题:
- 持久校验和跟踪/大慢图/,
- 校验和跟踪 - 直到注入所有数据,例如第一个 http 请求;
- hacking bpf/libipq/Netfilter 为每个真实的 PHY 数据包携带附加参数
但:
pcap 侦听 eth0 /realworld 情况更接近“pcap 通过源魔法侦听和丢弃”/,pcap 通过 eth0 的句柄发送数据包,因此它们可以被路由出去。libpcap 不捕获使用相同库注入到相同接口的数据包的理论基础是什么 - 例如,注入的数据包没有通过所有伯克利的数据包过滤器代码?
实际测试待定。
objective-c - 以 root 权限部署应用程序
我编写了一个 Cocoa 应用程序,它使用 libpcap 来监控网络流量。由于 libpcap 需要 root 权限,我想知道赋予它 root 权限的最佳方法是什么(例如,使用 Package Maker?)。我是否可以使用拖放安装程序来部署它,还是 Package Maker 是我唯一的选择?
此外,我想知道授予我的应用 root 权限所带来的安全风险。该应用程序还写入磁盘(sqlite 数据库),我读到给一个写入磁盘根权限的应用程序不是一个好主意。
perl - Perl 网络帧/数据包解析器
作为个人项目的一部分,我正在编写一个小型嗅探器。我正在使用Net::Pcap
(真的很棒的工具)。
在数据包处理循环中,我使用出色Net::Frame
的解包所有标头并获取数据。我开始担心这可能不是非常有效(Net::Frame
很好,但似乎超出了我对这个项目的需要)。
此外,我不喜欢某些 Debian 系统,我必须手动编译 libdumbnet(官方 apt 存储库中提供的软件包似乎不起作用,Net-Libdnet-0.92
不喜欢它)。
我想要的只是获取 TCP 段内的有效负载。有没有其他选择?谢谢你。
PS 如果我只是拿起数据包并在其中搜索某种模式,那真的会很糟糕(阅读“thedailywtf.comworthy”)吗?
c++ - pcap_set_rfmon 不起作用?
我正在尝试将我的设备设置为监控模式,并且我知道它能够处于监控模式并执行“iwconfig wlan0 模式监控”工作,我运行我的代码,我可以从任何地方捕获数据包。
问题在于,在 libpcap 中,它根本无法将我的设备设置为监控模式(无需输入上述命令行)。在手动连接到接入点之前,我无法捕获任何数据包。
这是代码问题,还是 pcap 库问题?有人在不使用命令行的情况下成功将设备设置为监控模式吗?我正在使用 Realtek2500 顺便说一句。