问题标签 [pcapy]

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 投票
4 回答
3555 浏览

python - 用于 pcapy/impacket 的 IPv6 解码器

我使用pcapy / impacket库在 Python 中解码网络数据包。它有一个 IP 解码器,它知道 IPv4 数据包的语法,但显然没有 IPv6 解码器。

有人得到吗?

Impacket维护人员在私人通信中表示,从 Scapy 开始可能会更好

0 投票
1 回答
1798 浏览

python - 使用 pcapy/impacket 更改数据包数据

我正在Linux上用Python编写一个小程序,它将拦截从主机A到主机B的特定端口上通过线路传输的数据包。主机C将充当中间人,因此所有流量都将通过主机C(arp毒法)。我已经成功编写了拦截部分,因此我可以在屏幕上看到所有数据,但我希望在不更改标头数据的情况下修改数据包数据(当然校验和将被更改)。如何使用截获的带有 pcapy/impacket 的数据包来实现这一点?

它可能有点模糊,但主要思想如下。
1. 主机 A 向主机 B 发送“Hello”(主机 A 和 B 被 arp 欺骗,因此流量通过主机 C)。
2. 主机 C 从主机 A 获取“Hello”(默认情况下,主机 C 将“Hello”重定向到主机 B,但我想要其他内容 - 参见第 3 点)
3. 主机 C 将“Hello”修改为“Bye”并重定向(内核的 ip_forward?)到主机 B。
4. 主机 B 得到“再见”。

也许有一种方法可以使用一些 linux 机制来实现这一点?现在我被困住了,我会很感激任何想法。

0 投票
1 回答
1496 浏览

python - 如何从数据包十六进制转储中提取纯文本?

我正在使用 pycapy 和 Impacket 编写一个脚本来记录和分析网络流量。输出如下所示:

我想要做的是从中提取数据,特别是 TCP WindowFull 和 ZeroWindow。我将如何将这些十六进制转储转换为纯文本,以便可以将它们反馈给 Python 进行分析?我不想使用 WireShark,因为我正在尝试制作一个独立的应用程序。

0 投票
3 回答
10859 浏览

python - python中的数据包嗅探器使用pcapy impacket

我正在尝试使用 pcapy 和 impacket 创建一个数据包嗅探器。我被困在数据提取阶段。不幸的是,没有正确记录 impacket。至少我一个也找不到。谁能告诉我在哪里可以找到文档或我可以使用哪些功能从捕获的数据包中提取数据?

编辑

我当前的代码

样本输出

我想要做的是提取更多数据,例如提取url(如果数据包中有url)

0 投票
0 回答
249 浏览

python - 使用 Impacket 发送 ICMPv6 消息(ImpactPacket 和 Impact Decoder)

我似乎找不到在 ICMPv6 消息上发送数据包的好文档。

Impacket 有一个示例,但它使用 Ping6,因此它只是调用

它会返回一个 ping 消息。

例如,我应该如何开始发送​​ RA 消息。

对我来说最难的部分是有效载荷,因为在我的嗅探和检测中。Impacket 没有任何模块来“客观地”读取有效负载,因此它是一堆十六进制并基于我们做出假设。

感谢可以提供帮助的人

0 投票
0 回答
455 浏览

python - 使用 Impacket 时发送带有 VLAN 的 ICMPv6 数据包

嘿,伙计们,我很受束缚我有这个功能

该功能的快速概述将告诉您我正在创建一个 RA 数据包并将其发送到我的网络中,我的问题是我似乎无法发送带有 VLAN 的 RA 数据包。

我的附加代码eth = ImpacketPacket.Ethernet() 将告诉您我创建了一个具有 VLAN 的标头,并将其作为具有实例 IPV6 的 ip 的父级。

我的问题是,当我运行代码时,将发送的结果数据包是 Uknown (0),这意味着它已损坏或无法理解。

我已经被这个问题困扰了将近一个星期,并尝试了很多方法来发送它。我不再确定什么是错误,如果我用 icmp 而不是 eth 发送数据包,它工作正常`

0 投票
1 回答
910 浏览

python - 如何使用 dpkt 编写器中实时捕获的标头中的时间戳?

我正在编写的数据包捕获实用程序遇到一些问题。我目前正在使用 pcapy 打开实时字节流和 dpkt 来解码数据包。我还想将数据包写入 .pcap 文件,该文件与 dpkt.Writer 对象一起使用,但是记录在 pcap 文件中的时间戳来自写入器将数据包写入 pcap 文件时,而不是网络接口时或内核收到消息。

我从文档中了解到,在编写时您可以提供 ts 供作者使用,但是我不明白如何从收到的数据包的标头中提取它。从我可以找到的示例中,这些示例显示了如何通过读取文件来打印时间戳,似乎我可以简单地打印从字节流接收到的元组的第一个值,但是当我这样做时,会出现以下错误:

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“Pkthdr”

错误很清楚:毫无疑问,我必须在 Pkthdr 对象中找到时间戳属性,但我在 pcapy 项目或 dpkt 中找不到任何解释如何解析“标题”的文档/示例

我也尝试使用 pypcap 库进行实时捕获,但输出是相同的。我还在 python 2.7.5 上尝试了相同的代码,因为我读到 dpkt 可能还不完全支持 python3,但在任一版本上的结果相同

为了证明 pcap 中的时间戳是从写入时开始的,我在再次写入相同的数据包之前添加了睡眠期。您将看到两者在标头时间戳中显示了约 1 秒的差异:

我不太依赖 pcapy 或 dpkt,所以如果有更好的方法,我愿意切换这些库中的任何一个,但是我觉得有更多经验的人可以告诉我如何深入研究Pkthdr 对象,将时间戳提取为 str,然后在写入 pcap 时将其作为“ts”参数插入:

编辑:所以我查看了 pcapy 模块中 pkthdr 对象的源代码,发现了一些有用的东西:似乎有一个名为“getts”的函数可以从对象中获取时间戳:

在我的 python 代码中,我调用了这样的函数:

它返回一个元组,其中包含标头的秒数和微秒数,例如 (1555710256, 942645)。下一步是将其连接成一个数字并将其输入到 dpkt writer ts 中。希望我很快就会发布一个工作示例

0 投票
0 回答
291 浏览

python - 在 python 中使用 pcapy 模块捕获 udp 数据包。pcapy.next() 是我正在使用的属性之一

我正在使用 cap.next() 来捕获 udp 数据包。但是一旦它开始接收数据包,即使没有数据包到来,它也永远不会出来。请帮我。我已经给出了下面的代码

如果我要使用 .loop 属性,我可以使用

p = pcapy.open_live(dev, 65536, 1, 1) p.setfilter('udp and src host 169.254.18.15 and port 5001')

print("正在捕获数据...") dumper = p.dump_open('data_loop.txt')

p.loop(NUM_OF_packet_to_receive,handle_packet)

我可以应用过滤器并在 p.loop 中指定要接收的数据包数量。

但是我正在使用 p.next() 我想在这个 p.next() 中应用过滤器并设置超时,任何人都可以帮我应用过滤器并设置超时。

(pcapy doc 没有正确编写,欢迎提供任何帮助。)现在,我自己过滤原始数据,而不是使用 pcapy 过滤器。

代码 https://docs.google.com/document/d/1z7VHviHQLKqFF4Wt2r9aN4dFMNr7HEorIvuHtUMxnSk/edit?usp=sharing

0 投票
1 回答
187 浏览

python - 在 pyCharm 上编译 pcapy

我正在尝试import pcapy在 PyCharm 上的一个 python 文件上使用。

所以,我已经成功安装pcapy在“项目解释器”上,但是当我运行包含import pcapy它的 python 文件时,

我该如何解决这个问题?

另外,我有 anaconda 提示,并pcapy成功安装,通过使用

结果是:

那么,它安装正确,但为什么不能编译呢?

0 投票
1 回答
124 浏览

python - Byte slicing using brackets for unpack

I'm trying to slice a variable containing a number of bytes, so I can use unpack with a buffer of 14 bytes. But apparently it's not working. What am I doing wrong here?

and here's the result