1.前言
抓包是我们了解网络中数据传输情况的一种常用手段,常见的抓包工具有Charles,Fiddler,Wireshark等等,其中大多数都是通过设置网络代理来拦截数据包,只有Wireshark是通过嗅探网卡上的数据来抓包,所以一般的抓包软件只能抓到HTTP这样的应用层数据包,而Wireshark可以拦截到TCP/UDP这样更底层的数据包。
2.Wireshark简单使用
打开Wireshark就会进入网卡选择界面,选择自己当前使用的网卡即可。
选择完网卡之后,Wireshark就会自动开始抓包。我们任意选择一个数据包就可以查看它的结构。可以看见Wireshark按照TCP/IP四层协议来给数据分层,只需要将每一层展开就可以查看内部详细的字段。
2.1.过滤器的简单使用
当我们使用Wireshark抓包时,Wireshark会将所有经过网卡的数据包都抓下来,有时候我们并不需要这么多数据包,过多的包反而给我们造成了干扰,于是Wireshark给我们提供了过滤器来过滤得到需要的数据包。过滤器一共有两种,一种是在抓包时期就起作用的抓包过滤器,这种过滤器会把不符合条件的数据包丢弃,只留下符合条件的数据包;第二种是显示过滤器,显示过滤器是对所有包进行条件过滤,只显示符合条件的包。
2.1.1 抓包过滤器
在开始抓包选择网卡的时候就能选择需要的抓包过滤器。
该过滤器一共由四个部分组成:
1.方向:src,dst。
2.类型:host,net,port。
3.协议:ip,tcp,udp,http。
4.逻辑运算符:&&,||,!
示例:1.过滤IP地址:host 192.168.0.1。
2.抓取IP地址和指定端口:host 192.168.0.1 && port 80
2.1.2 显示过滤器
在抓包界面的上方输入框输入对应的显示过滤器语法就能对显示的数据包进行过滤。
语法规则:
1.比较符:==,!=,>,<,
2.逻辑操作符: and,or,not,xor
3.方向: ip.src,ip.dst
4.协议: ip,arp,icmp,tcp
示例:1.ip.addr = 192.168.0.1
2.tcp
3.tcp.srcport = 1207
除了手动输入过滤器语法之外,我们还可以通过手动选中数据包的某一字段来进行过滤
选中之后Wireshark就会根据选中的字段自动生成过滤器语法进行过滤。
3.在Android手机上抓包
上述步骤演示的都是在Windows平台进行抓包,而有的时候我们需要在Android平台上抓包,在Android平台抓包主要有两种方法,一种是使用电脑给手机开热点,电脑开热点的时候会生成一个虚拟的网卡,只要使用Wireshark抓虚拟网卡的包就可以了。这种方法和在Windows平台上抓包区别不大。第二种方法是使用Android自带的抓包工具---tcpdump来抓包。使用这种方式需要用到一台root的手机。具体步骤如下:
adb shell
adb root //启动root权限
tcpdump -w /sdcard/xxx //-w后面跟着tcpdump抓包文件的保存路径,如果不加该参数,tcpdump会把抓到的包都显示在屏幕上
adb pull xxx //使用adb pull命令把抓到的包推到电脑上,再使用wireshark进行查看,使用这个命令需要退出adb shell
由于不同区域使用的dns不同,即使是同一个APP抓到的包目的IP也可能不同,所以有时候我们抓包更愿意看见域名而不是IP地址,这可以在Wireshark上实现,只要在Wireshark上选中试图-》Name Resolution-》解析网络地址就可以看见域名。

3.1.tcpdump常用参数
-a 将网络地址和广播地址转换成域名
-c 在收到指定数量包之后停止
-p 将网卡设置为混杂模式
-w 将抓包结果写入指定文件
4.统计
有时候我们想看一次抓包的整体情况,这时候统计功能就派上用场了。统计功能中最常用的就是Conversations选项,这个功能可以看见一次抓包中各个主机之间发送的数据包的整体情况。包括发送的数据包总数,发送的数据总大小,数据传输的速度等等。
\