问题标签 [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 回答
1056 浏览

windows-xp - 如何从C中的IP获取网络适配器名称?

我正在尝试通过 WinPcap 通过传递正确的网络适配器名称来捕获 Windows 中的数据包。关于这一点,我想知道:是否有任何简单的方法可以通过传递机器的 IP 地址来获取网络适配器名称。我正在尝试从 IP 获取网络适配器名称(以确保我使用正确的接口来使用 WinPcap 从 Windows 系统中的许多可用数据包中捕获数据包,例如无线、VPN、LAN 等),我认为看起来像: \Device\NPF_{5D24AE04-C486-4A96-83FB-8B5EC6C7F430} 只是数字表示就足够了。这是我们必须传递给 WinPcap/Libpcap 中的方法 pcap_open() 以开始捕获数据包的确切参数。

我正在浏览 WinPcap 的示例代码:

示例代码 1 示例代码 2

0 投票
2 回答
1505 浏览

c - 如何阻止来自计算机端口 23 的数据包?

我正在使用 libpcap 库。我使用 pcap.h 制作了一个数据包嗅探器 C 程序。现在我想通过eth0设备阻止来自我计算机上端口 23 的数据包。我尝试了 pcap_filter 函数,但它对阻塞没有用。请向我解释如何使用 c 程序编写此功能。

0 投票
1 回答
2044 浏览

python - 帮助 scapy 和 pcapy

我是 scapy 和 pcapy 的新手。作为一个项目,我必须使用 scapy 发送一个 ICMP 数据包并使用 pcapy 捕获它。我必须比较发送者和接收者之间的时间戳来计算网络延迟。

我不知道我该怎么做。任何帮助将不胜感激。

谢谢你。

以下命令我曾经将 ICMP 数据包发送到我使用类型 13 作为时间戳的目的地。

a=IP(dst="172.24.50.76")/ICMP(类型=13)

sr1(a) 开始发射:完成发送 1 个数据包。收到 1 个数据包,得到 1 个答案,剩余 0 个数据包

ts_ori=22:40:35.556 ts_rx=526:4:13.700 ts_tx=526:4:13.700

1)以上ts_rx和ts_tx时间戳显示的时间相同,那么如何计算延迟呢?2)其次,我如何增加数据包的大小,因为我可以计算不同数据包大小的延迟。

我希望你很清楚。

0 投票
1 回答
467 浏览

python - 是否可以使用 libpcap 测量数据包速率?

我有一个 python 脚本,它使用 libpcap (pcapy) 来捕获一些特定的数据包,例如,从 10.1.1.1 到 10.2.2.2 的数据包。是否可以测量该数据传输速率?我的意思是,我们可以得到一个数据包的大小,但据我所知,我们不知道传输该数据包需要多长时间。还有其他方法可以测量数据包速率吗?

0 投票
1 回答
2063 浏览

c++ - 使用 libpcap 解释有效负载

所以我最近一直在玩 libpcap,我有一个简单的问题。这是有问题的代码:

因此,在我的测试中,我将其设置为只捕获 HTTP“GET”请求。现在在我看来,输出 A 和输出 B 的输出应该是相同的,只打印 HTTP 标头。输出 B 总是正确地打印出来,但输出 A 偶尔也会添加 HTTP 标头加上大约 7 个字节的随机文本(例如“ï╤↔N↓ƒ♂”)。

那么问题是这些乱码文本是从哪里来的?在输出 A 中直接打印有效负载与在输出 B 中循环通过它并打印每个字符之间有什么区别?

0 投票
3 回答
2729 浏览

c - 在不使用 libpcap 的情况下在 linux 中进行数据包嗅探

我在大学的一门课程(网络工程)中获得了一个项目,该项目涉及编写一个数据包嗅探器,它可以捕获和识别 IPv4、IPv6、TCP、UDP、IP、ICMP 等数据包并显示它们的内容。

最初我们被指示使用 libpcap 来执行此操作,但我们刚刚被一位大学技术人员告知,当前安装 (Arch linux) 无法使用 libpcap。

还有哪些其他方法可以在不使用 libpcap 的 C 中创建数据包嗅探器?

我不是在问这个项目的答案,我只是在问方向,我应该从哪里开始?

0 投票
1 回答
2609 浏览

packet-capture - 如何在libpcap数据包接收功能中定期超时

我在 stackoverflow.com 中发现这篇文章 使用 Pcap 监听超时

我面临一个类似(但不同)的问题:使用 libpcap 数据包接收功能接收捕获的数据包时,什么是 GENERIC(与平台无关)方法定期超时?实际上,我想知道是否可以从 pcap_dispatch(pcap_t...) / pcap_next_ex(pcap_t...) 定期超时?如果可能的话,我可以像使用经典的 select(...timeout) 函数(http://linux.die.net/man/2/select)一样使用它们。

另外,从官方网页(http://www.tcpdump.org/pcap3_man.html),我发现原来的超时机制被认为是错误的和特定于平台的(这很糟糕,因为我的程序可能在不同的 Linux 和Unix box):
"... ... to_ms 以毫秒为单位指定读取超时。读取超时用于安排读取不一定在看到数据包时立即返回,而是等待一段时间以允许更多数据包到达并在一次操作中从操作系统内核读取多个数据包。并非所有平台都支持读取超时;在不支持的平台上,读取超时被忽略......
注意:读取实时捕获时,读取超时时 pcap_dispatch() 不一定会返回;在某些平台上,不支持读取超时,而在其他平台上,计时器在至少一个数据包到达之前不会启动。这意味着不应在例如交互式应用程序中使用读取超时,以允许数据包捕获循环定期“轮询”用户输入,因为无法保证 pcap_dispatch() 将在超时到期后返回。 ……”

因此,我想我需要自己实现 GENERIC(平台无关)超时机制,如下所示?

  1. 使用 pcap_open_live() 创建一个 pcap_t 结构。
  2. 使用 pcap_setnonblock(pcap_t...) 将其设置为非阻塞模式。
  3. 使用已注册的 OS 计时器轮询此非阻塞 pcap_t,例如:

注册 OS timer_x,并重置 timer_x;

而(1){

if(timer_x timeout) {做一些需要定期做的事情;重置 timer_x;}

通过调用 pcap_dispatch(pcap_t...)/pcap_next_ex(pcap_t...) 来轮询 pcap_t 以​​接收一些数据包;
对这些数据包做点什么;

}//while(1) 结束

问候,
直流

0 投票
1 回答
704 浏览

c - C libpcap:如何查看标头/数据包中的内容?

我有以下用于分析端口 80 上的数据的 C 代码:

我正在尝试查看标头内部以获取源地址和目标地址。并尝试查看数据包内部以获取有效负载。我该怎么做呢?我似乎无法在网上找到任何 API。

提前谢谢了,

0 投票
1 回答
3336 浏览

c - C:“tcp_seq”之前的预期说明符限定符列表

我不断收到此错误:我的头文件中的“tcp_seq”之前的预期说明符限定符列表。

这是头文件:

即使使用谷歌,我也无法深入了解它。

我希望有人有一些建议。

提前谢谢了,

0 投票
2 回答
3173 浏览

c++ - 如何使用 pcap_lookupdev 查找无线设备?

到目前为止,这是我的代码。

这是我的问题:我需要做什么才能让 pcap_lookupdev 查找无线设备(即 wlan0)?