Tcp抓包以及tcp状态解释
- tcp三次握手
发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。
- tcp连接状态
SYN:同步标志。同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
ACK:确认标志。确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
RST:复位标志。复位标志有效。用于复位相应的TCP连接。
URG:紧急标志。紧急(The urgent pointer) 标志有效。紧急标志置位,
PSH:推标志。该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
FIN:结束标志。带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。
.TCP的几个状态对于我们分析所起的作用。在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:
- SYN表示建立连接
- FIN表示关闭连接
- ACK表示响应
- PSH表示有 DATA数据传输
- RST表示连接重置
其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在
DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
- tcp常见错误状态
- Tcp previous segment lost(tcp先前的分片丢失)
- Tcpacked lost segment(tcp应答丢失)
- Tcp window update(tcp窗口更新)
- Tcp dup ack(tcp重复应答)
- Tcp keep alive(tcp保持活动)
- Tcp retransmission(tcp重传)
- Tcp ACKed unseen segument (tcp看不见确认应答)
- tcp port numbers reused(tcp端口重复使用)
- tcp retransmission(tcp重传)
- tcp fast retransmission (tcp快速重传)
- TCP Previoussegment lost(发送方数据段丢失)
- tcp spurious retransmission(tcp伪重传)
- tcp抓包工具tcpdump和wireshark
在linux下tcpdump是一个很强大的tcp抓包工具,但是由于linux分析不方便,因此可以将抓包数据保存到.cap文件中,然后在windos下使用wireshark进行分析,非常方便。
- tcpdump抓包命令
tcpdump tcp -i eth2 -s 0 and port 20058 -w /home/pjroot/attence.cap
tcpdump tcp -i eth2 -t -s 0 -c 100 and port 20058 -w /home/pjroot/attence.cap
tcpdump tcp -i eth2 -s 0 and port 20058 and host 125.77.252.211 -w ./attence.cap
-i eth2 指定数据包经过的网卡
-s 0 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
port 指定端口 可以加上src 和dst表示现在为源端口还是目的端口
host 指定主机可以加上src和dst表示源地址还是目的地址
-w 表示要写入到文件中
-t 表示不显示时间戳
-c 100 表示只抓取初始的100个数据包
打印所有进入或离开sundown的数据包.
tcpdump host sundown
也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump host 210.27.48.1
打印helios 与 hot 或者与 ace 之间通信的数据包
tcpdump host helios and \( hot or ace \)
截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host ace and not helios
如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname
监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname
如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。
- tcpudp命令参数说明
-i any : 监听所有接口
-n : 不解析主机名
-nn : 不解析主机名和端口名
-X : 以16进制和ascii格式显示包
-XX : 和-X一样,但会显示以太网头
-v, -vv, -vvv : 获取包含信息量更多的包
-c : 获取指定数量的包,达到该数量后tcpdump停止
-S : 显示绝对序列号
-e : 获取以太网头
-q : 显示少量的协议信息
-E : 通过密钥来解密IPSEC交互
-s : 设置snaplength(snaplength是抓取的字节数)
- host // 根据ip地址查询交互(不用"-n"也能根据主机名查询交互)
# tcpdump host 1.2.3.4
- src,dst // 找出指定源地址或目的地址的交互
# tcpdump src 2.3.4.5
# tcpdump dst 3.4.5.6
- net // 根据网络号抓取整个网络
# tcpdump net 1.2.3.0/24
- proto // 工作在tcp,udp,和icmp。注意你不用必须输入proto。
# tcpdump icmp
- port // 查看经过指定端口的交互
# tcpdump port 3389
- src,dst port // 找出指定源端口或目的端口的交互
# tcpdump src port 1025
# tcpdump dst port 389
- src/dst, port, protocol // 将三个联合在一起
# tcpdump src port 1025 and tcp
# tcpdump udp and src port 53
你也可以用选项来找出多个端口而不用一一指定,也可以仅查看大于或小于某一字节大小的包。
- Port Ranges // 查看经过范围内端口的交互
tcpdump portrange 21-23
- Packet Size Filter // 查看大于或小于某一字节大小的包
tcpdump less 32
tcpdump greater 128
也可以用符号来代替
tcpdump > 32
tcpdump <= 128
写到一个文件
tcpdump用"-w"选项可以将抓到的内容存入文件,再用"-r"选项读回来,这个功能非常好,可以抓取原始交互之后再用其他工具运行它。
以这种方式抓取到的交互会存成tcpdump格式的文件,现在网络分析圈内基本都用这种格式,因此文件可以被所有工具读取,包括Wireshark, Snort等。
- 抓取所有经过端口80的交互存入一个文件
# tcpdump -s 1514 port 80 -w capture_file
- 以后可以再读回来
# tcpdump -r capture_file
更多的例子
# 从10.5.2.3到端口3389的tcp交互
tcpdump -nnvvS and src 10.5.2.3 and dst port 3389
# 从网络192.168到网络10或172.16的交互
tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
# 从192.168.0.2到网络172.16的非icmp交互
tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net and not icmp
# 从Mars或Pluto到非SSH端口的交互
tcpdump -vv src Mars or Pluto and not dst port 22
分组
如果你试图运行这个本来非常有用的命令,因为括号的原因会报错,可以对括号进行转义(前面加"/")或者将整个命令放在单引号中:
# 从10.0.2.4到端口3389或22的交互(正确的表达)
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'
Tcp抓包以及tcp状态解释的更多相关文章
- Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...
- 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...
- Wireshark抓包工具--TCP数据包seq ack等解读
1.Wireshark的数据包详情窗口,如果是用中括号[]括起来的,表示注释,在数据包中不占字节 2.在二进制窗口中,如“DD 3D”,表示两个字节,一个字节8位 3.TCP数据包中,seq表示这个包 ...
- [转]Wireshark抓包工具--TCP数据包seq ack等解读
原文: http://blog.csdn.net/wang7dao/article/details/16805337/ ---------------------------------------- ...
- Wireshark抓包分析TCP“三次握手,四次挥手”
1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...
- 网络知识===wireshark抓包出现“TCP segment of a reassembled PDU”的解释(载)
网上胡说八道,众说风云,感觉这篇还算靠谱点. 原文链接:http://blog.csdn.net/dog250/article/details/51809566 为什么大家看到这个以后总是会往MSS, ...
- wireshark抓包分析tcp连接与断开
其实对于网络通信的学习,最好还是能够自己抓到包详细地一下,不然只单单通过文字和图的描述印象不够深刻.本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的. 首先需要去https://www.wir ...
随机推荐
- 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)
1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...
- 【HDU 3709】 Balanced Number (数位DP)
Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...
- CSS六大选择器(注释css表里不能加注释!!)
@charset "utf-8"; /* CSS Document */ <!--标签控制器--> body{ background-color:#F00} <! ...
- android 中对apache httpclient及httpurlconnection的选择
在官方blog中,android工程师谈到了如何去选择apache client和httpurlconnection的问题: 原文见http://android-developers.blogspot ...
- nini
using Nini.Ini; using Nini.Config; IniDocument doc = new IniDocument("Settings.ini", IniFi ...
- win7常用键
(1)xp和win7中都可以使用Alt+Tab中进行标签切换,win7中添加了Wins+Tab可以进行3D标签切换. (2)你知道怎样一次过调整显示器亮度.音量大小,打开无线网,还能够看到本本电池电量 ...
- C#的类成员初始化顺序
C#的类成员的定义和声明如下 using UnityEngine; using System.Collections; public class TestController : ECControll ...
- Ajax初步实现页面局部内容更替
类似于QQ邮箱的那种局部页面跳转,单页应用常用到,目前很多网页都是这种,但是弊端就是一次加载过多资源,首次加载卡出翔啊
- sqlmap win32下命令集合
http://testphp.vulnweb.com/artists.php?artist=1 #库 注意:--前面有一个空格 C:\Python27\sqlmap>sqlmap.py - ...
- GPGPU OpenCL/CUDA 高性能编程的10大注意事项
转载自:http://hc.csdn.net/contents/content_details?type=1&id=341 1.展开循环 如果提前知道了循环的次数,可以进行循环展开,这样省去了 ...