24/7 захват пакетов в Android с помощью tcpdump

Я хотел бы получить захват трафика данных на уровне пакетов (.pcap) в Android в течение недели (в нескольких файлах, если это возможно).

Я думал, что смогу использовать tcpdump через Shark, но обнаружил, что захват через некоторое время останавливается. Самый большой пакет захвата, который я получил, составляет около 40 МБ. Я обнаружил, что tcpdump останавливается / падает при изменении сетевого интерфейса. Например, когда телефон подключен к 3G, когда я запускаю tcpdump из Shark, я вижу процесс запуска tcpdump, пока я не включу WiFi.

В Galaxy S2 при подключении через WiFi у меня есть следующие интерфейсы (полученные с помощью netcfg в оболочке adb): lo, svnet0, usb0, sit0, eth0. Когда я подключаюсь через 3G, я получаю pdp0 вместо eth0.

Есть ли способ запустить tcpdump 24/7? Или любой способ проверить, когда он работает и останавливается ли он, чтобы он снова запускался из приложения Java? Проверка процесса tcpdump или что-то подобное может быть? Или мониторинг состояния сети и запуск tcpdump при каждом изменении сети?

Я взглянул на: ReadLine в TCPDump-Buffer иногда блокирует, пока не убьёт tcpdump, но это не полностью решит мою проблему.

Я использую рутированные устройства.

3 ответа

Как насчет того, чтобы попробовать приложение tPacketCapture (работает с некорневыми устройствами)

Android OS 4.0

Свободно

https://play.google.com/store/apps/details?id=jp.co.taosoftware.android.packetcapture

-

Gaku

Если у вас есть рутированное устройство, тогда используйте SimplePacketCapture вместо tPacketCapture. tPacketCapture создает vpn, который может сломать ваше приложение voip.

Я попытался как следует, чтобы увидеть, что происходит с tcpdump после чередования сетевого интерфейса.
1. открыть Wi-Fi запустить tcpdump-arm
2. запустить ps | grep tcpdump-arm
3. закрыть Wi-Fi и открыть мобильный интерфейс
4.run ps | grep tcpdump-arm

Я обнаружил, что при смене сетевого интерфейса на мобильном телефоне процесс tcpdump-arm все еще работает, но он не захватывает пакеты.

Я думаю, что вам нужен tcpdump, чтобы продолжать захват даже после изменения сетевого интерфейса. Как вы заметили в руководстве Google, вы можете отследить трансляцию изменений подключения.
Затем вы должны запустить killall, чтобы убить процесс tcpdump
Наконец, перезапустите процесс tcpdump, если вы не указали интерфейс, он будет прослушивать только что открытый интерфейс. Если вы хотите, чтобы tcpdump вернулся быстро, вы можете добавить опцию "-l" в качестве ответа в T CPDump- Иногда буфер блокируется до тех пор, пока не будет уничтожен tcpdump.

Другие вопросы по тегам