数据包分析(wireshark常用)

设置数据抓取选项

点击常用按钮中的设置按钮,就会弹出设置选项对话框。在这个对话框中我们可以选中需要监听的接口,设置混杂模式,设置抓取数据包的过滤条件。如下图:

注:设置了混杂模式,可以捕获局域网中所有的数据包。

Wireshark与对应的OSI七层模型

从下图可以看到wireshark捕获到的TCP包中的每个字段

调整时间格式

常用应用显示过滤器:

snmp || dns || icmp                      //显示SNMP或DNS或ICMP封包。 
ip.addr == 10.1.1.1                       //显示来源或目的IP地址为10.1.1.1的封包。
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6                                  //显示来源不是10.1.2.3或者目的不是10.4.5.6的包。
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6                            //显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。
tcp.port == 25                                                                     //显示所有TCP端口号为25的封包。 
tcp.dstport == 25                                                               //显示目的TCP端口号为25的封包。 
tcp.flags                                                                             //显示包含TCP标志的封包。 
tcp.flags.syn == 0×02                                                        //显示包含TCP SYN标志的封包。
ip.addr==10.15.8.34 and ip.addr==19.18.16.5 and tcp.port==443         //https二端过程
如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。

过滤源ip、目的ip:查找目的地址为192.168.101.8的包,ip.dst==192.168.101.8;查找源地址为ip.src==1.1.1.1
协议过滤:直接输入协议名即可,如过滤HTTP的协议
http模式过滤:如过滤get包,http.request.method=="GET",过滤post包,http.request.method=="POST"
连接符and的使用:如过滤ip为192.168.101.8并且为http协议的,ip.src==192.168.101.8 and http                           // ip.src==10.112.21.1 and tcp.port==443 

以上只是抓包和简单的过滤,那么其实如果你要想达到能够分析这些网络包的要求时,还需要了解下一些数据包的标记,比如我们常说的TCP三次握手

三次握手Three-way Handshake
一个虚拟连接的建立是通过三次握手来实现的
1. (Client) –> [SYN] –> (Server)
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机
2. (Client) <[SYN/ACK] <(Server)
 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
3. (Client)> [ACK] > (Server)
第三次握手:主机A收到后检查ack number是否正确,(即第一次发送的seq number+1,以及位码ack是否为1)  若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。 至此,三次握手完成,一个TCP连接完成。
Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。

四次握手Four-way Handshake
四次握手用来关闭已建立的TCP连接

1. (Client) –> ACK/FIN –> (Server)
2. (Client) <– ACK <– (Server)
3. (Client) <– ACK/FIN <– (Server)
4. (Client) –> ACK –> (Server)
注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包.然而, 由于连接还没有关闭, FIN包总是打上ACK标记.
没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。

连接复位Resetting a connection

四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送.
注意:由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记

无效的TCP标记Invalid TCP Flags

常见标记符小结:
SYN:同步请求
ACK:确认
FIN:终结(连接关闭)
RST:连接重置
PSH (Push):有 DATA数据传输
URG (Urgent):紧急
Sequence number:顺序号码
Acknowledge number:确认号码


UDP (用户数据包协议User Datagram Protocol)

UDP没有对接受进行确认的标记和确认机制。对丢包的处理是在应用层来完成的。(or accidental arrival).
此处需要重点注意的事情是:在正常情况下,当UDP包到达一个关闭的端口时,会返回一个UDP复位包。由于UDP是非面向连接的, 因此没有任何确认信息来确认包是否正确到达目的地。因此如果你的防火墙丢弃UDP包,它会开放所有的UDP端口(?)。
由于Internet上正常情况下一些包将被丢弃,甚至某些发往已关闭端口(非防火墙的)的UDP包将不会到达目的,它们将返回一个复位UDP包。
因为这个原因,UDP端口扫描总是不精确、不可靠的。
看起来大UDP包的碎片是常见的DOS (Denial of Service)攻击的常见形式

ICMP (网间控制消息协议Internet Control Message Protocol)
如同名字一样, ICMP用来在主机/路由器之间传递控制信息的协议。 ICMP包可以包含诊断信息(ping, traceroute - 注意目前unix系统中的traceroute用UDP包而不是ICMP),错误信息(网络/主机/端口 不可达 network/host/port unreachable), 信息(时间戳timestamp, 地址掩码address mask request, etc.),或控制信息 (source quench, redirect, etc.) 。
尽管ICMP通常是无害的,还是有些类型的ICMP信息需要丢弃。
Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用来转发通讯。
Echo (8), Timestamp (13) and Address Mask Request (17) 能用来分别判断主机是否起来,本地时间 和地址掩码。注意它们是和返回的信息类别有关的。 它们自己本身是不能被利用的,但它们泄露出的信息对攻击者是有用的。
ICMP消息有时也被用来作为DOS攻击的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>
包碎片注意A Note About Packet Fragmentation
如果一个包的大小超过了TCP的最大段长度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),能够把此包发往目的的唯一方法是把此包分片。由于包分片是正常的,它可以被利用来做恶意的攻击。
因为分片的包的第一个分片包含一个包头,若没有包分片的重组功能,包过滤器不可能检测附加的包分片。典型的攻击Typical attacks involve in overlapping the packet data in which packet header is 典型的攻击Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能作为 DOS 攻击的一部分,它可以crash older IP stacks 或涨死CPU连接能力。

--------------------------------------------------------

数据链路层:
筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26

网络层:
筛选ip地址为192.168.1.1的数据包----ip.addr == 192.168.1.1
筛选192.168.1.0网段的数据---- ip contains “192.168.1”
筛选192.168.1.1和192.168.1.2之间的数据包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
筛选从192.168.1.1到192.168.1.2的数据包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
IP源地址----ip.src 192.168.1.1
IP目的地址----ip.dst 192.168.1.1

传输层:
筛选tcp协议的数据包----tcp
筛选除tcp协议以外的数据包----!tcp
筛选端口为80的数据包----tcp.port == 80
筛选12345端口和80端口之间的数据包----tcp.port == 12345 && tcp.port == 80
筛选从12345端口到80端口的数据包----tcp.srcport == 12345 && tcp.dstport == 8TCP端口:tcp.port==80
TCP目的端口----tcp.dstport == 80
TCP源端口----tcp.srcport == 80
UDP端口----udp.port eq 15000
TCP 1-80之间的端口----tcp.port >= 1 and tcp.port <= 800

应用层:
特别说明----http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
筛选url中包含.php的http数据包----http.request.uri contains “.php”
筛选内容包含username的http数据包----http contains “username”
http.request.method==”POST”
|| 满足其中一个条件
&& 两个条件都满足

猜你喜欢

转载自blog.csdn.net/wailaizhu/article/details/112359268