无法让 tcpdump 从 android 捕获数据
Trouble getting tcpdump to capture data from android
我正在尝试在 Ubuntu 中编写 bash 脚本以在 android 模拟器上安装应用程序,使用 'monkey' 向应用程序发送随机命令,然后使用 tcpdump 捕获所有数据。
代码:
#!/bin/bash
#store all apks files in array
shopt -s nullglob
packageArray=(*.apk)
function getPackageName()
{
myResult= aapt dump badging | grep package | awk '{print }' | 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
问题:我需要一个好的方法让 tcpdump 在猴子完成发送 500 个随机命令后关闭。我试过以几种不同的方式使用 KILL 命令,但它似乎没有用。
考虑以下示例:
#!/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
联机帮助页)。
sudo tcpdump ...
的 PID(在本例中为 sudo
pid)将存储在 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
$
我正在尝试在 Ubuntu 中编写 bash 脚本以在 android 模拟器上安装应用程序,使用 'monkey' 向应用程序发送随机命令,然后使用 tcpdump 捕获所有数据。 代码:
#!/bin/bash
#store all apks files in array
shopt -s nullglob
packageArray=(*.apk)
function getPackageName()
{
myResult= aapt dump badging | grep package | awk '{print }' | 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
问题:我需要一个好的方法让 tcpdump 在猴子完成发送 500 个随机命令后关闭。我试过以几种不同的方式使用 KILL 命令,但它似乎没有用。
考虑以下示例:
#!/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
联机帮助页)。
sudo tcpdump ...
的 PID(在本例中为 sudo
pid)将存储在 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
$