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您能否使用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 - 从标准输出捕获的主要内容,如果未能解决你的问题,请参考以下文章