2017-02-20 213 views
0

我很有兴趣制作一个C#程序,可以从Android设备捕获网络流量。使用ADB,我可以将设备流量转发到Windows标准输出。然后,输出将被转发到预先配置为侦听标准输出的Wireshark。SharpPcap - 从标准输出捕获

下面是我使用的命令,以防别人需要

在第一个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从标准输出捕获数据包

有谁知道如何做到这一点打开一个形式?任何其他想法也是受欢迎的。

非常感谢!

+0

我是sharppcap的作者。你知道传递给wireshark的stdout使用什么格式吗?如果你确实可以制作一个C#应用程序来接收这些应用程序,并将它们传递给PacketDotNet进行解析。 –

+0

嗨克里斯。数据包格式与从LAN上捕获流量的情况完全相同。正如你所看到的,stdout被直接传递给wireshark,并且可以解码并以wireshark的形式显示为正常的网络流量。如果我一次可以得到一个数据包,我想PacketDotNet可以帮助解析。但在这种情况下,我无法使用SharpPcap的ICaptureDevice来使用GetNextPacket()来获取RawCapture,因为这里没有设备,而是从STDOUT中捕获。你有什么建议吗?谢谢。 –

+0

@ChrisMorgan:我有一个字节数组包含从STDOUT读取的所有数据包。我检查了几次,我的字节数组与pcap日志具有相同的格式。我想它可以通过使用PacketDotNet解码。有什么建议? –

回答

0

你可以使用mkfifo创建一个fifo,并将nc写入fifo而不是stdout吗?那么只需从fifo读取wireshark,而不是从stdin读取? 东西这样的:

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 & 
+0

嗨克里斯托弗。当然,即使在stdout的情况下,Wireshark也会一直提供帮助。但事情是将数据包转发到我的程序。我发现我的方式来捕获标准输出数据包,但似乎这不足以达到我的目的,因为SharpPcap不应该解析SIP数据包。你有什么想法如何将Wireshark整合到C#程序中? –

+0

@ Viet-AnhDinh您可能会为PacketDotNet实施SIP解析器。我愿意承诺实施解析器。 –

+0

@ChrisMorgan:我发现了另一种tshark适合我所有需求的方式。完成我的项目后,我可能会回来使用PacketDotNet的SIP解析器。当时会联系你。感谢邀请。 –