Wireshark(一)
Wireshark是世界上最重要和使用最广泛的网络协议分析仪。
它可以让您在微观层面上看到网络上发生的事情,并且是许多商业和非盈利企业,政府机构和教育机构经常所使用的。
由于全球网络专家的志愿者贡献,Wiresahrk发展蓬勃发展,并且是Gerald Combs在1988年启动的项目的延续。
Wireshark的诞生
1997年底,GeraldCombs需要一个能够追踪网络流量的工具软件作为其工作上的辅助。因此他开始撰写Ethereal软件。Ethereal在经过几次中断开发的事件过后,终于在1998年7月释出其第一个版本v0.2.0。自此之后,Combs收到了来自全世界的修补程式、错误回报与鼓励信件。Ethereal的发展就此开始。不久之后,GilbertRamirez看到了这套软件的开发潜力并开始参与低阶程式的开发。1998年10月,来自NetworkAppliance公司的GuyHarris在寻找一套比tcpview(另外一套网络风暴撷取程式)更好的软件。于是他也开始参与Ethereal的开发工作。1998年底,一位在教授TCP/IP课程的讲师RichardSharpe,看到了这套软件的开发潜力,而后开始参与开发与加入新协定的功能。在当时,新的通信协定的制定并不复杂,因此他开始在Ethereal上新增的封包撷取功能,几乎包含了当时所有通讯协定。
自此之后,数以千计的人开始参与Ethereal的开发,多半是因为希望能让Ethereal撷取特定的,尚未包含在Ethereal默认的网络协定的封包而参与新的开发。2006年6月,因为商标的问题,Ethereal更名为Wireshark。
Wireshark的主要功能
实时数据可以从以太网(网卡,插网线的地方),IEEE802.11(无线局域网的标准,无线网卡),蓝牙,USB,PPP/HDLC,ATM,令牌杯,帧中继,FDDI等读取(取决于您的平台)
多平台:在Windows,Linux,macOS,Solaris,FreeBSD,NetBSD和其他许多平台上运行
通过GUI捕获网络数据
读/写许多不同的捕获文件格式:tcpdump(libpcap),Pcap NG
许多协议的解密支持,包括IPsec,ISAKMP,Kerberos,SNMPv3,SSL/TLS,WEP和WPA/WPA2
深入分析数百种协议,并且一直在增加更多协议
打破了过去抓包软件普遍收费的状况
Wireshark的使用场景
软件开发人员调试网络程序的bug
服务器运维人员检测数据包的流向
逆向分析人员监控程序的通讯
网警将捕获到的数据包导入分析进行数字取证
Wireshark的下载和安装
网卡的选择和页面介绍
第一步,打开Wireshark,选择我们需要抓取数据的网卡
(1. 有心电图一样的波动说明有数据,是正在使用的网卡 2. 打开任务管理器-打开资源监视器-网络,查看网卡)
中间列表是用来显示每一条抓取到的数据信息
每一行是每一列每一条数据信息的详细信息
如:
① 物理层数据,简单说是硬件之间的通信,Wireshark在这里一一表述出来了
② 数据链路层信息,它记录了我们的mac地址。mac地址是在一个硬件上面理论上是可以更改的,也可以说是独一无二的,因为设备在生产的时候是独一无二的。
③ 网络层IP信息,Src是source源的意思,Dst是destination目的地址的意思。
④运输层, 说明这一条报文或用户数据报用的是什么协议,并且记录了它的源端口和目标端口。可以看到它用的是UDP(User Datagram Protocol),也记录了它的长度62。
⑤ 应用层,简单来说,UDP是一个父亲,应用层DNS是一个儿子,因为DNS是根据UDP所开发出来的。应用层主要装载的数据是他们真正进行通信用的数据,而父亲UDP只是承担一个传输的角色。
TCP UDP结构
TCP、UDP协议是我们在生活通信中,像一些APP程序之类用的比较多的一个协议。
服务类型:记录了IP数据报在传输过程中需不需要特殊服务,它占了8个比特。前面4个比特现在已经用不上了,后面4个比特记录是否需要低延迟、高流量、可靠性、低成本的特性,需要则在比特位置上置1。但是这4个不能全部置1,也就是说这4个只能选一个。
标志:第一位是保留位。如果第二个比特占1,就代表它不分片位,一次把东西全都发给你了。如果第三个比特占1,就说明我后面还有很多分片,记得把他们组装在一起。如果这两个都是0的话,说明数据报是最后的,是最小的那个兄弟,多多关照。
生存时间:也叫TTL。在ping命令中——比说我想看我家的路由器跟我是否连接,那么ping一下
TTL的意思就是可以经过多少个路由,比如说我可以经过46个路由,但到达46个路由的时候,就不能再转发下去了。每经过一个路由,TTL-1,等到0的时候,就把报文丢掉了。
首部校验和:首部就是从版本到可选选项的这一块地方。首部校验和就是检验这一块地方有没有出错。如果是TCP出错了,可以要求对方重新发送。如果是UDP的话,一般会直接把这个数据给丢掉。
源IP地址和目标IP地址:我们通信的话就是从一台电脑(或手机)到另一台电脑(或服务器),那么从手机到服务器的过程,手机就充当了源IP地址。目标IP地址就是我们的服务器。但是从服务器返回来数据的时候,服务器就是源IP地址,我们的手机就是目标IP地址。
源端口和目的端口:我们在通信过程中会用到端口。每台电脑每个服务器每个系统都有端口。端口的最大值就是65535,最小值是0。源端口就是我们发送端的端口,目的端口就是接收端的端口。从哪个IP的哪个端口发送,到哪个IP的哪个端口。
序号:SEQ,在传输过程中一直和数据连接在一起,类似身份证号。
确认号:ACK。
首部长度:从源端口到选项是TCP的首部。
保留:占了六个字节,并用0填充。
URG:置1的时候表示,,它将调用紧急指针。
ACK:置1的时候表示,这个报文是确认报(确认报:对方发了个报给我们,我们收到信息,要发个确认报告诉回对方。)
PSH:置1的时候表示,告诉对方赶紧把现在我发给你的数据全读完。因为我还有数据,怕你读不完,就会有些数据错乱掉,你就没读到。所以看到PSH的话就赶紧把这些数据全部拿光。
RST:置1的时候表示,这个帧表示可能我们的连接出错了,要求重新连接,保证我这个是可靠的,是没有错误的。
SYN:置1的时候表示,这个是从源端口发送,源端口和目的端口正在建立第一次链接。一般在第一次建立连接的时候才会发送。
FIN:置1的时候表示,从一个端口告诉目的端口,我要和你断绝关系了。
紧急指针:面对网络阻塞等等情况,当URG设为1时。紧急指针16个比特的值 + SEQ32个比特的值 + 1,就是我们紧急数据。紧急数据在数据字段,最多只能放4个字节。
IP数据报的【用户数据】就是TCP报文从【源端口】到【数据】的数据,也就是说真正的数据是从TCP报文的【数据】开始的。
TCP讲究可靠性,但比UCP慢了一点点。UDP讲究的是效率,但它的可靠性比TCP差了一点点。
UDP它只要知道,你的端口从哪里来,到哪个端口,整条TCP报文有多长,校验你的数据准不准确(不准确,就丢掉它),仅此而已。
不管对方有没有收到,都直接发送给对方。所以UDP的可靠性是比较差的。
我们来捕获一个IP数据报:
TCP握手与挥手
TCP需要握手是因为它具有很高的可靠性,而UDP不需要握手是因为它只在乎效率。那么TCP的通信是基于它三次握手的基础上,才能进行通信的。
假设x它是0,把报文发送给目标主机的目的端口。目的端口收到SYN = 1,知道你要跟我建立连接,那么我将ACK置为1,ACK序号设为x + 1 = 1,并也置SYN = 1。
发过来的过程叫做SYN-SENT,它监听的过程叫做LISTEN,发回来的过程叫做SYN-RCVD。
最后,把ACK=1,ACK序号 = y + 1,SEQ序号置为x + 1 = 1的报文发给目标主机的目的端口,这样三步连接之后就可以正常发送数据了。
四步挥手