抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。
抓包工具有很多,到网上一搜一大堆,但是本篇不准备介绍那些偏门的工具。本篇主要介绍下windows和linux上的主流几个抓包工具如何一步步使用的,以及在web开发中的应用。
本篇要介绍的工具包含:
windows:
Linux:
重大说明:
工具虽然很多,但是还是想多说一嘴,抓包工具虽然强大,但是都有自己的适用场景。如果你想抓windows上的http请求,那用浏览器自带的http抓包工具最好。
如果想抓windows上的tcp包,还是用Wireshark吧
如果想抓手机上上的http包,还是用Fiddler吧
首发地址:
品茗IT-同步发布
品茗IT提供在线支持:
一键快速构建Spring项目工具
一键快速构建SpringBoot项目工具
一键快速构建SpringCloud项目工具
一站式Springboot项目生成
Mysql一键生成Mybatis注解Mapper
Mysql一键生成SpringDataRest项目
如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。
首先,到官网:https://www.wireshark.org/#download下载wireshark。
然后,根据提示一路下一步就可以了。
注意,一定要:右键–管理员启动,不然打开之后看不到接口,当然你要是有就更好了,反正我这儿不用管理员启动是用不了的。
打开之后是这样的,接口虽然多,但是可以一下子找到自己要找的接口,有波浪线的接口就是可以抓包的接口。
选择网络接口之后,就会看到数据包刷刷地滚动。最新的记录,都是在最底下的。
我们想肉眼找到某一条记录就太难了。可以使用左上角的过滤器做简单的筛选。
[外链图片转存失败(img-6pdlwVEC-1565659239748)(https://www.pomit.cn/upload/picture/20190812/208256713638144.png)]
当然,我们开发过程中,往往是查找指定的目的IP的数据包。可以使用ip.src == 10.247.62.91 && ip.dst == 192.168.0.49
这种语法来查找发起ip是10.247.62.91,目的ip是192.168.0.49这种数据包:
[外链图片转存失败(img-AlQQ6mKv-1565659239750)(https://www.pomit.cn/upload/picture/20190812/208257470374144.png)]
或语法:ip.src == 10.247.62.91 || ip.src == 127.0.0.1
,查找发起ip是10.247.62.91或127.0.0.1的数据包。
我觉得够用了,最多再加上端口号:tcp.port == 20806
这种语法。左上角的筛选器可以帮助你写筛选语句的。
有时候我们需要对本机的接口进行抓包测试,Wireshark暂时做不到,网上有说卸掉Wireshark的WinPcap,我觉得还是不要这样做,因为有更好的方案:RawCap。
下载RawCap:https://www.netresec.com/?page=RawCap
打开页面后,页面上显示有使用方法,可以不必看。
下载后,文件只有23k,这么小巧实用。我立即存到网盘,防止它丢失。
双击打开,根据提示选择127.0.0.1 Loopback Pseudo-Interface 1 Loopback
然后提示Output path or filename [default 'dumpfile.pcap']:
输入文件路径或者文件名,默认是当前目录下的dumpfile.pcap。我默认走下去,然后它就一直抓包了。
界面如下:
[外链图片转存失败(img-sK9q8QiS-1565659239751)(https://www.pomit.cn/upload/picture/20190812/208260891345152.png)]
然后目录下多了个dumpfile.pcap文件。你不关掉上面的界面,它就一直抓包下去。
然后使用方式就同上了。
官网下载:https://www.telerik.com/fiddler,随便填个信息,然后下载就行了。
然后一路走下去。不多说了。另外windows的http抓包也不说了,实用性不大。
1. 允许远程连接
2. 设置手机流量经过
设置代理,打开你的手机,找到你所连接的WIFI,长按选择修改网络,输入密码后往下拖动,然后勾选显示高级选项,然后在代理一栏选择手动,再将你电脑的IP地址和端口号输入进去,然后保存。
手机端浏览器打开fiddler的8888端口:http://ip地址:8888
,提示下载证书。下载证书安装就可以了。
证书的作用是对https进行解析,等于是手机和fiddler之间建立了ssl通道,fiddler和目的网址之间也做了个ssl通道。
然后就可以用了:
[外链图片转存失败(img-MiqgeWzR-1565659239755)(https://www.pomit.cn/upload/picture/20190812/208276279804160.png)]
官方网址真难找,不过百度一下就很多下载地址。
我再在百度网盘放了一份:
链接:https://pan.baidu.com/s/1dKyoEB-qotQKsPEVLWCQ-w
提取码:h75r
打开之后,是真的卡。进程刷新,你可能会看花眼。而且名称看起来并不是你想要的。比如你想找java进程,它显示javaw.exe,不过也情有可原,毕竟eclipse的java进程就是javaw启动的。。
[外链图片转存失败(img-6v9ghP3p-1565659239756)(https://www.pomit.cn/upload/picture/20190812/208278742049024.png)]
按f12打开控制台,如果f12被禁掉了,可以在右键–> 检查(IE或者micresoft edge是审查元素)打开。如果右键也被禁掉了,随便找个没有禁掉的网页,先打开控制台,然后复制个连接到地址栏打开即可。
[外链图片转存失败(img-o5H3Ik50-1565659239757)(https://www.pomit.cn/upload/picture/20190812/208296532848896.png)]
一般网站喜欢在控制台放个彩蛋,屁用没有。
点击network,就能看到网络请求的过程,以及请求响应这些。
[外链图片转存失败(img-28whEHBQ-1565659239758)(https://www.pomit.cn/upload/picture/20190812/208297223938304.png)]
这里还是只说centos的安装:yum -y install tcpdump
.
命令行输入:tcpdump -help
,显示:
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips 26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。
抓取所有经过eth0,目的或源地址是192.168.0.49的网络数据:
tcpdump -i eth0 host 192.168.0.49
[外链图片转存失败(img-olAnzJ7W-1565659239760)(https://www.pomit.cn/upload/picture/20190812/208304540086528.png)]
将上面的命令结果保存到文件:
tcpdump -i eth0 host 192.168.0.49 -w test.cap
生成的test.cap文件拿到windows上,可以由wireshark直接打开:
[外链图片转存失败(img-QqQNxVpX-1565659239761)(https://www.pomit.cn/upload/picture/20190812/208304890962176.png)]
1、默认启动
tcpdump -vv
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
2、过滤主机
抓取所有经过eth0,目的或源地址是192.168.0.49的网络数据:tcpdump -i eth0 host 192.168.0.49
指定源地址,192.168.0.49:tcpdump -i eth0 src host 192.168.0.49
指定目的地址,192.168.0.49:tcpdump -i eth0 dst host 192.168.0.49
3、过滤端口
抓取所有经过eth0,目的或源端口是25的网络数据:tcpdump -i eth0 port 25
指定源端口:tcpdump -i eth0 src port 25
指定目的端口:tcpdump -i eth0 dst port 25
4、网络过滤
抓取ip段为192.168:tcpdump -i eth0 net 192.168
抓取源ip段为192.168:tcpdump -i eth0 src net 192.168
抓取目的ip段为192.168:tcpdump -i eth0 dst net 192.168
5、协议过滤
arp协议:tcpdump -i eth0 arp
ip协议:tcpdump -i eth0 ip
tcp协议:tcpdump -i eth0 tcp
udp协议:tcpdump -i eth0 udp
icmp协议:tcpdump -i eth0 icmp
6、常用表达式
非 : ! or “not” (去掉双引号)
且 : && or “and”
或 : || or “or”
抓取所有经过eth0,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数:
tcpdump -i eth0 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
抓取所有经过eth0,目标MAC地址是00:01:02:03:04:05的ICMP数据:
tcpdump -i eth0 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
抓取所有经过eth0,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据:
tcpdump -i eth0 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
以上我觉得对于开发人员来说足够了,这篇文章有更详细的用法:https://www.cnblogs.com/chenpingzhao/p/9108570.html
Spring组件化构建
SpringBoot组件化构建
SpringCloud服务化构建
喜欢这篇文章么,喜欢就加入我们一起讨论Java Web吧!