Wireshark抓包使用
学习视频:https://www.bilibili.com/video/BV1Kr4y1k7S8/?p=33&vd_source=ba19aa8fc2195a583f80ad6924aa176c
一、Wireshark抓包使用
1、打开看波浪连续的点进入(这个是选择网卡的过程)
当你的机器上有多块网卡的时候,你需要选择一个网卡。点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。然后点击"Start"按钮, 开始抓包
2、输入请求命令,点击绿色
http.request.method=="POST" (前端界面接口抓包或者app接口抓包)
二、Wireshark 窗口介绍
1:显示过滤器( Display Filter) 2:封包列表(Packet List Pane) 3:封包详细信息(Packet Details Pane)
4、十六进制数据 5:地址栏
三、Wireshark 窗口介绍详细信息
1、过滤器过滤方式
过滤器有两种:
一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录
一种是捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录。 在Capture -> Capture Filters 中设置保存过滤
在Filter栏上,填好Filter的表达式后,点击Save按钮, 取个名字。比如"Filter 102",
Filter栏上就多了个"Filter 102" 的按钮。
1. 协议过滤
比如TCP(udp),只显示TCP协议。
2. IP 过滤
比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102
ip.dst==192.168.1.102, 目标地址为192.168.1.102
ip.addr==192.168.1.102 IP 过滤
3. tcp端口过滤
tcp.port ==80, 端口为80的
tcp.srcport == 80, 只显示TCP协议的源端口为80的。
tcp.dstport == 80, 只显示TCP协议的目的愿端口为80的。
4. Http模式过滤
http.request.method=="GET", 只显示HTTP GET方法的。(linux下curl www.baidu.com)
http.request.method=="POST" 只显示HTTP POST方法
(配合linux命令抓包:curl --data "mobilephone=15577972158&pwd=123456" http://oldapi.lemonban.com/futureloan/mvc/api/member/login或者网页访问地址)
5. 逻辑运算符为 AND/ OR
ip.src==192.168.3.101 and http.request.method=="POST"
ip.src==192.168.3.101 and tcp.port==80 and http(linux下操作命令:wget 110.242.68.3:80)
2、Packet List Pane(封包列表)
显示捕获到的封包, 显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。你也可以修改这些显示颜色的规则, View ->Coloring Rules.颜色规则详细:?
3、Packet Details Pane(封包详细信息), 显示封包中的字段
1)Frame: 物理层的数据帧概况
2)Ethernet II: 数据链路层以太网帧头部信息
ip.src==192.168.3.101 and tcp.port==80 and http( wget 110.242.68.3:80 )
cat /proc/net/arp 查看连接到本机的远端ip的mac地址
3)Internet Protocol Version 4: 互联网层IP包头部信息
1、IP协议格式
20个字节
4)user Datagram protocol(UDp协议传输层)
udp协议格式: 造数据,:https://jingyan.baidu.com/article/a681b0de52b7d43b1843468b.html
4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
tcp协议格式:
5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
TCP包的具体内容
从下图可以看到wireshark捕获到的TCP包中的每个字段
4. Dissector Pane(16进制数据)
三次握手
看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例
1)三次握手过程为
(SYN->SYN+ACK->ACK)
1、第一次握手:客户端给服务器发送一个 SYN (syn=1,seq=0)报文。
2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK (ack=seq+1=0+1=1)报文。
3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK( ACK=1,seq=1) 报文。
4、服务器收到 ACK 报文之后,三次握手建立完成。
2)windows下抓取三次握手报文:
打开WireShark:过滤条件http,访问网页输入:http://www.xitongcheng.com/jiaocheng/xtazjc_article_32713.html,抓包完毕,找get请求:GET /jiaocheng 找到目录地址,就是访问服务器的地址为39.91.182.41 。
抓取tcp三次握手:将IP的源地址和目标地址,都设置为HTTP服务器的IP:ip.dst==39.91.182.41 or ip.src==39.91.182.41
3) liunx下安装WireShark抓取的三次握手 ,ftp之前实现的tcp三次握手:(本机连接linux的过程)
4) window下WireShark 查看linux 下抓包的报文,需要在linxu打包.cap,.导入分析
1、linux 下 tcpdump -i ens33 port 80 -w a.cap(wget 110.242.68.4:80) 抓取包,windos下WireShark 查看linux 下抓包的报文
5)三次挥手作用是为了确认双方的接收与发送能力是否正常。 抓取报文如下:
打开wireshark, 打开浏览器输入 http://www.cr173.com(参考抓包详解:https://www.elecfans.com/tongxin/202305102078165.html)
在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream",
这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图
图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。
第一次握手数据包
客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图
第二次握手的数据包
服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图
第三次握手的数据包
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:
就这样通过了TCP三次握手,建立了连接
四次挥手
4次挥手过程:别名连接终止协议
1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号(FIN=1,seq=0 )。此时客户端处于FIN_WAIT1(终止等待)状态。
2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值(ack=seq+1=1),表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT(关闭状态)状态。
3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文(fin=1,ack=seq+1=1,seq=0),且指定一个序列号。此时服务端处于 LAST_ACK(最后确认) 的状态。
4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值(ack=1,seq=1),此时客户端处于 TIME_WAIT(等待2s) 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态
5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
应用程序关闭,然后启动,不能马上启动起来,原因端口没有马上释放?
5. Miscellanous(地址栏,杂项)