Tcpdump流量自动化测试上篇

简介: 在实际的测试开发工作中,由于平时的工作机是Mac再加上自动化测试以及专项性能测试过程中经常会跟各种Linux命令打交道,所以看过好多讲Linux常用命令的书籍和资料,但里面讲到的每个命令的用法、参数都太大而全了,很容易吓退初学者,我觉得这种类型的书更适合作为工具书用来查阅。这里我打算通过实际工作过程中具体的应用场景来讲解其中用到的一些Linux命令,本文就先以Android Tcpdump抓包分析应用启动流量来展开。

Tcpdump流量自动化测试



Android 网络通信是开发中一个很重要的部分,而通过抓包能够查看网络通信的具体细节,因此在平时开发过程中经常会用到。


如果只需要查看 HTTP或HTTPS包,那么使用 Charles就够了,但是如果想要看 TCP 包,那么就需要用到 Wireshark+Tcpdump组合了,下面是手工操作的流程:

1、下载tcpdump;
2、将tcpdump放入手机:adb push tcpdump /data/local/tcpdump;
3、将tcpdump的权限变为可执行:adb shell chmod 6755 /data/local/tcpdump。
4、开始抓包:adb shell /data/local/tcpdump -i any -p -s 0 -w /sdcard/capture.pcap;
5、按下 "control+c" 结束抓包;
6、拉取抓获的tcp/udp包:adb pull /sdcard/capture.pcap capture.pcap;
7、通过 tshark 进行分析;

通过tshark自动分析放到下次讲,本文主要是把前面几部手工操作步骤通过Shell脚本的形式实现自动化抓包,下面是完整的脚本文件:

#!/bin/bashtrap 'adb pull /sdcard/capture.pcap .' INT
shell_script_path=$(cd `dirname $0`; pwd)
tcpdump_local_path="${shell_script_path}/tcpdump"
if [ ! -f "${tcpdump_local_path}" ]; then  cd ${shell_script_path}  curl -L http://www.androidtcpdump.com/download/4.9.0/tcpdump -o tcpdump  echo -e "download tcpdump at path ${shell_script_path}"fi
if [ -f "${tcpdump_local_path}" ]; then    echo -e "findout tcpdump ${tcpdump_local_path}"else    echo -e "download tcpdump fail"    exit 1fiadb rootecho -e "adb as root"adb shell rm /sdcard/capture.pcapecho -e "success remove /sdcard/capture.pcap"adb push "${tcpdump_local_path}" /data/local/tcpdumpadb shell chmod 6755 /data/local/tcpdumpecho -e "install tcpdump success"
echo -e "Do you want delete tcpdump file (y) ?"read isDeleteDownloadif [ ${isDeleteDownload} == "y" ]; then  rm -f ${tcpdump_local_path}  echo -e "success remove ${tcpdump_local_path}"fiadb shell  /data/local/tcpdump -i any -p -s 0 -w /sdcard/capture.pcap

Linux命令讲解



针对上面这个应用场景,我把其中用到的一些Linux命令和Shell脚本分别讲解一下。


trap


USAGE: trap [action condition ...]

当捕捉到 condition 列表所对应的任何一个信号时,执行 action 动作(使用 eval action 来执行,故 action 可以是 shell 内建指令、外部命令及脚本中的函数等),当shell收到HUP INT PIPE QUIT TERM这几个命令时,当前执行的程序会读取参数“exit 1”,并将它作为命令执行,在上面的场景中就是当用户按下control+C会自动从手机中取出capture.pcap。


获取当前脚本的目录


Linux下获取当前的目录,需执行以下命令:


$(cd `dirname $0`;pwd)

反引号


反引号用于命令替换,和$()的作用相同,表示返回当前命令的执行结果并赋值给变量。


位置参数


位置参数的含义如下:

$0:脚本名本身。

$1、$2……${10}:脚本的第一个参数、第二个参数……第十个参数。

$#:变量总数。

$*、$@:显示所有参数。

$?:前一个命令退出的返回值。

$!:最后一个后台进程的ID号

dirname $0,取得当前执行的脚本文件所在的目录

命令中“`”不是英文的单引号,而是英文输入法下的“~”同一个按键下面的那个符号


命令替换


命令替换是指将命令的标准输出作为值赋给某个变量。比如,在某个目录中输入ls命令可查看当前目录中所有的文件,但如何将输出存入某个变量中呢?这就需要使用命令替换了,这也是Shell编程中使用非常频繁的功能。


Shell中有两种方式可以完成命令替换,一种是反引号(`),一种是$(),使用方法如下:

➜  ~ `命令`
➜  ~ $(命令)

要注意的是,$()仅在Bash Shell中有效,而反引号可在多种UNIX Shell中使用。所以这两种命令替换的方式各有特点,究竟选用哪种方式全看个人的喜好。


if判断结构


if是最简单的判断语句,可以针对测试结果做相应处理:如果测试为真则运行相关代码,其语法结构如下:

if expression; 
then        
commandfi

如果expression测试返回真,则执行command。如果要执行的不止一条命令,则不同命令间用换行符隔开,如下所示:

if expression; 
then        
command1        
command2        
...fi

测试结构


使用“[”启动一个测试,再写expression,再以“]”结束测试。需要注意的是,左边的括号“[”后有个空格,右括号“]”前面也有个空格,如果任意一边少了空格都会造成Shell报错。

[ expression ]

文件测试


[ file_operator FILE ]

其中file_operator是文件测试符(具体参考下图),FILE是文件、目录(可以是文件或目录的全路径)。



curl


curl很简单了,这里要注意的一点是当请求的地址有3xx跳转的时候,curl 命令是支持请求重定向的,可以通过 -L 参数配置。


tcpdump


"-i any": 指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
"-p": 指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
"-s 0": 指定抓包的包大小,使用-s 0指定数据包大小为262144字节,可以使得抓到的数据包不被截断,完整反映数据包的内容。
"-w": 使用-w参数指定抓包文件保存到文件,以便后续使用Wireshark等工具进行分析。
相关文章
|
3月前
|
安全 网络安全 数据安全/隐私保护
Python渗透测试之流量分析:流量嗅探工具编程
Python渗透测试之流量分析:流量嗅探工具编程
64 0
|
8月前
|
监控 测试技术 Shell
APP的CPU,内存和流量如何测试?
APP的CPU,内存和流量如何测试?
152 0
|
Kubernetes jenkins 测试技术
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
287 1
|
运维 监控 安全
《2023云原生实战案例集》——06 医疗健康——谱尼测试 基于SAE实现业务快速上线并从容应对流量洪峰
《2023云原生实战案例集》——06 医疗健康——谱尼测试 基于SAE实现业务快速上线并从容应对流量洪峰
流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码
2010年,谷歌正式退出中国市场,无数人扼腕叹息,如今十年过去了,谷歌还有两条重要的业务线并没有完全退出,一个是页面统计业务(Google Analytics),另外一个则是谷歌广告联盟(Google Adsense),说起广告联盟,玩儿过网站的朋友应该并不陌生,对于中小型站长、博主来说,要想通过网站的流量取得一些收入,除了和一些线下线上厂商谈包月广告位,更多的可能就是投放广告联盟广告了。但随着网络广告的不断发展,广告形式有了很大的变化,出现了CPC、CPS、CPA、CPV等众多广告类型。
流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码
|
SQL 测试技术
一款流量审计设备压力测试操作
使用tcpreplay工具模拟镜像流量到审计设备,验证产品性能,使用工具重放h.pcap m.pcap l.pcap流量对设备测试
一款流量审计设备压力测试操作
|
网络协议 Java Linux
Linux流量测试
由于要测试另一个IDC给的带宽是否给足了,所以要从一个机房打10G的流量到测试IDC。之初 采用多线程下载工具,多进程方法下载,可是不理想,跑量达不到要求。
|
测试技术 Shell Linux
Android应用启动流量自动化测试
之前《Tcpdump流量自动化测试上篇》、《Tcpdump流量自动化测试下篇》这两篇文章里讨论了如何通过tcpdump命令行工具来实现Android应用的流量自动化采集和分析,今天再来跟大家分享一下如何针对应用启动场景来做流量测试,有人可能会问了为什么是启动场景?因为现在工信部要求在用户没有授权网络请求前,应用不得擅自进行网络请求,特别是当跟厂商合作提供预装包的时候对此项的检查很严格。 另外跟大家说明一下,我分享的文章都是亲自实践过的,基本照着方案操作不会有大问题,默认情况下我所使用的操作系统都是MacOS。
428 0
Android应用启动流量自动化测试
|
网络协议 Linux 测试技术
Tcpdump流量自动化测试下篇
接上一篇《Tcpdump流量自动化测试上篇》讲到通过自动化的方式获取到Pcap文件,今天来讲讲怎么用Wireshark来自动分析统计Pcap包中指定的流量。
244 0
Tcpdump流量自动化测试下篇