概述
今天
学习了下
抓包
工作的使用,写个文档
记录下
笔记
总结
。
Wireshark
介绍
wireshark是非常流行的网络封包分析软件,可以截取各种网络封包,显示网络封包的详细信息。
wireshark用处:
wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。
为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。
Wireshark
窗口
介绍
Wireshark
主要
分为这几个界面
1 Display Filter(显示
过滤器
), 用于过滤
2 Packet List Pane(封包
列表
),
显示捕获到的封包,有源地址和目标地址、端口号
。
3 Packet Details Pane(封包
详细信息
),
显示封包中的字段
4 Dissector Pane(16进制
数据
)
5 Miscellanous(地址栏等
其他
)
wireshark
两种过滤器
过滤器有:
捕捉过滤器
和
显示
过滤器
常用
的过滤表达式
1
协议
过滤
:
HTTP
、
TCP、UDP
、
rtsp
、
rtp
等等
2 IP过滤
ip.src == 192.168.1. 100
显示
源地址为
192.168.1.100
ip.dst == 192.168.1.200 显示
目标地址为
192.168.1.200
3
端口
过滤
tcp.port == 80 端口
为
80
的
tcp.srcport== 80 只显示tcp协议
的源端口为
80
的
udp.port eq 15000 udp端口
为
15000
tcp.port >= 1 and tcp.port <= 80 过滤
端口范围
4 HTTP模式
过滤
http.request.method == “Get” 只显示
端口范围
5
逻辑运算符为
AND / OR ,&& / ||
捕捉过滤器(CaptureFilters)
1.用于决定将什么样的信息记录在捕捉结果中
2.捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据
3.捕捉过滤器仅支持协议过滤
捕捉过滤器:
捕捉前依据协议的相关信息进行过滤设置
捕捉过滤器语法
Protocol(
协议
)
:
可能
值:
ip、arp
、
rarp
、
tcp
、udp
、
smtp
、
http
、
ftp
、
dns
、
icmp
、
…
Direction(
方向
)
:
可能
值:
stc、dst
、
src and dst
、
src or dst
如果没有
指明方向,则默认使用
“src or dst”作为
关键字
“host 10.2.2.2”与“src or dst host 10.2.2.2”等价
Host(s):
可能值
:
net
、
port
、
host、portrange
Logical Operations(逻辑运算):
可能只
:
not、and、 or
显示过滤器(DisplayFilters)
1.用于在捕捉结果中进行详细查找
2.用于过滤抓包数据,方便stream的追踪和排查
3.显示过滤器既支持协议过滤也支持内容过滤
显示过滤器:
对捕捉到的数据包依据协议或包的内容进行过滤
协议
过滤语法
例如:http.request.method == “POST” string1和string2是可选的。
依据协议过滤时,可直接通过协议来进行过滤,也能依据协议的属性值进行过滤。
按协议进行过滤:
snmp || dns || icmp 显示SNMP或DNS或ICMP封包。
按协议的属性值进行过滤:
ip.addr == 10.1.1.1 ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
ip.src == 10.230.0.0/16 显示来自10.230网段的封包。
tcp.port == 25 显示来源或目的TCP端口号为25的封包。
tcp.dstport == 25 显示目的TCP端口号为25的封包。
http.request.method== “POST” 显示post请求方式的http封包。
http.host == “tracker.1ting.com” 显示请求的域名为tracker.1ting.com的http封包。
tcp.flags.syn == 0X02 显示包含TCP SYN标志的封包。
内容
过滤语法
深度字符串匹配
tcp contains “http”
显示payload中包含”http”字符串的tcp封包。
http.request.uri contains “online”
显示请求的uri包含”online”的http封包。
特定偏移处值的过滤
tcp[20:3] == 47:45:54
/* 16进制形式,tcp头部一般是20字节,
所以这个是对payload
的前三个字节进行过滤
*/
http.host[0:4] == “trac”
包长度过滤
udp.length == 26
这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7
指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94
除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119
整个数据包长度,从eth开始到最后
过滤实例
mac过滤 IP过滤
M
ac 过滤
eth.dst == A0:00:00:04:C5:84
eth.src eq A0:00:00:04:C5:84
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
IP过滤
ip.addr == 10.43.54.65
// 常用的研究两者间的通信
ip.addr== 192.168.8.54 || ip.addr== 112.80.248.74
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65
tcp和udp过滤
tcp.port == 80
tcp.port eq 80 or udp.port eq 80
tcp.port eq 25 or icmp
tcp.port >= 1 and tcp.port <= 80
tcp.window_size == 0 && tcp.flags.reset != 1
udp.length == 26
tcp
类型和内容:
tcp[13] & 0
×
00 = 0: No flags set (null scan)
tcp[13] & 0
×
01 = 1: FIN set and ACK not set
tcp[13] & 0
×
03 = 3: SYN set and FIN set
tcp[13] & 0
×
05 = 5: RST set and FIN set
tcp[13] & 0
×
06 = 6: SYN set and RST set
tcp[13] & 0
×
08 = 8: PSH set and ACK not set
http过滤示例
http.request.method ==
“
GET
”
http.request.method ==
“
POST
”
http.request.uri ==
“
/img/logo-edu.gif
”
http.host == party.syyx.com
http.response.code == 404
http.content_type contains “javascript”
http contains
“
GET
”
http.request.method == “GET” && http contains “Host: ”
http.request.method == “GET” && http contains “User-Agent: ”
http.request.method == “POST” && http contains “Host: ”
http.request.method == “POST” && http contains “User-Agent: ”
http contains “HTTP/1.1 200 OK” && http contains “Content-Type: ”
http contains “HTTP/1.0 200 OK” && http contains “Content-Type: ”
以下内容摘抄自
:
http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
封包
列表
(Packet List Pane)
封包
列表的面板中显示:
编号、
时间戳、源地址、目标地址、协议、长度、以及封包信息
,
不同
的协议用了不同的颜色显示
,
也
可以自己修改这些显示的颜色规则,
view->coloring Rules
。
封标
列表如下图所示
封包详细
信息
(Packet Details pane)
这个
面板
是
我们最重要的。
用来
查看协议中的每一个字段
,
各行
信息如下
Frame: 物理层
的数据帧
概括
Ethernet ll : 数据链路层以太网帧头部信息
Internet Protocol Version 4 : 互联网
层
IP
包头部信息
Transmission Control protocol
:
传输
层
T
的数据头部信息
,此处是
TCP
Hypertext Transfer Protocol: 应用层
的信息
,
此处是
HTTP
协议
Wireshark
与
对应的
OSI
七层模型
TCP
包具体内容
从下图可以看到
wireshark
捕获到的
TCP
包中的每个字段。
实例
分析
TCP三次
握手过程
TCP报文格式
下面是TCP报文格式图
上图中有几个字段需要重点介绍下:
1、序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
2、确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效(Ack=Seq+1)。
3、标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方的Ack=发起方的Seq+1,两端配对。
三次握手过程为
这图我都看过很多遍了,
这次我们用
wireshark
实际分析下三次握手的过程。
打开
wireshark,
打开浏览器输入
http://www.cnblogs.com/tankxiao
在
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,
如下图
: