问题标签 [pcap]
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.
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 - 如何使用 pcap 过滤 POST 请求?
我正在使用 C 中的 pcap 库。我可以在 pcap_compile 调用中使用过滤器表达式“端口 80”过滤 http 流量,但现在我想知道是否可以专门过滤 POST 请求。
有谁知道用于过滤 http POST 请求的过滤器表达式?
c - pcap 为什么总是 8 字节的数据包...为什么?
我正在使用 pcap 库,但我不知道为什么我总是得到这个输出:
新数据包大小:udata=8 hdr=8 pkt=8
这是代码:
在另一个文件中我使用:
输出正常吗?
我认为不是因为有时我的程序工作有时不..
c - Http POST ..为什么不打印任何东西?
我正在使用 pcap 库编写一个嗅探器程序来检查 http 流量。当我在寻找 GET 消息或状态码时我成功了,但我不知道为什么它不适用于发布请求。我尝试使用wireshark,发现对于POST请求,除了http协议之外,还有一个基于Line的文本数据:application/x-www-form-urlencoded "protocol"。当我尝试打印有效负载的内容时,我没有得到结果或者我得到奇怪的字符..所以我想问题可能是这个“基于行的..”的东西..知道可能的原因吗?
c - 数据包中的奇怪字符
我正在用 libpcap 为 http 数据包编写一个嗅探器。有时打印 http 有效负载的内容我会得到奇怪的字符.. 你知道它们可能是什么吗?
*xNT:����3�@�"P#1u`��$%S{M��
或者
�~�tsE��}>a�����}/���`�▒�A�y
谢谢,你的答案。
如果标题是纯文本,那么问题出在我的代码上。
无论如何,一个 POST 请求可以用 base64 编码吗?
udp - 如何让 Wireshark 读取没有 UDP/IP/以太网标头的无标头 pcap 文件?
Wireshark 是否支持在每个数据包中都不需要 TCP/UDP/以太网标头的格式?
任何其他(非 pcap)格式的wireshark 支持将不胜感激。我需要将无标题的数据放入wireshark进行进一步检查。
c++ - pcap_set_rfmon 不起作用?
我正在尝试将我的设备设置为监控模式,并且我知道它能够处于监控模式并执行“iwconfig wlan0 模式监控”工作,我运行我的代码,我可以从任何地方捕获数据包。
问题在于,在 libpcap 中,它根本无法将我的设备设置为监控模式(无需输入上述命令行)。在手动连接到接入点之前,我无法捕获任何数据包。
这是代码问题,还是 pcap 库问题?有人在不使用命令行的情况下成功将设备设置为监控模式吗?我正在使用 Realtek2500 顺便说一句。
c++ - 如何捕获接入点和连接到它的主机的 MAC 地址?
我知道我必须使用 libpcap 库来捕获 IEEE 802.11 帧以显示它们的 MAC 地址,例如我的无线适配器处于监控模式,并且在我执行 pcap_datalink 时仅支持“802.11 plus radiotap radio header”。
在 pcap_loop 的回调函数中,我应该如何从数据包中提取 MAC 地址?我如何区分不同类型的数据包?谷歌搜索并没有太多答案,主要是关于如何从有线接口提取数据包。
networking - pcap 函数:pcap_open() 问题
当我在我的计算机上成功找到一个设备并调用 pcap_open(...) 时,这是否只给了我进出我的计算机的数据包?网络上的其他计算呢?它会显示尚未发送的数据包吗?
c - libpcap 从 AF_LINK sockaddr_dl (OSX) 获取 MAC
我正在尝试使用 C 在 OSX 上获取我所有接口的 MAC 地址。获取它的常用方法 Linux 在 BSD 上不起作用 - 从我所看到的一切来看,您必须获取接口并查找类型AF_LINK。我的问题是 LLADDR(sockaddr_dl) 给了我一大堆数据(包括我的 MAC),我不知道数据的格式。例如;以下代码将输出:
设备:en1 链接 sdl_alen:101 mac:31:f8:1e:df:d6:22:1d :00:00:00:00:00:00:00:00:00:00:00:00:00:00 :00:b0:06:10:00:01:00:00:00:c0:02:10:00:01:00:00:00:00:00:00:00:00:00:00:00 :40 :03:10:00:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:03:00:6c :6f:30:00:00:00:00:00:00:00:00:00:00:00:00:00:70:03:10:00:01:00:00:00:e0:02 :10:00:01:00:00:
我的 MAC 是粗体的。似乎这是一直以来的格式,但如果我可以将 LLADDR(sockaddr_dl) 转换为某些东西,我会更舒服。在 net/if_dl.h 中,LLADDR 定义为:
据我所知,这就是说结果是类型 (void *) - 没有帮助。
其他帖子如:
在弄清楚如何使用 ioctl/SIOCGIFADDR/SIOCGIFCONF 在 Mac OS X 上获取以太网接口信息时遇到问题?
似乎认为他们已经弄清楚了,但是如果您查看代码,您会发现它不会工作,因为 sdl_alen 不是 6。