Wireshark

来源:互联网 发布:linux如何访问usb 编辑:程序博客网 时间:2024/06/09 14:22
  • 部分转载自如果看了这个你还是不会用Wireshark,那就来找我吧

快捷键

  • Ctrl + E 结束抓包/开始抓包
  • Ctrl + K 打开Capture Options
  • Ctrl + F 打开搜索
  • Ctrl + N 查看下一个
  • Ctrl + B 查看上一个
  • Ctrl + M 标记当前包
  • Ctrl + I 端口列表
  • Ctrl + R 重新开始
  • Ctrl + Alt + 1-7 显示时间的格式,默认的是4,详细的是1
  • Ctrl + Shift + R 重置个列的宽度
  • Ctrl + Shift + P 打开首选项

常用命令

抓包过滤器

  • ether host 10:51:72:27:b9:ab
  • ether src host 10:51:72:27:b9:ab
  • ether dst host 10:51:72:27:b9:ab
  • host 172.18.131.51
  • src host 172.18.131.51
  • dst host 172.18.131.51
  • port 80
  • ! port 80
  • dst port 80
  • src port 80
  • arp
  • icmp
  • host 172.18.131.51 && port 80

显示过滤器

  • ip.addr == 172.18.131.51
  • ip.src == 172.18.131.51
  • ip.dst == 172.18.131.51
  • ip.src == 172.18.131.51 and ip.dst == 172.18.131.52
  • tcp.port == 80
  • tcp.srcport == 80
  • tcp.dstport == 80
  • tcp.flag.syn == 1
  • tcp.flag.ack == 1
  • arp
  • tcp
  • ucp
  • not http
  • not arp
  • ip.src == 172.18.131.51 and tcp.dstport == 80
  • ip.addr == 172.18.131.51 ahd udp.port == 4000
  • arp or icmp 查看ping的包流量
  • 错误:ip.addr != 10.2.2.2
  • 显示在IP源地址或IP目的地址不包含10.2.2.2的报文。只要在源或目的IP地址不为10.2.2.2,报文就会被显示出来。这时隐含的或会导致实际上并未过滤任何报文。
  • 正确:!ip.addr == 10.2.2.2
  • 显示IP源地址和IP目的地址都不包含10.2.2.2的报文。
  • 错误:!tcp.flags.syn==1
  • 显示所有不含TCP SYN bit设置为1的报文。其他协议报文,必须UDP和ARP报文也符合这一过滤条件,因为它们的TCP SYN bit没有设置为1。
  • 正确:tcp.flags.syn!=1
  • 只显示包含SYN设置为0的TCP报文。

相关设置

打开Wireshark显示The NPF driver isn’t running. You may have trouble capturing or listing interfaces. 对话框

  • Netgroup Packet Filter 网络数据包过滤器
  • 网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。
  • 它不仅提供了基本的特性(例如抓包),还有更高级的特性(例如可编程的过滤器系统)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集,后者提供了一个强大而简单的统计网络通信量的机制。
  • 解决方法是:
  • win -> 运行输入cmd -> 键盘上右键 -> A(以管理员身份运行) -> 输入:net start npf 开启npf协议
  • 输入net stop npf为关闭npf协议

界面介绍

  • Time 是以秒为单位

显示过滤器和查找的区别

  • 在显示过滤器中输入 tcp.flags.syn == 1 会只显示所有符合条件的,这是查看三次握手用的
  • 在查找中输入 tcp.flags.syn == 1 会高亮显示符合条件的并且可以选择上一个和下一个
  • 查找中不仅可以搜索显示过滤器中的东西,还可以输入十六进制的字符和字符串

查看三次握手

  • TCP/IP通过三次握手建立一个连接。这一过程中的三种报文是:SYN,SYN/ACK,ACK。
  • 第一步是找到PC发送到网络服务器的第一个SYN报文,这标识了TCP三次握手的开始。
  • 如果你找不到第一个SYN报文,选择Edit -> Find Packet菜单选项。选择Display Filter,输入过滤条件:tcp.flags,这时会看到一个flag列表用于选择。选择合适的flag,tcp.flags.syn并且加上==1。点击Find,之后trace中的第一个SYN报文就会高亮出来了。
  • 一个快速过滤TCP报文流的方式是在Packet List Panel中右键报文,并且选择Follow TCP Stream。这就创建了一个只显示TCP会话报文的自动过滤条件。
  • 这一步骤会弹出一个会话显示窗口,默认情况下包含TCP会话的ASCII代码,客户端报文用红色表示服务器报文则为蓝色。
  • !三次握手抓包图
  • 注意:这里Wireshark自动为此TCP会话创建了一个显示过滤。本例中:(ip.addr eq 192.168.1.2 and ip.addr eq 209.85.227.19) and (tcp.port eq 80 and tcp.port eq 52336)

SYN报文:

  • 图中显示的5号报文是从客户端发送至服务器端的SYN报文,此报文用于与服务器建立同步,确保客户端和服务器端的通信按次序传输。SYN报文的头部有一个32 bit序列号。底端对话框显示了报文一些有用信息如报文类型,序列号。

SYN/ACK报文:

  • 7号报文是服务器的响应。一旦服务器接收到客户端的SYN报文,就读取报文的序列号并且使用此编号作为响应,也就是说它告知客户机,服务器接收到了SYN报文,通过对原SYN报文序列号加一并且作为响应编号来实现,之后客户端就知道服务器能够接收通信。

ACK报文:

  • 8号报文是客户端对服务器发送的确认报文,告诉服务器客户端接收到了SYN/ACK报文,并且与前一步一样客户端也将序列号加一,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

ARP && ICMP

  • 开启Wireshark抓包。打开Windows控制台窗口,使用ping命令行工具查看与相邻机器的连接状况。
  • ping
  • ARP报文:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。其功能是:主机将ARP请求广播到网络上的所有主机,并接收返回消息,确定目标IP地址的物理地址,同时将IP地址和硬件地址存入本机ARP缓存中,下次请求时直接查询ARP缓存。
  • 最初从PC发出的ARP请求确定IP地址192.168.1.1的MAC地址,并从相邻系统收到ARP回复。ARP请求之后,会看到ICMP报文。
  • ICMP报文:网络控制消息协定(Internet Control Message Protocol,ICMP)用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,令管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
  • PC发送echo请求,收到echo回复如上图所示。ping报文被mark成Type 8,回复报文mark成Type 0。
  • 如果多次ping同一系统,在PC上删除ARP cache,使用如下ARP命令之后,会产生一个新的ARP请求。
    C:\> ping 192.168.1.1    ... ping output ...    C:\> arp –d *

HTTP

  • HTTP协议是目前使用最广泛的一种基础协议,这得益于目前很多应用都基于WEB方式,实现容易,软件开发部署也简单,无需额外的客户端,使用浏览器即可使用。这一过程开始于请求服务器传送网络文件。
  • 从上图可见报文中包括一个GET命令,当HTTP发送初始GET命令之后,TCP继续数据传输过程,接下来的链接过程中HTTP会从服务器请求数据并使用TCP将数据传回客户端。传送数据之前,服务器通过发送HTTP OK消息告知客户端请求有效。如果服务器没有将目标发送给客户端的许可,将会返回403 Forbidden。如果服务器找不到客户端所请求的目标,会返回404。
  • 如果没有更多数据,连接可被终止,类似于TCP三次握手信号的SYN和ACK报文,这里发送的是FIN和ACK报文。当服务器结束传送数据,就发送FIN/ACK给客户端,此报文表示结束连接。接下来客户端返回ACK报文并且对FIN/ACK中的序列号加1。这就从服务器端终止了通信。要结束这一过程客户端必须重新对服务器端发起这一过程。必须在客户端和服务器端都发起并确认FIN/ACK过程。

Ubuntu Wireshark可能碰到的问题

Lua: Error during loading:

  • [string “/usr/share/wireshark/init.lua”]:45:dofile has been disabled
  • 解决办法:
  • 编辑init.lua文件的倒数第二行:
  • sudo vim /etc/wireshark/init.lua;
  • –dofile(“console.lua”)
  • 把这一行注释掉。

普通用户没办法用wireshark抓包,无权限

  • dumpcap需要root权限才能使用的,以普通用户打开Wireshark,Wireshark当然没有权限使用dumpcap进行截取封包。
  • 虽然可以使用sudo wireshark
  • 但是,以sudo的方式用root打开Wireshark显然是不安全的,也不是很方便,因为得到的封包数据也属于root用户。
  • 添加wireshark用户组
  • sudo groupadd wireshark
  • 将dumpcap更改为wireshark用户组
  • sudo chgrp wireshark /usr/bin/dumpcap
  • 让wireshark用户组有root权限使用dumpcap
  • sudo chmod 4755 /usr/bin/dumpcap
  • (注意:如果设为4754 Wireshark还是会提示没有权限 )
  • 将需要使用的普通用户名加入wireshark用户组,我的用户是“dengyi”(需要根据具体用户名修改!),则需要使用命令:
  • sudo gpasswd -a lhw wireshark
  • 这样就完成了,以普通用户lhw登陆打开Wireshark就会有权限进行抓包了。

应用Wireshark IO Graphs分析数据流

基本IO Graphs:

  • IO graphs是一个非常好用的工具。基本的Wireshark IO graph会显示抓包文件中的整体流量情况,通常是以每秒为单位(报文数或字节数)。默认X轴时间间隔是1秒,Y轴是每一时间间隔的报文数。如果想要查看每秒bit数或byte数,点击“Unit”,在“Y Axis”下拉列表中选择想要查看的内容。这是一种基本的应用,对于查看流量中的波峰/波谷很有帮助。要进一步查看,点击图形中的任意点就会看到报文的细节。
  • 为了讲解方便,点击示例报文包,或用自己的wireshark点击Statistics – IO Graphs。这个抓包是HTTP下载遇到报文丢失的情况。
    解决这个问题的办法——可以使用用户组功能使用Wireshark,具体操作:

常用排错过滤条件:(在IO Graphs中筛选)

  • 对于排查网络延时/应用问题有一些过滤条件是非常有用的:
  • tcp.analysis.lost_segment:表明已经在抓包中看到不连续的序列号。报文丢失会造成重复的ACK,这会导致重传。
  • tcp.analysis.duplicate_ack:显示被确认过不止一次的报文。大凉的重复ACK是TCP端点之间高延时的迹象。
  • tcp.analysis.retransmission:显示抓包中的所有重传。如果重传次数不多的话还是正常的,过多重传可能有问题。这通常意味着应用性能缓慢和/或用户报文丢失。
  • tcp.analysis.window_update:将传输过程中的TCP window大小图形化。如果看到窗口大小下降为零,这意味着发送方已经退出了,并等待接收方确认所有已传送数据。这可能表明接收端已经不堪重负了。
  • tcp.analysis.bytes_in_flight:某一时间点网络上未确认字节数。未确认字节数不能超过你的TCP窗口大小(定义于最初3此TCP握手),为了最大化吞吐量你想要获得尽可能接近TCP窗口大小。如果看到连续低于TCP窗口大小,可能意味着报文丢失或路径上其他影响吞吐量的问题。
  • tcp.analysis.ack_rtt:衡量抓取的TCP报文与相应的ACK。如果这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失,拥塞,等等)。

函数:

  • IO Graphs有六个可用函数:SUM, MIN, AVG, MAX, COUNT, LOAD。

附录1:常用英文单词

IO Graphs

  • Tick interval 滴答/时间区间,最小单位长度
  • Pixels per tick 像素密度(每个滴答/时间)

附录2:网络协议报文结构与抓包示例

TCP/IP协议栈

以太网帧示例

IP数据报格式

IP报文示例

UDP帧结构

TCP消息结构

TCP报文示例

0 0