2016-08-02 8 views
4

Я пытаюсь написать сценарий bash в Ubuntu, чтобы установить приложение на эмулятор Android, отправить случайные команды в приложение с помощью «обезьяны» и захватить все данные с помощью tcpdump. Код:Не удается получить tcpdump для сбора данных с android

#!/bin/bash 

#store all apks files in array 
shopt -s nullglob 
packageArray=(*.apk) 


function getPackageName() 
{ 
    myResult= aapt dump badging $1 | grep package | awk '{print $2}' | sed s/name=//g | sed s/\'//g 
} 

#loop through array installing, testing and capturing data, and uninstalling 
for i in "${packageArray[@]}"; 
do 
    : 
    myResult=$(getPackageName "$i") 

echo "------------------INSTALLING-----------------" 

sudo adb install $i 
echo "*****************INSTALLED****************************" 

echo "*****************TESTING****************************" 

#-------THESE COMMANDS ARE THE TROUBLE------- 

(sudo -i xterm -e "tcpdump src 10.0.2.11 -vvv > /home/seed/Documents/autoTcpLogs/$myResult.pcap" & 
sudo -i xterm -e "adb shell monkey -p $myResult -v 500") 
echo "------------------DONE TESTING-----------------" 

sudo adb uninstall $myResult 
echo "*****************PACKAGE UNINSTALLED****************************" 

done 

Проблема: мне нужен хороший способ для ТСРйитра, чтобы закрыть один раз обезьяны завершил отправку случайных команд 500. Я попытался использовать команду KILL несколькими способами, но, похоже, это не трюк.

+0

вы пробовали 'killall -TERM tcpdump'? – pah

+0

Да, я пробовал это после команды обезьяны. –

+0

См. Ответ. PID tcpdump хранится в переменной и используется как аргумент 'kill'. Если это не удается, обновите свой вопрос по причине сбоя (сохраните вывод команды kill где-нибудь и вставьте его сюда) – pah

ответ

1

Рассмотрим следующий пример:

#!/bin/bash 

sudo -- tcpdump > /dev/null & 
SUDO_TCPDUMP_PID=$! 
echo "Waiting 3 seconds" 
sleep 3; 
echo "3 seconds elapsed" 
sudo -- setsid kill -TERM "${SUDO_TCPDUMP_PID}" 

EDIT (читать комментарии вопрос): Мы должны использовать setsid, чтобы заставить сигнал, отправляемый из другого сеанса, в противном случае sudo не будет ретранслировать сигнал (см. sudo manpage).

ИДП из sudo tcpdump ...sudo ВЗОМТ в данном случае) будет храниться в SUDO_TCPDUMP_PID переменной, которая будет использоваться в качестве аргумента kill:

$ ./tcp.sh 
Waiting 3 seconds 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes 
3 seconds elapsed 
0 packets captured 
2 packets received by filter 
0 packets dropped by kernel 
$