Android Shark (tcpdump) 创建无效的 pcap

Android Shark (tcpdump) creates invalid pcap

我出于某些目的 运行ning Shark,一个用于 Android 的 tcpdump 工具。我 运行 在两台 android 设备上进行此操作,抓取捕获文件,然后打算 运行 一些统计数据。一台平板电脑,一台 phone。 他们分别 运行 Android 4.2.2 和 4.3。两个设备的捕获都是 运行,带有标志 -vv -s 0。我当然尝试过重新安装。

查看 Wireshark 中的数据,来自 phone 的数据正常,但无法正确读取来自平板电脑的数据(无法识别任何协议或任何内容。)。

我尝试在文件上使用 pcapfix,但 pcapfix 说文件没问题。但我无法在 scapy、dpkt(python 用于读取网络流量的库中读取它,只会将每个数据包放入 "other",被读取为 "Raw")或 wireshark。

任何人都知道我做错了什么,或者如何修复文件?

Capture file for phone (working)
capture file for tablet (broken)

数据来自移动流量(无 wifi)。 phone 在 LTE/WCDMA/GSM 上,而平板电脑在 WCDMA/GSM 上。我将尝试看看是否会导致它,但要到明天才会出现。

引用 libpcap 中的提交评论来解决我对这个特定问题的尝试:

For various annoying reasons having to do with DHCP software, some
versions of Android give the mobile-phone-network interface an ARPHRD_ 
value of ARPHRD_ETHER, even though the packet supplied by that interface
have no link-layer header, and begin with an IP header, so that the
ARPHRD_ value should be ARPHRD_NONE.

这意味着这些捕获的 pcap 文件具有 错误的 link-layer header 类型。

有Wireshark,就有editcap;做

editcap -T rawip -F pcap shark_dump_tablet.pcap shark_dump_tablet_fixed.pcap

这将读取 shark_dump_tablet.pcap 的所有数据包并将它们写入名为 shark_dump_tablet_fixed.pcap 的新 pcap 文件,但具有 link-layer header 类型 "Raw IP",而不是文件 header 中的 "Ethernet"。您应该能够读取生成的文件。