SharpPcap - 从标准输出捕获

Posted

技术标签:

【中文标题】SharpPcap - 从标准输出捕获【英文标题】:SharpPcap - capture from standard output 【发布时间】:2017-07-09 06:19:04 【问题描述】:

我对制作一个能够从 android 设备捕获网络流量的 C# 程序很感兴趣。使用 ADB,我能够将流量从设备转发到 Windows 标准输出。然后,输出将被转发到预先配置为监听标准输出的 Wireshark。

以下是我正在使用的命令,以防其他人需要

在第一个 CMD 窗口中

adb shell "tcpdump -n -s 0 -w - | nc -l 11233"

在第二个 CMD 窗口中

adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233 | wireshark -k -S -i -

这是我的问题。

我正在使用 SharpPcap 在我的程序中捕获网络流量。目前,我能够从我的网络适配器(即以太网或 WiFi)获取数据包。但是正如你所看到的,在这个命令之后,网络流量从 Android 设备转发到标准输出

adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233

并且该命令的输出将作为以下命令的输入,因为 Wireshark 被配置为通过 "-i -"

监听标准输出

以上两条命令每执行一次,就会打开一个 Wireshark 窗口实例来抓包。这无法应用于我的程序。

这个想法是使用 SharpPcap 打开一个表单以从标准输出中捕获数据包

有人知道怎么做吗?也欢迎任何其他想法。

非常感谢!!!

【问题讨论】:

我是sharppcap的作者。你知道传递给wireshark的标准输出使用什么格式吗?如果你这样做了,你可以创建一个 c# 应用程序来接收这些数据并将这些数据传递给 PacketDotNet 进行解析。 嗨,克里斯。数据包格式与您从 LAN 捕获流量的情况完全相同。如您所见,stdout 直接传递给wireshark,可以在wireshark 中解码并显示为正常的网络流量。如果我一次能得到一个数据包,我想 PacketDotNet 可以帮助解析。但是在这种情况下,我不能使用 SharpPcap 的 ICaptureDevice 来使用 GetNextPacket() 进行 RawCapture,因为这里没有设备,只能从 STDOUT 捕获。你有什么建议吗?谢谢。 @ChrisMorgan:我有一个字节数组,其中包含从 STDOUT 读取的所有数据包。我检查了几次,我的字节数组与 pcap 日志的格式相同。我猜它可以通过使用 PacketDotNet 进行解码。有什么建议吗? 我没有看到一个很好的方法来让来自标准输入的数据路由到 pcap。看起来 pcap_open_offline() 不会接受标准输入的文件描述符。查看github.com/wireshark/wireshark/blob/… 看起来该文件手动解析 pcap 格式。我在 pcap 手册页中也看不到任何看起来可以在这里工作的东西。想法? 嗨。我找到了从标准输出捕获数据包的方法。 1. 将 stdout 中的所有输出保存到 Queue 中。 2. 从该队列中提取字节,转换为十六进制,从十六进制解码数据包的到达时间、长度和有效负载。 3. 然后使用 Packet.Net 完成剩下的工作。我已经尝试过,但处理队列有一些例外。修复异常后将在此处发布我的代码 【参考方案1】:

您能否使用mkfifo 创建一个先进先出并让nc 写入先进先出而不是标准输出?然后只是从fifo而不是stdin读取wireshark? 类似的东西

mkfifo sharkfin
wireshark -k -S -i sharkfin &
adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233 > sharkfin

如果wireshark停止捕获并且您不希望它停止捕获,您也可以在启动wireshark后发出以下命令以确保wireshark永远不会收到EOF。

cat > sharkfin &

【讨论】:

嗨克里斯托弗。当然,Wireshark 将始终提供帮助,即使在标准输出的情况下也是如此。但问题是将数据包转发到我的程序。我找到了从标准输出捕获数据包的方法,但似乎这还不足以达到我的目的,因为 SharpPcap 不应该解析 SIP 数据包。您知道如何将 Wireshark 集成到 C# 程序中吗? @Viet-AnhDinh 您可能会为 PacketDotNet 实现 SIP 解析器。我愿意签订合同来实施解析器。 @ChrisMorgan:我找到了另一种方式来满足我的所有需求。完成我的项目后,我可能会带着 PacketDotNet 的 SIP 解析器回来。到时候会联系你的。感谢邀请。

以上是关于SharpPcap - 从标准输出捕获的主要内容,如果未能解决你的问题,请参考以下文章

以最佳方式从 system() 命令捕获标准输出 [重复]

调用 Runtime.exec 时捕获标准输出

是否可以使用标准输出作为流利的源来捕获特定日志以写入弹性搜索?

如何使用 googletest 捕获标准输出/标准错误?

在 Bash 中同时捕获标准输出和标准错误 [重复]

为远程进程的子进程捕获标准输出