wireshark初学者使用
介绍
Wireshark是一款网络封包分析软件,截取网络封包,显示其封包的详细信息。日常工作中用的比较多。在使用wireshark之前须了解常用的网络协议。如:tcp,http,ip,udp等。(其实这篇文章是用来给应届生培训的,入门级简单使用),以下图都是从网上找的,感觉很有用
一、wireshark的安装
下载地址:http://www.wireshark.org/ (官方网站有windows64位和32位的下载包)
安装简单,默认选项,直接下一步下一步就可以。
wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,所以在开始抓包之前需要先选择网卡,上图红色框中。
二、抓包过程
1、Capture Filter:捕获过滤器,写抓包规则,用于决定将什么样的信息记录在捕捉结果中,需在捕捉前设置。
语法:protocol+direction+host(s)+value+logical operation 即:
协议+src/dst+net/port/host+value+not/and/or
例:ip src host 192.168.31.231 捕捉来源IP为192.168.31.231的封包
tcp dst port 3182 捕捉目的端口为3182的tcp封包
2、Display Filter:显示过滤器。在捕捉结果中查找封包。
语法:protocol.string1.string2+comparison operator+value+logical operations+other expression
即:协议.协议的子类+比较运算符+value+逻辑运算符
例:snmp||dns||icmp 显示snmp或者dns或者icmp的封包
Ip.addre==192.168.31.132 显示来源或目的ip为192.168.31.132的封包
可参照链接:https://www.cnblogs.com/bigben0123/p/5019078.html使用
逻辑运算符:
英文 |
C语言 |
含义 |
and |
&& |
与 |
or |
|| |
或 |
xor |
^^ |
异或 |
not |
! |
非 |
比较运算符:
英文 |
C语言 |
含义 |
eq |
== |
等于 |
he |
!= |
不等于 |
gt |
> |
大于 |
it |
< |
小于 |
ge |
>= |
大于等于 |
le |
<= |
小于等于 |
点击Expression可以查看支持哪些协议和协议的子类。
三、包分析
1、窗口介绍:
封包详细信息面板介绍:该模块是按照网络层协议来展示
Frame: 物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
①第一层物理层的数据帧概况
Frame 1 (62 bytes on wire, 62 bytes captured) 1号帧,线路62字节,实际捕获62字节
Arrival Time: Jan 21, 2018 15:17:33.910261000 捕获日期和时间
[Time delta from previous packet:0.00000 seconds]此包与前一包的时间间隔
[Time since reference or first frame: 0.00 seconds]此包与第1帧的间隔时间
Frame Number: 1 帧序号
Packet Length: 62 bytes 帧长度
Capture Length: 62 bytes 捕获长度
[Frame is marked: False] 此帧是否做了标记:否
[Protocols in frame: eth:ip:tcp] 帧内封装的协议层次结构
[Coloring Rule Name: HTTP] 用不同颜色染色标记的协议名称:HTTP
[Coloring Rule String: http || tcp.port == 80] 染色显示规则的字符串:
② 第二层数据链路层以太网帧头部信息
Ethernet II, Src: AcerTech_5b:d4:61 (00:00:e2:5b:d4:61), Dst: Jetcell_e5:1d:0a (00:d0:2b:e5:1d:0a) 以太网协议版本II,源地址:厂名_序号(网卡地址),目的:厂名_序号(网卡地址)
Destination: Jetcell_e5:1d:0a (00:d0:2b:e5:1d:0a) 目的:厂名_序号(网卡地址)
Source: AcerTech_5b:d4:61 (00:00:e2:5b:d4:61) 源:厂名_序号(网卡地址)
Type: IP (0x0800) 帧内封装的上层协议类型为IP(十六进制码0800)
③第三层网层IP包头部信息
Internet Protocol, Src: 202.203.44.225 (202.203.44.225), Dst: 202.203.208.32 (202.203.208.32) 互联网协议,源IP地址,目的IP地址
Version: 4 互联网协议IPv4
Header length: 20 bytes IP包头部长度
Differentiated Services Field:0x00(DSCP 0x00:Default;ECN:0x00)差分服务字段
Total Length: 48 IP包的总长度
Identification:0x8360 (33632) 标志字段
Flags: 标记字段(在路由传输时,是否允许将此IP包分段
Fragment offset: 0 分段偏移量(将一个IP包分段后传输时,本段的标识)
Time to live :128 生存期TTL
Protocol: TCP (0x06) 此包内封装的上层协议为TCP
Header checksum: 0xe4ce [correct] 头部数据的校验和
Source: 202.203.44.225 (202.203.44.225) 源IP地址
Destination: 202.203.208.32 (202.203.208.32) 目的IP地址
④传输层TCP数据段头部信息
Transmission Control Protocol, Src Port: 2764 (2764), Dst Port: http (80), Seq: 0, Len: 0 传输控制协议TCP的内容
Source port: 2764 (2764) 源端口名称(端口号)
Destination port: http (80) 目的端口名http(端口号80)
Sequence number: 0 (relative sequence number) 序列号(相对序列号)
Header length: 28bytes 头部长度
Flags: 0x02 (SYN) TCP标记字段(本字段是SYN,是请求建立TCP连接)
Window size: 65535 流量控制的窗口大小
Checksum: 0xf73b [correct] TCP数据段的校验和
Options: (8bytes) 可选项
例:tcp3次握手抓包分析
Tcp连接的建立:1、客户端向服务器申请打开一个端口,用SYN=1 seq=X的tcp报文
2、服务器发回一个ACK=x+1 SYN=1 seq=Y的报文通知客户端请求报文收到
3、客户端收到确认报文后向服务器再次发出确认报文,ACK=Y+1 seq=Z,连接建立成功
注: X,Y,Z为序列号
抓包:下图圈起来的为一个完整的tcp3次握手
第一次握手:标志位为SYN,发送序列号seq=0
第二次握手:标志位为:SYN,ACK 确认序号seq=0 ack=1
第三次握手:标志位为:ACK 确认序号与发送序号都为1 连接建立
可在Statistics-Flow Graph-TCP flow查看TCP数据流,分析确认号与序列号的变化
四、IP协议头结构
-
4位版本号:IP协议(IPv4)版本号位4
-
4位头部长度:标识头部有多少个4字节,即最大共15*4个字节
-
8位服务类型:包含一个4位优先权字段:最小延时,最大吞吐量,最高可靠性和最小费用。
-
16位总长度:表示整个IP数据报的长度,最大表示65535,但由于MTU限制,一般无法到达这个值。
-
16位标识:唯一的标识数据报。系统采用加1的式边发送边赋值。
-
3位标识(保留,DF禁止分片,MF更多分片):所以这个标志是为分片存在,DF设置时禁止分片所以如果数据报太大则发送失败。MF设置时,如果产生分片,除了最后一个分片,其他此片置1。
-
13位分片偏移:分片相对原始IP数据报开始处的偏移。
-
8位生存时间(TTL):数据报到达目的地之前允许经过的路由跳跳数。跳一下减1,得0丢弃。
-
8位协议:用来区分上层协议(ICMP为1,TCP为6,UDP为17)。
-
16位头部校验和:仅以CRC算法检验数据报头部在传输过程中是否损坏。
-
32位源端口IP地址和目的端口地址很明白。
-
选项(可变长):记录路由,告诉途径得所有路由把IP填进来。 时间戳,告诉每个路由器都将数据报被转发的时间传进来。松散路由选择,指定一个路由器IP地址列表,必须按这个表发送,严格路由选择,数据报经过路由表。
注:1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit) IP头长20B=20byte
四、TCP协议头结构
-
16位源端口号和16位目的端口号。
-
32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
-
32位确认号:用来响应TCP报文段,给收到的TCP报文段的序号加1,三握时还要携带自己的序号。
-
4位头部长度:标识该TCP头部有多少个4字节,共表示最长15*4=60字节。同IP头部。
-
6位保留。6位标志。URG(紧急指针是否有效)ACK(表示确认号是否有效)PSH(提示接收端应用程序应该立即从TCP接收缓冲区读走数据)RST(表示要求对方重新建立连接)SYN(表示请求建立一个连接)FIN(表示通知对方本端要关闭连接)
-
16位窗口大小:TCP流量控制的一个手段,用来告诉对端TCP缓冲区还能容纳多少字节。
-
16位校验和:由发送端填充,接收端对报文段执行CRC算法以检验TCP报文段在传输中是否损坏。
-
16位紧急指针:一个正的偏移量,它和序号段的值相加表示最后一个紧急数据的下一字节的序号。
-
Stream index:40 是根据ip端口 目的和源转换过来的索引
到此:这篇文章就算结束了,相对来说这篇文章包含内容很多,最重要的在于通过分析数据包,进行TCP/IP协议的学习,理解网络层等。作者能力有限,技术无限,学习不止于眼前的资料,在于扩展。。。