零、安装
安装的话网上很多。
TCP/IP协议族的分层与代表协议类型:
(1)应用层:DNS(基于UDP)、ping(基于ICMP)、telnet(TCP)
注:应用层负责梳理应用程序的逻辑。
(2)传输层:TCP、UDP
注:传输层为两台主机上的应用程序提供端到端(end to end)的通信。传输层只关心通信的起始端和目的端,而不在乎数据包中转的过程。
(3)网络层:IP、ICMP(IP的重要补充:1)回应网络错误2)查询网络信息)
注:网络层实现数据包的路由和转发,强调的是逐跳的中转。通常数据包不能直接发送给目标主机,IP协议做的就是为他寻找合适的下一跳。
(4)数据链路层:以太网、ARP、RARP
注:实现了网卡接口的网络驱动程序,处理数据在物理媒介上的传输;驱动隐藏不同物理硬件的电气特性,为上层提供统一接口。
tcpdump抓的是网络层的数据包,所以分包都是能感知的!!!!!!!!!!
一、抓安装机本地网卡的数据、以及常用的filter语法。
入门使用的话可以参考这个链接。
wireshark抓包新手使用教程 - jack_Meng - 博客园
其实主要就是Capture→Options→ Wi-Fi:en0应该就是本地网卡。
注:包体中的字符串是可以直接在ascii处原模原样显示出来的,但是数字等不可以。
二、远端机器玩法一 —— tcpdump输出.cap文件,wireshark分析之
对于远端机器一个常用的玩法就是使用tcpdump抓取数据包文件,然后用本地的wireshark来看。
具体玩起来也很简单。就是tcpdump的时候指定 -w a.cap 将原始包写入a.cap文件。如下都是可以的。tcpdump的玩法参见 https://blog.youkuaiyun.com/mijichui2153/article/details/81356044
tcpdump -i eth1 host 10.56.114.22 -w a.cap
tcpdump -i eth1 host 10.56.114.22 -X -w b.cap
然后就是wireshark→file→open,打开后就和实时抓取的是一样的了(选中消息、展开看详情等等)。
三、远端机器玩法二 —— wireshark连过去直接抓数据包
网上搜“wireshark 抓取远程linux服务器 数据包” 之类的就能搜到很多。
我们这里就看一下,mac wireshark是怎么抓取远程服务器的数据包的。如下:
四、具体数据包分析
1、udp数据包分析:
2、各层分析
还是很直观的。分别对应物理层、数据链路层、网络层、传输层、应用层。
这篇博客对每一层及其内容的含义做了详细的介绍,非常详尽!!!!
WireShark入门使用详解_莫瑞与甜甜圈的博客-优快云博客
五、分析发出请求与收到回包
0.背景
在工具集100.116.191.98上给11.167.8.13所在的服务发送一个请求,期望收到对应回包。这里通过wireshark抓包确定 ①请求确实发出去了 ②确实收到rsp了。
1.验证req确实发出去了
通过如下语句抓包:
tcpdump -i eth1 -X '(src host 100.116.191.98) and (dst host 11.167.8.13)'
tcpdump -i eth1 -X '(src host 100.116.191.98) and (dst host 11.167.8.13)' -w req.cap
2.验证确实是收到rsp了的
通过如下语句抓包:
tcpdump -i eth1 -X '(src host 11.167.8.13) and (dst host 100.116.191.98)'
tcpdump -i eth1 -X '(src host 11.167.8.13) and (dst host 100.116.191.98)' -w rsp.cap
六、数据包超过MTU引发分包
MTU是IP层面的限制,一般都是1500字节。考虑到ip包头为20字节(ipv4),所以包体内容超过1480就会引发分包。注:对于ping操作器传输层为icmp,此时TCP Header应该是icmp的head,其长度为8字节。
(1)ping操作指定通过-s选项指定每次发送的字节数。这里指定为1473,则整个ip包的长度应该为1473+8+20=1501,显然是超过MTU了的。
ping 118.195.193.69 -s 1473
(2)抓取数据包
tcpdump -i eth1 dst host 118.195.193.69 -X -w ping.cap
(3)关于抓取的数据包各个字段含义参考 IP数据包详解。 非常符合预期。
第一分片数据包解析
第二分片数据包解析
七、过滤数据包
当数据包比较多的时候如何过滤刷选自己关注的数据包。
(1)筛选目标ip为xx的数据包
(1)在上述方框中输入过滤条件,绿色说明过滤条件正确。
(2)点击右侧应用的箭头即可进行过滤,过滤后如下。
(3)关于过滤语句,后续重点介绍。
(2)筛选目标ip为xx且协议是http的包
(3)筛选http请求中请求数据(主体)长度大于1M(1024*1024字节)的请求
注:我们下载的图片大小在1.4M左右!!
关于过滤语句:
1、根据ip过滤
#筛选源IP或者目的IP为9.136.13.191的数据包
ip.addr==9.136.13.191
#筛选源地址是9.136.13.191的数据包
ip.src_host==9.136.13.191
#筛选目的地址是9.136.13.191的数据包
ip.dst_host==9.136.13.191
2、根据端口过滤
#根据tcp端口过滤数据包(包括源端口和目的端口)
tcp.port==80
#根据tcp源端口过滤数据包
tcp.srcport==80
#根据tcp目的端口过滤数据包
tcp.dstport==80
#根据udp端口刷选数据包(包括源端口和目的端口)
udp.port==80
#根据udp源端口过滤数据包
udp.srcport==80
#根据udp目的端口过滤数据包
udp.dstport==80
3、根据网络协议过滤
注:常见的网络协议有 udp、tcp、dns、ip、ssl、http、ftp、arp、icmp、smtp、pop、telnet、ssh、rdp、sip 等
#筛选出http协议中的get请求的数据包
http.request.method==GET
注意: GET一定要大写。
4、组合条件过滤
#筛选出源 IP 地址是 192.168.3.77 且目的 IP 地址是 192.168.3.78 的数据包
ip.src_host == 192.168.3.77 && ip.dst_host == 192.168.3.78
#筛选出源 IP 地址是 192.168.3.77 或目的 IP 地址是 192.168.3.78 的数据包
ip.src_host == 192.168.3.77 || ip.dst_host == 192.168.3.78
#ip地址不是192.168.3.77的数据包
!(ip.addr == 192.168.3.77)
参见: Wireshark内容过滤方法_wireshark根据内容过滤-优快云博客
八、mac下wireshark抓取chrome浏览器的https请求
重要:wireshark是可以抓取https明文请求的(浏览器记录秘钥至文件,wireshark利用其进行解密)!!!!!!
(1)查找浏览器地址
sudo find / -iname "Google Chrome"
这里找到路径如下:
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
(2)启动chrome(需指定ssl-key-log的存储路劲)
chrome其从参数需要配置以下内容:
--ssl-key-log-file: 用于指定ssl-key-log的存储路径。注:设置ssl-key-log-file的作用是指定浏览器在访问SSL/TLS网站时将对应的秘钥保存到本地文件中,有了这个日志文件后wireshark就可以将报文进行解密了。
在mac终端执行如下指令,启动一个新的chrome。注:此处指定ssl-key-log-file为/tmp/.ssl-key.log
sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --ssl-key-log-file=/tmp/.ssl-key.log
执行上述命令后会开启一个全新的chrome,我们后续的操作都在这个全新的chrome进行。
(3)修改ssl-key-log的权限为777
sudo chmod 777 /tmp/.ssl-key.log
(4)启动wireshark并配置sslkeylog
Wireshark → Preferences → Protocals → TLS(老版本是SSL)
(5)抓包测试
直接点击左上角的鲨鱼头标识,开始抓包。
这里要抓http数据包,在filter处直接筛选http数据包(否则包太多了)。
然后在之前开启的浏览器里面打开会话记录页面,就可以看到wireshark中有很多对应http数据包的记录。
在wireshark中可以看到很多熟悉的接口。
选中一个数据包。右键→Follow → HTTP Stream 就可以看大这个完整的http请求及响应了。
Follow -> Follow Http stream 能重组TCP流,便于人工查看!!!
注:上述请求其实都是https请求,因为我们通过浏览器记录了秘钥文件所以wireshark才可以解密。
(6)经验证不记录秘钥果然是不行的
使用普通方式启动的浏览器且不配置wireshark的TLS,会发现包确实抓了很多但是完全看不到明文。