【渗透神器系列】WireShark

wireshark是一款网络流量抓取分析神器,也是安全工具使用排行中排名第一的工具。使用wireshark必须要牢记一些常用的数据包过滤规则,对于寻找一些特定的包会事半功倍。

IP过滤

ip源地址:  ip.src    ip.src==10.0.3.109

ip目的地址:   ip.dst    ip.dst==10.0.3.114

端口过滤

tcp.port==80    所有端口为80的包

tcp.dstport==80   目的端口为80的包

tcp.srcport==80   源端口为80的包

协议过滤

http

tcp

icmp

…….

http模式过滤

http.request.method==”GET”  查找GET包

http.request.method==”POST”  查找POST包

连接符

and  &

or  ||

自助模式

可以打开wireshark的Expression会弹出Filter Expression窗口:

未分类

wireshark过滤

wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。它不会对网络封包产生内容的修改,只反映出目前流通的封包资讯,其本身也不会送出封包至网络上。wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

一些基本的设
置在 编辑—->首选项里可以找到,版本不同界面上有所差异。
学习使用wireshark可以参考:https://community.emc.com/thread/194901?start=0&tstart=0

以及书籍《wireshark网路分析实战》【以色列】Yoram Orzach著 人民邮电出版社(这本书的内容比较全面,也比较贴近实际用法的场景介绍)

1、wireshark过滤规则

过滤对分析包含大量文件信息的报文集合有很大的功能,系统还具有自动完成功能。其自带的捕获过滤功能:在Capture -> Capture Filters中设置;与显示过滤功能:过滤IP,MAC,端口,协议;根据报文长度,http、dns等模式,TCP参数,包内容过滤。过滤的方式可以保留成一个快捷键。而过滤使用的语句可以类似与正则表达式的使用。

下面主要介绍比较常用的几个过滤功能使用方式。

TCP:只显示通过TCP(包含TCP报文段)的报文。其他协议的过滤使用类似。not TCP或者!TCP表示除了TCP协议的报文。

Tcp.port == 80 or Tcp.port== 8080对于TCP的建立连接很快捷进行分析。

ip.src ==192.168.1.102:源IP为192.168.1.102

目的IP,MAC地址等也使用类似的功能。相关的一些关于数值的使用也可以使用字符来代替。

小于等于le等于eq大于gt大于等于ge不等ne

http模式的过滤以及内容的过滤。这是最重要的一部分

http.request.method ==“GET”以GET模式提交的方式

http contains“HTTP/1.1 200 OK”HTTP服务的成功连接

正则表达式的结合使用:

tcp[20:] matches“^GET (.*?)HTTP/1.1//x0d//x0a[//x00-//xff]*Host:“

eth.addr[0:3]==e4:02:9bMAC地址前三部分等于e4:02:9b

ip[8:1]==1分析TTL值

tcp.flags.syn==1#查看TCP建立链接的SYN数据包

未分类

2、wireshark有效功能窗口

封包列表颜色区分,方便识别和查找。

未分类

捕获日志:

未分类

专家分析状态:

未分类

跟踪数据流Analyze>Follow>TCP/UDP

未分类

会话分析:statistics>conversations。用于分析会话的分布,比如大量的恶意流量来源,可以有效的获取信息,同时列表形式的情况就可能是一个扫描的工作在进行。还可以发现是否有一个内网IP曝光程度太高(即会话数量很多),是否出现广播包(广播包的数量非常多)

未分类

从报文中解析出相应的文件:

使用tcp过滤器跟踪数据流,发现有文件格式是jpg的文件。

未分类

File>export object>http得到导出的另一种格式:选择对应文件保存就可以

未分类

WireShark学习之抓取和分析HTTP数据包

1. 设置过滤条件

指定网络协议http

未分类

2. 打开Chrome浏览器输入网址

在浏览器输入https://sspai.com/post/30292

未分类

3. 在抓获得包中得到两个数据包,分别是HTTP请求以及HTTP响应

未分类

4. 双击打开 GET /30292 HTTP/1.1

未分类

5. 对Http协议包进行分析

HTTP请求消息头

  • Accept:call服务器,可以接收文件、网页和图片。
  • Accept-Charset:所接收的字符编码。
  • Accept-Encoding:可接收()压缩后的数据。
  • Accept-Language:Browser支持中、英文。
  • Host:要找的主机是。
  • If-Modified-Since:告诉服务器我们的缓冲中有这个资源文件,该文件的时间是,,
  • Referer:告诉服务器,我来自哪里。
  • User-Agent:告诉服务器,Browser内核。
  • Cookie:
  • Connection:保持连续发完信息后,我不关闭连接。
  • Date:Browser发送时间。

未分类

6. 查看Tcp流-Follow TCP Stream

未分类

未分类

7. 分析三次握手

三次握手的原理

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

下图转自百度百科:

未分类

  • Wireshark中三次握手的具体情形

未分类

8. 总结

这些操作分为两步,第一步设置合理的过滤条件,第二步在任意数据包中选择Follow TCP Stream 。

Wireshark如何捕获网络流量数据包

导语:在本文中,您将学习使用Wireshark捕获攻击者使用NMAP扫描时的网络数据包。这里您会注意到,Wireshark如何捕获不同的网络流量数据包,用于打开和关闭端口。

在本文中,您将学习使用Wireshark捕获攻击者使用NMAP扫描时的网络数据包。这里您会注意到,Wireshark如何捕获不同的网络流量数据包,用于打开和关闭端口。

TCP扫描

Tcp扫描将像端口22.21.23.44等扫描TCP端口,并通过源端口和目的端口之间的三次握手连接确保监听端口(打开)。如果端口打开,则使用SYN数据包发送请求,响应目的地发送SYN,ACK数据包然后发送ACK数据包,最后源再次发送RST,ACK数据包。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -T -p 445 192.168.1.102

从给定的图像可以观察结果端口445是开放的。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序。

您会注意到它已经捕获了与上述相同的标志序列:

  • 源发送SYN包到目的地

  • 目的地发送SYN,ACK到源

  • 源发送ACK包到目的地

  • 源再次发送RST,ACK到目的地

未分类

我们来看一下关闭端口的网络流量。根据给定的图像,显示扫描端口是否关闭,则源和目的地之间将无法进行3路握手连接。

源发送SYN包,如果端口关闭,接收方将通过RST,ACK发送响应。

未分类

键入以下NMAP命令进行TCP扫描,然后启动Wireshark捕获发送的数据包。

nmap -T -p 3389 192.168.1.102

从给定的图像可以观察结果端口3389被关闭。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序。您会注意到它已经捕获了与上述相同的标志序列:

源发送SYN包到目的地

目的地发送RST,ACK包到源

未分类

隐形扫描

SYN扫描是默认和最受欢迎的扫描选项,有很好的理由。它可以快速执行,在不受限制性防火墙阻碍的快速网络上每秒扫描数千个端口。它也是相对典型和隐秘的,因为它从未完成TCP连接。如果接收到SYN数据包(没有ACK标志),端口也被视为打开。

这种技术通常被称为半开放扫描,因为您没有打开完整的TCP连接。您发送一个SYN数据包,就好像要打开一个真实的连接,然后等待响应。SYN,ACK表示端口正在侦听(打开)

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -sS -p 22 192.168.1.102

从给定的图像可以观察结果端口22是开放的。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

源发送SYN数据包到目的地

目的地发送SYN,ACK数据包到源

源发送RST报文到目的地

未分类

现在,利用隐形扫描计算出关闭端口的流量。当源在特定端口发送SYN数据包时,如果端口关闭,则目的地将通过发送RST数据包进行回复。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -sS -p 3389 192.168.1.102

从给定的图像可以观察结果端口3389被关闭。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

源发送SYN数据包到目的地

目的地发送RST,ACK包到目的地

未分类

碎片扫描

通常在数据传输完成后,FIN数据包终止源端和目标端口之间的TCP连接。代替SYN数据包,Nmap通过使用FIN数据包开始FIN扫描。如果端口打开,则通过源端口发送FIN数据包时,目的端口不会响应。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -F -p 22 192.168.1.102

从给定的图像可以观察结果端口22是开放的。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 源发送FIN包到目的地

  • 目的地不发送回复来源

未分类

类似地,如果针对任何关闭执行Fin扫描,则源端口将向特定端口发送FIN数据包,并且目的地将通过发送RST,ACK数据包进行回复。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -F -p 3389 192.168.1.102

从给定的图像可以观察结果端口3389是接近。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 源发送SYN数据包到目的地

  • 目的地发送RST报文到目的地

未分类

空扫

空扫描是一系列TCP数据包,保存序列号为“0”(0000000),并且由于没有设置任何标志,目的地将不知道如何回复请求。它将丢弃数据包,并且不会发送回复,这表示端口是打开的。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -sN -p 22 192.168.1.102

从给定的图像可以观察结果端口22是开放的。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 源发送Null数据包到目的地

  • 目的地不发送回复来源

未分类

如果端口关闭,则当源在特定端口发送空数据包时,目的地将发送RST,ACK数据包

未分类

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -F -p 3389 192.168.1.102

从给定的图像可以观察结果端口3389是接近。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 源发送Null(无)数据包到目的地

  • 目的地发送RST,ACK到源

未分类

UDP扫描

UDP扫描通过向每个目的端口发送UDP数据包来工作; 它是一个连接少协议。对于一些常见的端口如53和161,发送协议特定的有效载荷以增加响应速率,服务将使用UDP数据包进行响应,证明它是开放的。如果在重传后没有收到响应,则端口被分类为打开|过滤。这意味着端口可能是打开的,或者可能包过滤器阻塞通信。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -sU -p 161 192.168.1.119

从给定的图像可以观察结果端口161是开放的。

未分类

查看通过Wireshark捕获的源和目标之间的数据包传输顺序

  • 源UDP发送到目的地址

  • 目的地向源发送一些数据的UDP数据包

未分类

类似地,如果源端口发送UDP报文到目的端,则目的地发送回应ICMP报文端口不可达到适当的错误。

未分类

键入以下NMAP命令进行TCP扫描,然后启动Wireshark捕获发送的数据包。

nmap -sU -p 53 192.168.1.119

从给定的图像可以观察结果端口53是接近。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 源UDP发送到目的地址

  • 目的地发送ICMP报文端口不可达源

未分类

圣诞扫描

这些扫描被设计为操纵TCP标头的PSH,URG和FIN标志,设置FIN,PSH和URG标志,照亮数据包像圣诞树。当源将FIN,PUSH和URG数据包发送到特定端口时,如果端口打开,则目的地将丢弃数据包,不会对源发送任何回复。

未分类

键入以下NMAP命令进行TCP扫描,然后启动wireshark捕获发送的数据包。

nmap -sX -p 22 192.168.1.102

从给定的图像可以观察结果端口22是开放的。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 来源将FIN,PUSH和URG数据包发送到目的地

  • 目的地不发送回复来源

未分类

类似地,如果源将FIN,PUSH和URG数据包发送到特定端口,并且如果端口被关闭,则目的地将向源发送RST,ACK数据包。

未分类

键入以下NMAP命令进行TCP扫描,然后启动Wireshark捕获发送的数据包。

nmap -sX -p 3389 192.168.1.102

从给定的图像可以观察结果端口3389是接近。

未分类

查看通过wireshark捕获的源和目的地之间的数据包传输顺序

  • 来源将FIN,PUSH和URG数据包发送到目的地

  • 目的RST,ACK包到源

未分类

Wireshark过滤数据包教程

介绍

数据包过滤可让你专注于你感兴趣的确定数据集。如你所见,Wireshark 默认会抓取所有数据包。这可能会妨碍你寻找具体的数据。 Wireshark 提供了两个功能强大的过滤工​​具,让你简单而无痛地获得精确的数据。

Wireshark 可以通过两种方式过滤数据包。它可以通过只收集某些数据包来过滤,或者在抓取数据包后进行过滤。当然,这些可以彼此结合使用,并且它们各自的用处取决于收集的数据和信息的多少。

布尔表达式和比较运算符

Wireshark 有很多很棒的内置过滤器。当开始输入任何一个过滤器字段时,你将看到它们会自动补完。这些过滤器大多数对应于用户对数据包的常见分组方式,比如仅过滤 HTTP 请求就是一个很好的例子。

对于其他的,Wireshark 使用布尔表达式和/或比较运算符。如果你曾经做过任何编程,你应该熟悉布尔表达式。他们是使用 and、or、not 来验证声明或表达式的真假。比较运算符要简单得多,它们只是确定两件或更多件事情是否彼此相等、大于或小于。

过滤抓包

在深入自定义抓包过滤器之前,请先查看 Wireshark 已经内置的内容。单击顶部菜单上的 “Capture” 选项卡,然后点击 “Options”。可用接口下面是可以编写抓包过滤器的行。直接移到左边一个标有 “Capture Filter” 的按钮上。点击它,你将看到一个新的对话框,其中包含内置的抓包过滤器列表。看看里面有些什么。

未分类

在对话框的底部,有一个用于创建并保存抓包过滤器的表单。按左边的 “New” 按钮。它将创建一个填充有默认数据的新的抓包过滤器。要保存新的过滤器,只需将实际需要的名称和表达式替换原来的默认值,然后单击“Ok”。过滤器将被保存并应用。使用此工具,你可以编写并保存多个不同的过滤器,以便它们将来可以再次使用。

抓包有自己的过滤语法。对于比较,它不使用等于号,并使用 > 和 < 来用于大于或小于。对于布尔值来说,它使用 and、or 和 not。

例如,如果你只想监听 80 端口的流量,你可以使用这样的表达式:port 80。如果你只想从特定的 IP 监听端口 80,你可以使用 port 80 and host 192.168.1.20。如你所见,抓包过滤器有特定的关键字。这些关键字用于告诉 Wireshark 如何监控数据包以及哪一个数据是要找的。例如,host 用于查看来自 IP 的所有流量。src 用于查看源自该 IP 的流量。与之相反,dst 只监听目标到这个 IP 的流量。要查看一组 IP 或网络上的流量,请使用 net。

过滤结果

界面的底部菜单栏是专门用于过滤结果的菜单栏。此过滤器不会更改 Wireshark 收集的数据,它只允许你更轻松地对其进行排序。有一个文本字段用于输入新的过滤器表达式,并带有一个下拉箭头以查看以前输入的过滤器。旁边是一个标为 “Expression” 的按钮,另外还有一些用于清除和保存当前表达式的按钮。

点击 “Expression” 按钮。你将看到一个小窗口,其中包含多个选项。左边一栏有大量的条目,每个都有附加的折叠子列表。你可以用这些来过滤所有不同的协议、字段和信息。你不可能看完所有,所以最好是大概看下。你应该注意到了一些熟悉的选项,如 HTTP、SSL 和 TCP。

未分类

子列表包含可以过滤的不同部分和请求方法。你可以看到通过 GET 和 POST 请求过滤 HTTP 请求。

你还可以在中间看到运算符列表。通过从每列中选择条目,你可以使用此窗口创建过滤器,而不用记住 Wireshark 可以过滤的每个条目。对于过滤结果,比较运算符使用一组特定的符号。 == 用于确定是否相等。> 用于确定一件东西是否大于另一个东西,< 找出是否小一些。 >= 和 <= 分别用于大于等于和小于等于。它们可用于确定数据包是否包含正确的值或按大小过滤。使用 == 仅过滤 HTTP GET 请求的示例如下:http.request.method == “GET”。

布尔运算符基于多个条件将小的表达式串到一起。不像是抓包所使用的单词,它使用三个基本的符号来做到这一点。&& 代表 “与”。当使用时,&& 两边的两个语句都必须为真值才行,以便 Wireshark 来过滤这些包。|| 表示 “或”。只要两个表达式任何一个为真值,它就会被过滤。如果你正在查找所有的 GET 和 POST 请求,你可以这样使用 ||:(http.request.method == “GET”) || (http.request.method == “POST”)。! 是 “非” 运算符。它会寻找除了指定的东西之外的所有东西。例如,!http 将展示除了 HTTP 请求之外的所有东西。

总结思考

过滤 Wireshark 可以让你有效监控网络流量。熟悉可以使用的选项并习惯你可以创建过滤器的强大表达式需要一些时间。然而一旦你学会了,你将能够快速收集和查找你要的网络数据,而无需梳理长长的数据包或进行大量的工作。

Wireshark实战分析之TCP协议 挥手数据帧

1、捕获TCP四次挥手数据包

未分类

2、接下来分析四次挥手的过程

第一次挥手(分析524帧,通过FIN/ACK标志确定这个客户端提出挥手的第一次)

未分类

通过第一次挥手客户端发送FIN和ACK标志,表示本次通信已经结束,请求结束连接

3、分析第二次挥手,也就是525帧

未分类

4、分析第三次挥手,也就是526帧

未分类

5、第四次挥手分析,也就是527帧

未分类

到这里TCP四次挥手分析完毕,大家可以实际操作为主,同时结合下图分析

未分类

Wireshark实战分析之TCP协议 握手数据帧

1、TCP首部格式

未分类

  • 源端口: 用来传输数据报的端口

  • 目标端口: 数据包将要发送到的端口

  • 序号: 用来表示一个TCP片段。这个值用来表示数据流中的部分数据没有丢失

  • 确认号: 表示通信中希望从另一个设备得到的下一个数据包的序号

  • 数据偏移: 表示此块数据在整块数据中的偏移

  • 保留: 包括Reserved, Nonce, CWR和ECN-Echo,共6个比特位

  • 标记:用来表示所传输的TCP数据包类型。该字段中可用的标记包括URG, ACK, PSH, RST, SYN, FIN

  • 窗口: TCP接受者缓冲区的大小

  • 检验和: 用来保证TCP首部和数据部分的完整性

  • 紧急指针: 如果设置了URG位,这个值将被检查作为额外的指令

  • 选项: 各种可选的域,可以在TCP数据包中进行指定

上面提到了TCP传输时,可用的标记有URG, ACK, PSH, RST, SYN, FIN。 下面分别介绍这几个标记

  • URG: 紧急标志。此标志表示TCP包的紧急指针域有效,用来保证TCP连接补被中断。

  • ACK: 确认标志。此标志表示应答域有效。1表示应答域有效,0表示无效

  • PSH: 此标志表示Push操作,所谓Push操作就是指在数据包到达接收端以后,立刻传送到应用程序,而不在缓冲区排队。

  • RST: 该标志表示连接复位请求。

  • SYN: 表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用。当连接请求时SYN=1, ACK=0。 当连接被响应的时候,SYN=1, ACK=1.

  • FIN: 表示发送端已经达到数据的末尾,也就是说双方的数据传输完成,没有数据可以传输了。此时发送FIN标志位的TCP数据包后,连接将被断开。

2、捕获TCP数据包

未分类

上图是捕获的TCP数据包。接下来对三次握手和四次挥手做详细说明

3、第一次握手(分析461帧)

未分类

从以上的分析可以看出,客户端向服务器发送请求建立连接,当前的序列号为0。

4、第二次握手(分析462帧)

未分类

从第二次的分析可以看到,服务器收到客户端的请求建立连接后,发送给客户端确定包(ACK=1)已经请求建立(SYN=1),当前的序列号为0,并且希望下一次的系列号为1.

5、第三次握手(分析463帧)

未分类

当第三次握手成功后,客户端和服务端就可以建立连接了,就可以传输数据了。

可能这部分有点不好懂,我建议大家实际操作分析,并结合下图分析

未分类

Wireshark实战分析之TCP协议 三次握手

1、TCP是怎么样的协议?

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的,可靠的,基于IP的传输层协议。它的主要目地是为数据提供可靠的端到端的传输。

2、TCP协议的由来?

上一节学习了UDP协议,可以知道UDP协议非常简单,而且容易实现。但是其可靠性较差,一旦将数据包发出,将无法知道对方是否收到。为了解决这个问题,TCP协议就诞生了。使用TCP协议,可以提供网络的安全性。因为使用TCP协议传输数据时,每发出一个数据包都要求确认。如果其中有一个数据包丢失,就收不到确定包,发送方就知道应该重发这个数据包。这样TCP协议就保证了数据的安全性。

3、TCP三次握手

未分类

上图就是TCP协议三次握手建议的连接。 其中Seq表示请求序列号,Ack表示确认序列号,SYN和ACK为控制位

  • 第一次握手

未分类

第一次握手建立连接时,客户端向服务器发送SYN报文(Seq=x, SYN=1),客户端进去SYN_SENT状态, 等待服务器确定。

  • 第2次握手

首先,服务器收到客户端的请求,向客户端回复一个确认信息(Ack = x + 1)

其次,服务器再次向客户端发送一个SYN包(seq=y)建立连接请求,此时服务器进去SYN_RECV状态

  • 第3次握手

未分类

第三次握手客户端收到服务器的回复(SYN+ACK报文)。此时,客户端向服务器端发送ACK,此包发送完毕后客户端和服务器端进入ESTABLISHED状态。完成三次握手

4、TCP四次断开

在TCP通信中,当每次通信完毕后都会终止连接。该过程包含4个数据包,并且用一个FIN标志来表明连接的终结。

未分类

TCP断开需要四个步骤:

  • 客户端通过发送一个设置了FIN和ACK标志的TCP数据包,告诉服务器通信已经完成

  • 服务器收到客户端的数据后,发送一个ACK数据包来响应客户端

  • 服务器再次向客户端传输一个自己的FIN/ACK数据包

  • 客户端手动啊服务器的FIN/ACK包后,响应服务器一个ACK数据包。然后结束通信。

5、有人机会问, 为什么建立连接只需3步,而断开需要4步?

答: 因为在客户端与服务器建立连接时,当收到客户端发送 的SYN数据后,是把ACK/SYN放在一起发送给客户端的。 但是当断开连接时,当收到客户端发送的FIN数据后,只能说明数据发送完毕,客户端不再发送数据,但是服务还是连接的。只能说明客户端没有数据发送给服务端了,但不代表服务端没有数据要发送给客户端了。当服务器所有的数据都发送完毕后,才会发送FIN/ACK数据,请求断开连接。

Wireshark实战分析之UDP协议

1、什么是UDP协议?

UDP(User Datagram Protocol )用户数据报协议。是OSI七层模型中一种无连接的传输层协议,提供面向事物的简单的不可靠信息传输服务。UDP协议就是一种无连接的网络协议,该协议用来支持那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多客户/服务器模式的网络应用。

2、UDP的特点?

  • UDP是一个无连接的协议,也就是传输数据之前源端口与目地端口不建立连接。
  • UDP由于传输补建立连接,因此也就不需要维护连接状态。
  • UDP信息包的标题很短,只有8个字节。
  • UDP使用最大努力交付,即补保证可靠交付。
  • UDP广泛应用在多媒体应用中,如QQ视频,网络电话等。

3、 UDP的首部格式

未分类

可以看到UDP数据报首部部分共有8个字节

  • 源端口: 用来传输数据包的端口
  • 目标端口: 数据包将要被传输到的端口
  • UDP长度: 数据包字节长度
  • 检验和: 用来确保UDP首部和数据部分的完整性
  • 数据: 被UDP封装进去的数据,包含应用层协议的头部和用户发送的数据

4、抓取UDP的数据包

配置好Wireshark登录QQ,就可以获取到UDP协议的数据包

未分类

其中OICQ就是腾讯QQ的协议,此协议是基于UDP协议的。

5、分析UDP协议

随便选中上述包中的一个即可

未分类

wireshark使用教程及过滤语法总结

wireshark介绍

wireshark的官方下载网站: http://www.wireshark.org/

wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。

wireshark是开源软件,可以放心使用。

Wireshark是一款高效免费的网络抓包分析工具。它可以捕获并描述网线当中的数据,如同使用万用表测量电压一样直观地显示出来。在网络分析软件领域,大多数软件要么晦涩难懂要么价格昂贵,Wireshark改变了这样的局面,它的最大特点就是免费、开源和多平台支持。

Wireshark几乎可以运行于所有流行的操作平台,如MS Windows、Mac OS、Linux、FreeBSD、HP-UX、NetBSD、Solaris/i386、Solaris/sparc等等。尽管Wireshark可以在很多操作平台使用,但它支持的传输媒介主要是Ethernet。只有Linux平台下Wireshark支持802.11及Token Ring、FDDI和ATM。

Wireshark能够对大部分局域网协议进行解析,具有界面简单、操作方便、实时显示捕获数据的优点。但Wireshark并不具有分析功能,当一个网络发生异常的时候,Wireshark只会记录数据,它仅仅是一个测量工具,并不能操作网络,不发送数据包或者做其它的主动动作。

使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。

Wireshark不能做的

为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

什么人会用到wireshark

  1. 网络管理员会使用wireshark来检查网络问题

  2. 软件测试工程师使用wireshark抓包,来分析自己测试的软件

  3. 从事socket编程的工程师会用wireshark来调试

  4. 听说,华为,中兴的大部分工程师都会用到wireshark。

总之跟网络相关的东西,都可能会用到wireshark.

wireshark 开始抓包

wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。然后点击”Start”按钮, 开始抓包

未分类

未分类

Wireshark 窗口介绍

未分类

WireShark 主要分为这几个界面

  1. Display Filter(显示过滤器),用于过滤
  2. Packet List Pane(封包列表),显示捕获到的封包,有源地址和目标地址,端口号。颜色不同,代表
  3. Packet Details Pane(封包详细信息), 显示封包中的字段
  4. Dissector Pane(16进制数据)
  5. Miscellanous(地址栏,杂项)

Wireshark 显示过滤

未分类

使用过滤是非常重要的, 初学者使用wireshark时,将会得到大量的冗余信息,在几千甚至几万条记录中,以至于很难找到自己需要的部分。搞得晕头转向。

过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

过滤器有两种,

  • 一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录

  • 一种是捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录。 在Capture -> Capture Filters 中设置

保存过滤

在Filter栏上,填好Filter的表达式后,点击Save按钮, 取个名字。比如”Filter 102″,

Filter栏上就多了个”Filter 102″ 的按钮。

过滤器的区别

  • 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
  • 显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
  • 那么我应该使用哪一种过滤器呢?
  • 两种过滤器的目的是不同的。
  • 捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。
  • 显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。
  • 两种过滤器使用的语法是完全不同的。

捕捉过滤器

语法:Protocol, Direction, Host(s), Value, Logical, Operations, Other expression

例子: tcp, dst, 10.1.1.180, and, tcp dst 10.2.2.2 3128

Protocol(协议):

可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.

如果没有特别指明是什么协议,则默认使用所有支持的协议。

Direction(方向):

可能的值: src, dst, src and dst, src or dst

如果没有特别指明来源或目的地,则默认使用 “src or dst” 作为关键字。

例如,”host 10.2.2.2″与”src or dst host 10.2.2.2″是一样的。

Host(s):

可能的值: net, port, host, portrange.

如果没有指定此值,则默认使用”host”关键字。

例如,”src 10.1.1.1″与”src host 10.1.1.1″相同。

Logical Operations(逻辑运算):

可能的值:not, and, or.

否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时从左至右进行。

例如

“not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23″相同。

“not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)”不同。

过滤表达式的规则

表达式规则

1、协议过滤

比如TCP,只显示TCP协议。

2、IP 过滤

比如

ip.src ==192.168.1.102 显示源地址为192.168.1.102,
ip.dst==192.168.1.102, 目标地址为192.168.1.102

3、端口过滤

tcp.port ==80,  端口为80的

tcp.srcport == 80,  只显示TCP协议的愿端口为80的。

4、Http模式过滤

http.request.method=="GET",   只显示HTTP GET方法的。

5、逻辑运算符为 AND/ OR

常用的过滤表达式

过滤表达式                                        用途

http                                             只查看HTTP协议的记录
ip.src ==192.168.1.102 or ip.dst==192.168.1.102  源地址或者目标地址是192.168.1.102
eth.addr== 00:11:22:33:44:55                     //过滤目标或源地址是00:11:22:33:44:55的数据包
tcp dst port 3128                                显示目的TCP端口为3128的封包。
ip src host 10.1.1.1                             显示来源IP地址为10.1.1.1的封包。

host 10.1.2.3                                    显示目的或来源IP地址为10.1.2.3的封包。
src portrange 2000-2500                          显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。


src host 10.7.2.12 and not dst net 10.200.0.0/16 显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。

(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8  
                                                 显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络 10.0.0.0/8内的所有封包。

src net 192.168.0.0/24

src net 192.168.0.0 mask 255.255.255.0           显示来源IP地址为10.1.1.1的封包。

注意事项:

当使用关键字作为值时,需使用反斜杠“/”。

“ether proto /ip” (与关键字”ip”相同).

这样写将会以IP协议作为目标。

“ip proto /icmp” (与关键字”icmp”相同).

这样写将会以ping工具常用的icmp作为目标。

可以在”ip”或”ether”后面使用”multicast”及”broadcast”关键字。

当您想排除广播请求时,”no broadcast”就会非常有用。

Protocol(协议):

您可以使用大量位于OSI模型第2至7层的协议。点击”Expression…”按钮后,您可以看到它们。

比如:IP,TCP,DNS,SSH

String1, String2 (可选项):

协议的子类。

点击相关父类旁的”+”号,然后选择其子类。

Comparison operators (比较运算符):

可以使用6种比较运算符:

英文写法:   C语言写法:  含义:
eq          ==          等于
ne          !=          不等于
gt          >           大于
lt          <           小于
ge          >=          大于等于
le          <=          小于等于

Logical expressions(逻辑运算符):

英文写法:   C语言写法:  含义:
and         &&          逻辑与
or          ||          逻辑或
xor         ^^          逻辑异或
not         !           逻辑非

显示过滤器

语法: Protocol, String 1, String 2, Comparison operator, Value, Logical Operations, Other expression

例子: ftp, passive, ip, ==, 10.2.3.4, xor, icmp.type

例子:

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:除了10.1.2.3以外任意;目的IP:任意
    以及
  • 来源IP:任意;目的IP:除了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的封包。

换句话说,显示的封包将会为:

  • 来源IP:除了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标志的封包。

如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。

wireshark过滤匹配表达式实例

匹配过滤HTTP的请求URI中含有”.gif”字符串,并且以.gif结尾(4个字节)的http请求数据包($是正则表达式中的结尾表示符)

http.request.uri matches ".gif$" 

注意区别:http.request.uri contains “.gif$” 与此不同,contains是包含字符串”.gif$”(5个字节)。匹配过滤HTTP的请求URI中含有”.gif$”字符串的http请求数据包(这里$是字符,不是结尾符)

搜索过滤MAC地址前3个字节是0x001e4f的数据包。

eth.addr[0:3]==00:1e:4f 

搜索按条件过滤udp的数据段payload(数字8是表示udp头部有8个字节,数据部分从第9个字节开始udp[8:])

udp[8]==14                        (14是十六进制0x14)匹配payload第一个字节0x14的UDP数据包

udp[8:2]==14:05                    可以udp[8:2]==1405,且只支持2个字节连续,三个以上须使用冒号:分隔表示十六进制。 (相当于 udp[8]==14 and udp[9]==05,1405是0x1405)

udp[8:3]==22:00:f7                 但是不可以udp[8:3]==2200f7

udp[8:4]==00:04:00:2a,            匹配payload的前4个字节0x0004002a

而udp contains 7c:7c:7d:7d         匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。

udp[8:4] matches "\x14\x05\x07\x18"

udp[8:] matches "^\x14\x05\x07\x18\x14"

搜索按条件过滤tcp的数据段payload(数字20是表示tcp头部有20个字节,数据部分从第21个字节开始tcp[20:])

tcp[20:] matches "^GET [ -~]*HTTP/1.1\x0d\x0a"

等同http matches "^GET [ -~]*HTTP/1.1\x0d\x0a"


tcp[20:] matches "^GET (.*?)HTTP/1.1\x0d\x0a"

tcp[20:] matches "^GET (.*?)HTTP/1.1\x0d\x0a[\x00-\xff]*Host: (.*?)pplive(.*?)\x0d\x0a"

tcp[20:] matches "^GET (.*?)HTTP/1.1\x0d\x0a[\x00-\xff]*Host: "

tcp[20:] matches "^POST / HTTP/1.1\x0d\x0a[\x00-\xff]*\x0d\x0aConnection: Keep-Alive\x0d\x0a\x0d\x0a"

检测SMB头的smb标记,指明smb标记从tcp头部第24byte的位置开始匹配。

tcp[24:4] == ff:53:4d:42

检测SMB头的smb标记,tcp的数据包含十六进制ff:53:4d:42,从tcp头部开始搜索此数据。

tcp contains ff:53:4d:42

tcp matches "\xff\x53\x4d\x42"

检测tcp含有十六进制01:bd,从tcp头部开始搜索此数据。

tcp matches "\x01\xbd"

检测MS08067的RPC请求路径

tcp[179:13] == 00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00
                 .     .          .     .

封包列表(Packet List Pane)

封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。

你也可以修改这些显示颜色的规则, View ->Coloring Rules.

未分类

封包详细信息 (Packet Details Pane)

这个面板是我们最重要的,用来查看协议中的每一个字段。

各行信息分别为

Frame:                          物理层的数据帧概况

Ethernet II:                    数据链路层以太网帧头部信息

Internet Protocol Version 4:    互联网层IP包头部信息

Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP

Hypertext Transfer Protocol:    应用层的信息,此处是HTTP协议

未分类

TCP包的具体内容

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

未分类

实例分析TCP三次握手过程

看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例

未分类

这图我都看过很多遍了, 这次我们用wireshark实际分析下三次握手的过程。

打开wireshark, 打开浏览器输入 http://www.cnblogs.com/tankxiao

在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击”Follow TCP Stream”,

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

未分类

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图

未分类

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图

未分类

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

未分类

就这样通过了TCP三次握手,建立了连接。