【ABC】Tcp抓包以及tcp状态解释

Tcp抓包以及tcp状态解释
https://www.cnblogs.com/yanwei-wang/p/6170431.html
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 hotoracehotorace
截获主机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)'

报文分析笔记---常见wireshark报文标记 - 灰信网(软件开发博客聚合)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值