WireShark
Veni, vidi, vici! 我来,我见,我征服! ——Julius Caesar恺撒一世
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
简单使用
http:
tcp:
停止抓包后,我们可以选择抓取到的数据包。
文件—>另存为,然后就会保存为一个pcap格式的文件。
pcap文件格式
1.Pcap Header
文件头,每一个pcap文件只有一个文件头,总共占24(B)字节,以下是总共7个字段的含义。 Magic(4B):标记文件开始,并用来识别文件和字节顺序。值可以为0xa1b2c3d4或者0xd4c3b2a1,如果是0xa1b2c3d4表示是大端模式,按照原来的顺序一个字节一个字节的读,如果是0xd4c3b2a1表示小端模式,下面的字节都要交换顺序。现在的电脑大部分是小端模式。 Major(2B):当前文件的主要版本号,一般为0x0200 Minor(2B):当前文件的次要版本号,一般为0x0400 ThisZone(4B):当地的标准事件,如果用的是GMT则全零,一般全零 SigFigs(4B):时间戳的精度,一般为全零 SnapLen(4B):最大的存储长度,设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将值设置为65535 LinkType(4B):链路类型。解析数据包首先要判断它的LinkType,所以这个值很重要。一般的值为1,即以太网
2.Packet Header
数据包头可以有多个,每个数据包头后面都跟着真正的数据包。以下是Packet Header的4个字段含义
Timestamp(4B):时间戳高位,精确到seconds,这是Unix时间戳。捕获数据包的时间一般是根据这个值
Timestamp(4B):时间戳低位,能够精确到microseconds
Caplen(4B):当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
Len(4B):离线数据长度,网路中实际数据帧的长度,一般不大于Caplen,多数情况下和Caplen值一样
3.Packet Data
Packet是链路层的数据帧,长度就是Packet Header中定义的Caplen值,所以每个Packet Header后面都跟着Caplen长度的Packet Data。也就是说pcap文件并没有规定捕获的数据帧之间有什么间隔字符串。Packet数据帧部分的格式就是标准的网络协议格式了。
保存的pcap文件用010Editor打开如下图:
数据包的过滤
当我们选择抓取的网卡后,会抓取通过网卡的全部流量,但是绝大部分对我们的是没有用的,所以我们需要进行过滤,而过滤分为两种抓取时过滤和抓取后过滤
抓取时过滤
如下图是wireshark默认的过滤,我们可以从左下角添加自己需要的过滤
捕获—>选项,下图绿色表示语法没有问题
抓取后过滤
一般情况是抓完包再过滤的,在上方输入我们的语法
过滤策略:
1、过滤地址
ip.addr192.168.10.10 或 ip.addr eq 192.168.10.10 #过滤地址
ip.src192.168.10.10 #过滤源地址
ip.dst==192.168.10.10 #过滤目的地址
2、过滤协议,直接输入协议名
icmp
http
tcp
3、过滤协议和端口
tcp.port80
tcp.srcport80
tcp.dstport80
udp.port端口号
4、过滤http协议的请求方式
http.request.method==“GET”
http.request.method==“POST”
http.request.uri contains admin #url中包含admin的
http.request.code==404 #http请求状态码的
5、连接符
&&
||
and
or
6、通过连接符可以把上面的命令连接在一起,比如:
ip.src192.168.10.10 and http.request.method"POST"
数据流跟踪
我们的一个完整的数据流一般都是由很多个包组成的,所以,当我们想查看某一条数据包对应数据流时 鼠标右键—>跟踪流,选择TCP、UDP、SSL、HTTP,选择对应的流。
选择对应的跟踪流之后,会弹出该流的完整数据流,还有这个数据流中包含的数据包。这时wireshark顶部的过滤器就是这条流的过滤规则。