扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Wireshark是一款开源的网络协议分析工具,是遵循GPL协议发布的自由软件,因为以上原因,人们可以很容易在Wireshark上添加新的协议,或者将其作为插件整合到您的程序里,Wireshark支持Linux、Windows、MacOS等多个操作系统。
创新互联服务项目包括扶绥网站建设、扶绥网站制作、扶绥网页制作以及扶绥网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,扶绥网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到扶绥省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
Wireshark在支持协议的数量方面是出类拔萃的—已经支持数千种协议,这些协议包括从最基础的IP协议和DHCP协议到高级的专门应用协议比如AppleTalk和BitTorrent等。由于Wireshark在开源模式下开发,每次更新都会增加一些对新协议的支持。
参见下图从功能上,wireshark可以被划分为四个主要模块:Capture Core,WireTap, Protocol Interpreter and Dissector和GUIintrerface。其中Capture Core使用pcap(windows下为winpcap,linux下为libpcap)抓取网络数据包,获取数据包后,WireTap把它保存为二进制文件,interpreter and dissector就是把二进制文件展现成用户容易理解的文本形式,其中dissector又分为build-in和plug-in两种,build-in很好理解,plug-in在1.3节会详细介绍一下;GUIinterface,顾名思义就是用户界面了。
在Windows系统中安装很简单。
第一步:到Wireshark的官方网站http://www.wireshark.org/ 上找到download页面,并选择一个镜像点下载需要的版本。
第二步:下载好exe安装包后,直接安装,一路next,当弹出是否需要安装WinPcap对话框时,务必要勾选install WinPcap选项。
从主下拉菜单中选择Capture的Interfaces菜单项,弹出的窗口显示出所有可以的网卡,选择你想要使用的网卡,点击工具栏的start按钮开始捕获数据,点击工具栏的stop按钮停止捕获。这时Wireshark主窗口中就呈现了相应的数据。
Wireshark主窗口如下图
Packet Lists(数据包列表):显示了当前捕获文件中的所有数据包,包括数据包序号、数据包被捕获的相对时间,源地址、目标地址、协议、概况信息。
Packet Details(数据包详情):分层次的显示了一个数据包中的内容,并且可以展开或是收缩来显示这个数据包中所捕获到的全部内容。
Packet Bytes(数据包字节):同时以十六进制和ASCII码的方式列出报文内容。
。
抓包过滤器配置于抓包之前,一经配置,Wireshark将只抓取经过抓包过滤器过滤的数据。抓包过滤器配置派生自libpcap/WinPcap库中tcpdump的语法(可以从
http://wiki.wireshark.org/CaptureFilters找到捕捉过滤范例)。
抓包过滤器的配置步骤:选择Capture | Options,弹出CaptureOptions窗口。双击选定的网卡,弹出EditInterface Settints窗口。
下图显示了Edit Interface Settings窗口,这里可以设置抓包过滤条件。如果你确知抓包过滤条件的语法,直接在Capture Filter区域输入。在输入错误时,Wireshark通过红色背景区域表明无法处理过滤条件。最有可能的情况是,过滤条件中含有输入错误,或是使用了 display filter的语法。点击Capture Filter按钮查看并选择已保存的抓包过滤条件。
小贴士:
Wireshark包含了一些默认的抓包过滤条件。点击主工具栏的Edit Capture Filters,跳转到已保存抓包过滤列表。你会发现一些常见抓包过滤的示例。
Ethernet过滤器即为第二层(OSI模型的第二层)过滤器,即根据MAC地址来行使过滤功能的抓包过滤器。抓包原理:Ethernet抓包引擎会先拿用户事先指定的源/或目的主机MAC地址,与抓取的以太网流量的源/或目的主机MAC地址相比较,再筛选出源/或目的主机MAC地址相匹配的流量。
ether host
例如:ether host00:24:d6:ab:98:b6
ether dst
例如:ether dst00:24:d6:ab:98:b6
ether src
例如:ether src 00:24:d6:ab:98:b6
ether broadcast让Wireshark只抓取所有以太网广播流量
例如:ether broadcast
ether multicast让Wireshark只抓取所有以太网多播流量
例如:ether multicast
ether proto
例如:ether proto 0800
vlan
例如:vlan 9999
要想让抓包过滤器中的字符串起反作用,需在原词之前添加关键字not或符号“!”
主机或网络过滤器是基于IP地址的第三层过滤器。原理:若根据主机名进行过滤,则wireshark会把用户输入的主机名转换为iP地址,并抓取与这一IP地址相对于的流量。
host
例如:host 101.10.10.2 host funshion.game.com
dst host
例如:dst host 101.10.10.2
src host
例如:src host 101.10.10.2
net
例如:net 192.168.1.0/24
dst
src
broadcast让Wireshark只抓取IP广播包
multicast让Wireshark只抓取IP多播包
ip proto
例如:ip proto 1
icmp [icmptype] ==
例如:icmp [icmptype] ==icmp-echo 或icmp [icmptype] ==8
ip[2:2] ==
根据第四层协议TCP/UDT的端口号来进行过滤,原理:第四次协议(主要指TCP/UPD)互连末端应用程序的协议,对于TCP和UPD而言,端口号就是用来标识应用程序的代号。
port
例如:port 5080
dst port
例如:dst port 80 或 dst port http
src port
tcp portrange
例如:tcpportrange 2000-2500
tcpsrc portrange
tcpdst portrange
less
greater
复合型过滤器
举例1:让Wireshark只抓取TCP连接中用来发起连接或终止连接的数据包
tcp [tcpflags]& (tcp-syn | tcp-fin)!=0
举例2:让Wireshark抓取来源于game.funshion.com的http流量
hostgame.funshion.com and port 80
就过滤功能而言,字节偏移或净载匹配型过滤器要更加灵活,可以配置自定义型抓包过滤器。
格式:proto
ip
tcp
udp
例如:让Wireshark抓取目的端口范围为50~100的TCP数据包
tcp[2:2] >50 and tcp[2:2]<100 (第一个数字2指明从tcp头部的第二个字节起开始检查,第二个数据2指明了检查范围为2个字节)
显示过滤器配置于抓包之后,一经配置,Wireshark将只显示经过显示过滤器过滤的数据(可以在WiresharkWiki Display页找到发现大量的显示过滤范例。http://wiki.wireshark.org/DisplayFilters)。
与捕捉过滤器使用的语法不同,显示过滤器使用的是Wireshark特定的格式。
1.==或eq
例如:ip.src == 10.2.2.2显示所有源地址为10.2.2.2的IPv4数据流
2. !=或ne
例如:tcp.srcport != 80显示源端口除了80以外的所有TCP数据流
3. >或gt
例如:frame.time_relative > 1显示距前一个报文到达时间相差1秒的报文
4. <或lt
例如:tcp.window_size < 1460显示当TCP接收窗口小于1460字节时的报文
5. >=或ge
例如:DNS.count.answers >= 10显示包含10个以上answer的DNS响应报文
6. <=或le
例如:ip.ttl <= 10显示IP报文中Time to Live字段小于等于10的报文
7. Contains
例如:http contains “GET”显示所有HTTP客户端发送给HTTP服务器的GET请求
1、借助于显示过滤器的窗口,点击过滤器工具条上的Extensions…按钮,弹出Filter Expression窗口,如下图,该窗口由5个重要区域组成
FieldName(协议头部中的字段名称)区域,在该区域,可利用Wireshark预定义的协议模板来配置显示过滤器所含各参数。点最左边的“+”号,即可浏览到相关协议的各个属性(或协议头部中个字段的名称)
Relation(关系)区域,可从该区域选择条件操作符
Value(值)区域,可在该区域的输入栏内输入事先从Field Name区域中选择的协议头部字段的熟悉值
Predefinedvalues(预定义值),该区域的值取决于Field Name设定的协议类型和协议属性
Range(offset:length)(范围(偏移:长度))区域,构造字节偏移型过滤器
2、在显示过滤器工具条的Filter输入栏内直接输入显示过滤语句,可借助于自动补齐特性,来完成过滤器的构造。比如,若在Filter输入栏内输入tcp.f时,自动补齐特性将会生效,会使Wireshark在输入栏下自动列出所有以tcp.f打头的显示过滤器参数。
小贴士:
如何获取显示过滤器所包含的参数:在Wireshark抓包主窗口的数据包结构区域中,只要选中了任意一种协议头部的某个字段,与该字段相对应的显示过滤参数将会出现在抓包主窗口底部状态栏的左侧。
配置Ethernet(OSI模型的第二层)显示过滤器的目的,让wireshark只显示相关的第二层以太网帧,依据的是MAC地址或Ethernet帧的某些熟悉。
常用的Ethernet显示过滤器:
eth.addr==
例如:eth.addr==00:24:d6:ab:98:b6 让wireshark只显示具有指定MAC地址00:24:d6:ab:98:b6的数据帧
eth.src==
例如:eth.src== 00:24:d6:ab:98:b6 让wireshark只显示源于MAC地址为00:24:d6:ab:98:b6的数据帧
eth.dst==
例如:eth.dst== 00:24:d6:ab:98:b6 让wireshark只显示目的MAC地址为00:24:d6:ab:98:b6的数据帧
eth.dst== ffff.ffff.ffff让wireshark只显示以太网广播帧
常用的ARP过滤器
arp.opcode==
arp.opcode== 1让wireshark只显示ARP请求帧
arp.opcode== 2让wireshark只显示ARP应答帧
arp.src.hw_mac==
配置ip(OSI模型的第三层)显示过滤器的目的,让wireshark只显示必要的第三层数据包,依据的是IP地址或IP数据包的的某些熟悉
常用的IP和ICMP过滤器
ip.addr==
例如:ip.addr==200.1.1.1 and ip.addr ==192.168.1.1
ip.src==
ip.src== 101.10.10.2
ip.dst==
ip.ttl==
ip.len==
ip.version==
!Ip.src== 101.10.10.2让wireshark显示除了设定ip地址之外的所有发出的数据包
tcp.port ==
例如:tcp.port == 80
tcp.dstport==
例如:tcp.dstport ==80
tcp.srcport ==
例如:tcp.srcport ==80
tcp.flags:Wireshark检查数据包TCP头部中个标记位的置位情况
例如:tcp.flags.syn == 1:让Wireshark显示SYN标记位置1的TCP数据包
tcp.flags.reset ==1:让Wireshark显示RST标记位置1的TCP数据包
tcp.flags.fin== 1:让Wireshark显示FIN标记位置1的TCP数据包
要想让抓包过滤器中的字符串起反作用,需在原词之前添加关键字not或符号“!”
常用的HTTP显示过滤器
http.host== <”hostname”>:让Wireshark只显示访问某指定主机名的HTTP协议数据包
http.request.method== ”GET”:让Wireshark只显示包含HTTP GET方法的HTTP协议数据包
http.request.uri== <”Full request URI”>让Wireshark只显示HTTP客户端发起的包含指定URI请求的HTTP协议数据包。
http.request.uricontens “URI String”让Wireshark只显示HTTP客户端发起的包含指定字符串的URI请求的HTTP协议数据包。
http.cookie:让Wireshark只显示网络中传播的所有包含cookie请求的HTTP协议数据包
http.set_cookie:让Wireshark只显示所有包含由HTTP服务器发送给HTTP客户端的cookie set命令的HTTP协议数据包。
(http.set_cookie)&& (http contens”google”):让Wireshark只显示所有由google HTTP服务器发送给HTTP客户端,且包含cookie set命令的HTTP协议数据包
httpmatches “\.zip” && http.request.method == “GET”:让Wireshark只显示包含ZIP文件的HTTP数据包。
常见的DNS显示过滤器
让Wireshark只显示DNS查询和DNS响应数据包
dns.flags.response== 0 (DNS查询)
dns.flags.response== 1(DNS响应)
让Wireshark只显示所有anser count字段值大于或等于4的DNS响应数据包
dns.count.answers>=4
通用格式为:protocols[x:y] ==
例如:eth.dst[0:3] == 01:00:5e,让Wireshark只显示IPV4多播数据包
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流