Wireshark过滤器的使用

    3、捕获过滤器的使用
    点击"捕获(C)-->选项(O)-->Input-->Capture filter for selected interfaces:",输入下面的内容(基于伯克利数据包过滤器的语法来配置抓包过滤器,伯克利数据包过滤器BPF只对文本框的过滤器进行语法检查,不会检查其条件是否正确;如果输入后的文本框颜色变红,表示不通过BPF编译器的检查;如果颜色变绿,表示通过BPF编译器的检查)
    附:过滤表达式的限定符一般有3种:
    type(类型):标识符(其形式为名称或数字)所指代的事物。例如:主机或主机地址标识符指代的host,TCP/UDP端口号标识符指代的port限定符
    dir(方向):指明了发往和/或来自某个标识符(所指代的主机)的数据包的具体流动方向。例如:src和dst分别表示数据包来源于/发往某个标识符(所指代的主机)
    proto(协议类型):精确指明了数据包所匹配的协议类型。例如:ip和arp分别用来指明以太网帧、IP数据包和ARP帧
      3.1捕获单个IP地址
      host 192.168.1.1                        //所有与主机192.168.1.1相关的流量
      host 192.168.1.1 or host  192.168.1.2   //所有与主机192.168.1.1或192.168.1.2相关的流量
      src host 192.168.1.1                    //所有从主机192.168.1.1始发的流量
      src host 192.168.1.1 && dst port 80     //源地址为192.168.1.1,目的端口为80的流量
      src 192.168.1.1 and port 21   /         /所有从192.168.1.1并且TCP端口21相关的流量
      dst host 192.168.1.1                    //所有去往主机192.168.1.1的流量
      not src host 192.168.1.1  /             /所有并非由主机192.168.1.1始发的流量
      host wwww.baidu.com                     //所有去往baidu ip地址或者来自baidu ip地址的流量
      3.2捕获IP地址范围
      net 192.168.0.0/24                    //192.168.0.0网络中任何主机的数据
      net 192.168.0.0 mask 255.255.255.0    //192.168.0.0网络中任何主机的数据
      ip6 net 2406:da00:ff00::/64           //2406:da00:ff00:00000(ipv6)网络中任何主机的数据
      not dst net 192.168.0.0/24            //目的ip是192.168.0.0网络外的所有数据
      dst net 192.168.0.0/24                //目的地址是192.168.0.0网络中的所有数据
      src net 192.168.0.0/24                //源地址是192.168.0.0网络中的所有数据
      src net 192.168.0.0 mask 255.255.255.0    //源地址是192.168.0.0网络中的所有数据(对IPv6流量无效)
      dst net 192.168.0.0 mask 255.255.255.0    //目的地址是192.168.0.0网络中的所有数据(对IPv6流量无效)
      3.3捕获广播或多播地址
      !broadcast                            //不要抓取广播包
      broadcast                             //只抓取广播包
      multicast                             //只抓取多播包
      ip broadcast                          //255.255.255.255的数据
      ip multicast                          //224.0.0.0-239.255.255.255的数据
      ip proto              //只抓取IP包头的协议类型字段值等于特定值(等于由标识符proto所指明的protocol code [协议代码]值)的数据包。IP数据包的种类繁多,随IP包头的协议类型字段值而异,比如,TCP数据包(协议类型字段值为6)、UDP数据包(协议类型字段值为17)和ICMP数据包(协议类型字段值为1)等
      ip6 proto                  //只抓取IPv6主包头中下一个包头字段值等于特定值(等于由标识符proto所指明的protocol值)的IPv6数据包。请注意,无法使用该原词根据IPv6扩展包头链中的相关字段值来执行过滤
      dst host ff02::1                      //所有主机到ipV6多播地址的数据
      3.4捕获MAC地址
      ether host 00:88:ca:86:f8:0d         //所有与00:88:ca:86:f8:0d主机的MAC地址相关的数据
      ether src host 00:88:ca:86:f8:0d     //来自与00:88:ca:86:f8:0d主机的MAC地址相关的数据
      ether dst host 00:88:ca:86:f8:0d     //到达与00:88:ca:86:f8:0d主机的MAC地址相关的数据
      not ether host 00:88:ca:86:f8:0d     //除了与00:88:ca:86:f8:0d主机的任何MAC地址相关的数据
      3.5捕获所有端口号
      port 8080                //所有与8080端口相关的流量
      src port 53              //所有由端口53始发的流量
      dst port 21              //所有去往端口21的流量
      tcp                      //所有TCP流量
      tcp or udp               //所有TCP流量或者UDP流量
      tcp port 21              //端口号21的TCP数据
      portrange 1-80           //端口号1-80的TCP/UDP数据
      tcp portrange 1-80       //端口号1-80的TCP数据
      tcp src portrange 1-80   //源端口号1-80的TCP数据
      tcp dst portrange 1-80   //目的端口号1-80的TCP数据
      udp src portrange 1-80   //源端口号1-80的UDP数据
      udp dst portrange 1-80   //目的端口号1-80的UDP数据
      not port 21 and not port 22  //所有既与端口21无关,也与端口22无关的流量
      tcp[13]=2               //仅抓取TCP SYN标记数据包
      tcp[13]=18              //仅抓取TCP SYN/ACK标记数据包
      tcp[13]=32              //仅抓取TCP URG标记设置数据包
      3.6捕获特定ICMP数据
      icmp                    //所有ICMP数据包
      icmp [0]=0              //ICMP回送应答数据包
      icmp [0]=3              //ICMP目标不可达数据包
      icmp [0]=4              //ICMP原点抑制数据包
      icmp [0]=5              //ICMP重定向或改变路由数据包
      icmp [0]=8              //ICMP回送请求(Echo Request)数据包
      icmp [0]=9              //ICMP路由器公告数据包
      icmp [0]=10             //ICMP路由器请求数据包
      icmp [0]=11             //ICMP超时数据包
      icmp [0]=12             //ICMP参数问题数据包
      icmp [0]=13             //ICMP时间戮请求数据包
      icmp [0]=14             //ICMP时间戮回答数据包
      icmp [0]=17             //ICMP地址子网请求(Address Mask Request)数据包
      icmp [0]=18             //ICMP地址子网应答数据包
      icmp [0:1]=8            //ICMP响应数据包
      icmp [0:1]=3            //ICMP目的主机不可达数据包
      gateway          //让Wireshark只抓取穿host而过的流量。标识符gateway所指定的host必须为主机名称,且必须同时在某种Hostname-to-IP address解析机制(比如,主机名文件、DNS或NIS等)以及Hostname-to-Ethernet address解析机制(比如,etc/ethers文件等)里“登记在案”。也就是说,该过滤器一经配置,Wireshark所抓流量的源或目的MAC地址一定为标识符gateway所指定的host的MAC地址,但源/目的IP地址绝不会是标识符gateway所指定的host的IP地址。
      3.7 特定长度的IP数据包
      proto[offset:bytes],其中offset是指从协议头部的第几个字开始检查,byte是指所要检查的字节数,例如:tcp[8:2]是指检查TCP头部的第9个,第10个两个字节
      proto[bytes],从协议头部的第几个字节开始检查,例如:ip[8]是检查IP包头的第9个字节
      ip[2:2]==      //抓取特定长度的IP数据包(IP包头的第3、第4字节为IP包总长度字段,number表示IP包总长度字段值)
      ip[8]==       //抓取具有特定TTL(生存时间)的IP数据包(IP包头的第9字节为TTL字段,number表示TTL字段值)
      ip[9]==       //抓取指定协议类型的IP数据包(IP包头的第10字节为协议类型字段,number表示协议类型字段值)
      ip[12:4]==ip[16:4]    //表示数据包的源和目的IP地址相同(IP包头的第13至第16字节为源IP地址字段,第17至第20字节为目的IP地址字段),例如:ip[12:4]==192.168.1.1,目的IP地址字段值=192.168.1.1
      3.8 TCP标记筛选数据包tcp[tcpflags]
      tcp-urg               //紧急指针位置1的TCP数据包
      tcp-rst               //RESET标记位置1的TCP数据包
      tcp-ack               //ACK标记位置1的TCP数据包
      tcp-syn               //SYN标记位置1的TCP数据包
      tcp-psh               //PUSH标记位置1的TCP数据包
      tcp-fin               //fin位置1的TCP数据包
      less         //抓取不长于标识识less所指定的长度的数据包,例:less 20
      greater       //抓取不短于标识识less所指定的长度的数据包,例:greater 60
   示例
      ■只抓所有用来发起(SYN标记位置1)或(FIN标记位置1)TCP连接的数据包(TCP连接属于全双工连接,客户端与服务器之间会建立双向连接),过滤器配置如下:tcp[tcpflags]&(tcp-syn|tcp-fin)!=0
      ■只抓所有RST标记位置1的TCP数据包,过滤器配置如下:tcp[tcpflags]&(tcp-rst)!=0
   注意:
      →!或 not
      →&& 或 and
      →|| 或 or
      以下按位运算符
      →& 用来执行"位与"运算
      →| 用来执行"位或"运算
      →上面的过滤器配置使用&而不是&&,因为&,与运算按位而不是按整个字段来执行;
      →将"!="改为"==",tcp[tcpflags]&(tcp-rst)==1,将抓不到任何数据包,因为Wireshark用11111111与所抓TCP报文段的标记字段值执行"位与"运算,并检查结果是否为1。RST标记位置1的TCP报文段的标记字段值为00000010,因为,00000010与11111111执行"位与"计算的结果为00000010,并不等于1
      3.9 在某些反常情况下使用
      tcp[13] & 0x00=0     //抓取所有标记都未置1的TCP流量(在怀疑遭受扫描[nullscan]攻击时使用)
      tcp[13] & 0x01=1     //抓取FIN位置1但ACK位置0的TCP流量
      tcp[13] & 0x03=3     //抓取SYN和FIN位同时置1的TCP流量
      tcp[13] & 0x05=5     //抓取RST和FIN位同时置1的TCP流量
      tcp[13] & 0x06=6     //抓取SYN和RST位同时置1的TCP流量
      tcp[13] & 0x08=8     //抓取PSH位置1但ACK位置0的TCP流量
    注意:
       →tcp[13]所含数字13指代的是TCP头部中的"标记"字段(自TCP头部的起始处偏移13个字节),而"="后面的1、3、5等数字表示的是标记字段中各TCP标记位的置位情况

URG(urgent 紧急)
ACK(Acknowledge number确认号码)
PSH(push 传送)
RST(reset 重置)
SYN(synchronous 建立联机)
FIN(finish 结束)
ACK(acknowledgement 确认)
Sequence number(顺序号码)


      以下是经常用到的结构化抓包过滤器
      →not broadcast and not multicast  //只抓取单播数据包
      →host www.baidu.com and port 80   //只抓往来于www.baidu.com站点的HTTP流量
      →tcp  port 23 and host 192.180.1.1  //只抓往来于192.180.1.1的telnet流量
      →tcp  port 23 and not src host 192.180.1.1  //抓取所有telnet流量,但由主机192.180.1.1发起的除外
      →((tcp) and (port 80) and ((dst host 216.58.209.68) or (dst host 216.28.209.69)))   //抓取所有访问服务器216.58.209.68和216.58.209.69的80端口的流量(HTTP流量)
      →tcp[2:2]>50 and tcp[2:2]<100     //抓取端口范围50-100的TCP数据包
      →tcp[14:2]<8192                   //抓取窗口大小字段低于8192的TCP数据包
      →port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x474554 //抓取HTTP的Get信息,其中(tcp[12:1] & 0xf0) >> 2 指明了TCP头部的长度,解析:先筛选出目的端口号为80的TCP报文段,再检查TCP净载的头三个字节是否分别精确匹配0x47、0x45、0x54,即那三个字节在Wireshark的数据包内容区域里是不是分别以G、E、T的面目示人(对应于HTTP GET命令)
      →tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) -((tcp[12]&0xf0)>>2))!=0)  //只抓取TCP源或目的端口号均为80的HTTP流量(源或目的端口号均为80,且只包含HTTP数据的TCP流量,也就是这批数据包的TCP头部的SYN位、FIN位或ACK位中,有且只有1位置1)
      →tcp[tcpflags] & (tcp-syn|tcp-fin) !=0 and not net   //抓取各条TCP会话中的首尾2个数据包,且这些数据包的源和目的IP地址均不隶属于抓包主机所在IP子网,执行时有误
      →ether[0] & 1 =0 and ip[16]>=224     //抓取以非以太网封闭方式发送的IP多播或广播数据包
      →icmp [icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply   //抓取所有类型的ICMP数据包,但ICMP echo reply和echo request数据包除外(即抓取所有ICMP流量,但由IP ping程序生成的流量除外,注意,并不是只有执行ping命令才能生成ICMP echo reply和echo request数据包,执行traceroute等操作也有可能会生成这两种类型的数据包)
      3.10 点击"捕获(C)-->选项(O)-->选项-->Display Options,可以勾选以下选项:
      Update list of packet in real-time:默认勾选,Wireshark抓包主窗口将会实时显示抓取到所有数据包
      Automatically scroll during live Capture:默认勾选,Wireshark抓包主窗口会在实时显示数据包时自动滚屏
      Reslove MAC adress:默认勾选,Wireshark在显示数据时,将MAC地址中的网络设备制造商ID(Vendor ID)解析为相对应的厂商(网络设置制造商)(查询安装目录下的manuf文件)
      Reslove network name:如果勾选,Wireshark在显示数据时,将IP地址解析为相对应的DNS名称(名称解析功能还存在某些不足,虽然Wireshark能缓存DNS名称,但解析IP地址会有一个DNS转换的过程,可能会拖慢抓包的速度,该过程本身也会生成额外的DNS查询和响应消息,在抓包文件中自然可以看见与之相对应的数据包,名称解析失败的概率很高)
      Reslove transport names:如果勾选,Wireshark在显示数据时,将第四层协议端口号解析为相对应的应用程序名称(比如,将TCP端口号为80解析并显示为HTTP,将UDP端口号25解析并显示为SMTP....)
      3.11 但凡IPv4多播流量,其以太网帧的目的MAC地址必以01:00:5e开头。目的MAC地址以01:00:5e打头的所有以太网帧都将被视为以太网多播帧
          但凡IPv6多播流量,其以太网帧的目的MAC地址必以33:33开头。目的MAC地址以33:33打头的所有以太网帧都将被视为以太网多播帧
       以太网类型所指为以太网帧头的ETHER-TYPE字段,其值用来表示由以太网帧帧头所封装的高层协议流量的协议类型。若ETHER-TYPE字段值为0x0800、0x86dd以及0x0806,则以太网帧帧头所封装的分别是IPv4、IPv6、以及ARP流量


4、应用显示过滤器
4.1协议过滤器
arp                     //显示所有ARP流量,包括免费ARP、ARP请求和ARP应答
ip                      //显示所有ipv4流量,包括有ipv4头部嵌入式的包(如ICMP目标不可达的数据包,返回到ICMP头后进入到ipv4头部)
ipv6                    //显示所有ipv6流量,包括ipv4包和有ipv6头部嵌入式的包
tcp                     //显示所有基于TCP的流量数据
4.2应用过滤器
bootp                   //显示所有DHCP流量(基于BOOTP)
dns                     //显示所有DNS流量,包括基于TCP传输和UDP的DNS请求和响应
tftp                    //显示所有tftp流量
icmp                    //显示所有icmp流量
http                    //显示所有http命令、响应和数据传输包,但是不显示TCP握手包、TCP确认包或TCP断开连接的包
4.3字段存在过滤器
bootp.option.hostname    //显示所有DHCP流量,包含主机名(DHCP是基于BOOTP)
http.host                //显示所有包含有HTTP主机名字段的HTTP包,该包通常是由客户端发送给一个web服务器的请求
ftp.request.command      //显示所有ftp命令数据,如user、pass或RETR命令
4.4特有过滤器
tcp.analysis.flags          //显示所有与TCP标识有关的包,包括丢包、重发或者零窗口标志
tcp.analysis.zero_window    //显示被标志的包,来表示发送方的缓冲空间已满
4.5显示单个IP地址或主机
ip.src           //表示捕获源IPv4地址的数据
ip.dst           //表示捕获目标IPv4地址的数据
ip.host          //表示到达/来自解析某网站后IPv4地址的数据
ip.addr          //表示到达/来自IPv4地址的数据
对于IPv6数据,可以使用的字段如下
ipv6.src        //表示捕获源IPv6地址的数据。
ipv6.dst        //表示捕获目标IPv6地址的数据
ipv6.host       //表示到达/来自解析某网站后IPv6地址的数据
ipv6.addr       //表示到达/来自IPv6地址的数据
4.6显示地址范围
ip.addr>10.3.0.1 && ip.addr<10.3.0.5         //显示到达/来自IP地址10.3.0.2、10.3.0.3或10.3.0.4主机的数据
ip.addr>=10.3.0.1 && ip.addr<=10.3.0.6)&& !ip.addr--10.3.0.3   //显示到达/来自IP地址为10.3.0.1、10.3.0.2、10.3.0.4、10.3.0.5或10.3.0.6的数据。在这个范围内除了IP地址为10.3.0.3的数据
ipv6.addr>=fe80::&&ipv6.addr 4.7显示一个子网IP
ip.addr==10.3.0.0/16    //显示IP地址从10.3开始的源IP地址字段和目标IP地址字段的所有数据
ip.addr==10.3.0.0/16 && !ip.addr==10.3.1.1     //显示IP地址从10.3开始的源IP地址字段和目标IP地址字段的数据,除了10.3.1.1地址
ip.addr==10.3.0.0/16 && !ip.addr==10.2.0.0/16    //显示除了以10.3或10.2开头的源IP地址字段和目标IP地址字段的数据
4.8 过滤单一TCP/UDP会话
tcp.stream eq 会话序号     //在传输层数据中可以看到会话序号
4.9使用关键字
  1. frame contains "string"搜索,在帧中搜索一个关键字
  2. 字段名搜索,例如前面提到的http.request.method contains "get"
  3. 搜索关键字时不区分大小写,上面那个搜索将搜不出结果,因为字段内容其实是“GET”大写的,修改http.request.method matches "(?i)(get)"
  4. 搜索多个关键字,http.request.method matches "(?i)(get|post)"
  5. 使用通配符,也就是正则表达式
4.10时间过滤器
 在物理层数据帧中有三个时间:
  1.距离上一个捕获的包的时间间隔
  2.从上次显示的包开始计时,距离上一个显示的包的时间间隔
  3.距离第一个捕获包的时间间隔,默认第一个数据帧的时间为0.000000
  frame.time_delta 过滤的是第一种时间
  在Packet List面板中默认加了Time列,表示的是第三种时间。
4.11基于TCP的时间过滤
tcp.time_delta的计算与上一个类似,只是字段包含在TCP头部,如果要查看必须启用Calculate conversation timestamps选项。
依次点击“编辑(E)-->首选项(P)-->Protocols-->TCP”,勾选Calculate conversation timestamps

你可能感兴趣的:(wireshark,测试工具,网络)