tcp三次握手抓包格式分析(tcp三次握手和四次挥手的全过程)

      最后更新:2023-07-14 20:28

      如何抓包tcp 三次握手的内容

      [RST]是复位标志,用于复位相应的TCP连接。 此问题详细请百度 “TCP标志位" 复位到重新发送同步请求应该是TCP/IP协议有时间间隔的规定吧,我也不清楚,请查TCP/IP详解。
      如何抓包tcp 三次握手的内容

      网络三次握手协议==抓包和分析。看看为什么老是连接不上

      [RST]是复位标志,用于复位相应的TCP连接。 此问题详细请百度 “TCP标志位" 复位到重新发送同步请求应该是TCP/IP协议有时间间隔的规定吧,我也不清楚,请查TCP/IP详解。
      网络三次握手协议==抓包和分析。看看为什么老是连接不上

      TCP三次握手原理

      本文主要内容1、TCP数据包格式TCP数据包格式如下:注意到中间还有几个标志位:数据包格式当中,最重要的是理解序号和确认序号。TCP为什么是稳定可靠的,与序号与确认序号这套机制紧密相关,这也是TCP的精髓。2、TCP的三次握手众所周知,TCP协议是可靠的,而UDP协议是不可靠的。在一些场景中必须用TCP,比如说用户登录,必须给出明确答复是否登录成功等。而有些场景中,用户是否接收到数据则不那么关键,比如网络游戏当中,玩家射出一颗子弹,另外的玩家是否看到,完全取决于当前网络环境,如果网络卡顿,就会有玩家已经被射杀,但界面仍然刷新不出来的情况。这种情形适合UDP。为了保证TCP协议可靠,在建立连接之时就要得到保证。最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)B服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。3、TCP的传输和确认TCP 传输的可靠性,可以用一句话归结:每收到对方数据,就发送 ACK 进行确定,发送方发送后没有收到 ACK 就隔一段时间重发。就是 A 向 B 发送消息(下面将 TCP 的报文直接看做是消息,消息一词跟 TCP 报文混用),B 收到消息后需要向 A 发送 ACK。这个 ACK 相当于返回结果,没有返回结果,A 就重新发送消息。归纳起来,A 有 3 种消息需要确认。另外 A 也可以发送 RST 消息,代表出错了。出错消息不需要确认。RST 也可以当成返回接口,替代正常的 ACK。返回 ACK,表示消息发送并处理成功,返回 RST 表示消息处理失败。因为通过网络传输,还有第三种结果,就是不确定成功失败。这样归纳起来。就有三种返回结果。这两种具体情况,A 根本识别不了,都只能重发。4、TCP的序号和确认序号A 向 B 发送消息,假如同时发送 a、b、c、d 消息,因为通过网络,这些消息的顺序并非固定的。而 B 返回 ACK 结果,这样就有一个问题,这个结果到底对应了哪个消息?另外当 A 超时重发后,原来的消息延时一段时候,又重新到达了 B,这样 B 就收到两条相同的消息,那么 B 怎么确定这两条消息是相同的呢?为了解决这个对应问题,每一条消息都需要有一个编号,返回结果也应该有一个编号。TCP 的序号可以看成是发送消息的编号,确认序号可以看成是返回结果的编号。有了编号,重复的消息才可以忽略,返回结果(ACK)才可以跟消息对应起来。当建立连接的时候,TCP 选定一个初始序号,之后每发送一个数据包(消息),就将序号递增,保证每发送不同的数据包,数据包的序号都是不同的。TCP 是这样处理的:SYN、FIN 也需要递增序号。不然 A 向 B 重发多个 SYN 或者 FIN, B 根本判断不了 SYN 是否相同,这样就不可以忽略重复的数据包了。当 TCP 发送 ACK 时,相当于返回结果,需要带有确认序号,以便跟发送的消息对应起来。当发送包编号为 a,递增长度为 len。其中 SYN 和 FIN 可以看成是递增长度为 1。这条消息可以这样表示为:现在来回顾三次握手过程。 A 发送序列号x给 B , B 回复 A 确认号 x+ 1,同时发送序列号 y, A 接收到 B 的回复后,再回复确认号 y+1,同时发送序列号 x+1。给对方的回复一定是接收到的序号加1(或者是数据长度),这样对方才能知道我已经收到了,这样才能保证TCP是可靠的。
      TCP三次握手原理

      Tcpdump 看这一篇就够了

      tcpdump是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。熟悉 tcpdump 的使用能够帮助你分析调试网络数据,本文将通过一个个具体的示例来介绍它在不同场景下的使用方法。不管你是系统管理员,程序员,云原生工程师还是 yaml 工程师,掌握 tcpdump 的使用都能让你如虎添翼,升职加薪。 tcpdump的常用参数如下:额外再介绍几个常用参数:-A表示使用ASCII字符串打印报文的全部数据,这样可以使读取更加简单,方便使用grep等工具解析输出内容。 -X表示同时使用十六进制和ASCII字符串打印报文的全部数据。这两个参数不能一起使用。例如:后面可以跟上协议名称来过滤特定协议的流量,以UDP为例,可以加上参数udp或protocol 17 ,这两个命令意思相同。同理, tcp与protocol 6意思相同。使用过滤器host可以抓取特定目的地和源IP地址的流量。也可以使用src或dst只抓取源或目的地:使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。-w选项用来把数据报文输出到文件:如果想实时将抓取到的数据通过管道传递给其他工具来处理,需要使用-l选项来开启行缓冲模式(或使用-c选项来开启数据包缓冲模式)。使用 -l选项可以将输出通过立即发送给其他命令,其他命令会立即响应。过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/&& 、 或/OR/|| 和 非/not/!。关于 tcpdump 的过滤器,这里有必要单独介绍一下。机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!Host 过滤器用来过滤某个主机的数据报文。例如:该命令会抓取所有发往主机 1.2.3.4 或者从主机 1.2.3.4 发出的流量。如果想只抓取从该主机发出的流量,可以使用下面的命令:Network 过滤器用来过滤某个网段的数据,使用的是 CIDR[2] 模式。可以使用四元组(x.x.x.x)、三元组(x.x.x)、二元组(x.x)和一元组(x)。四元组就是指定某个主机,三元组表示子网掩码为 255.255.255.0,二元组表示子网掩码为 255.255.0.0,一元组表示子网掩码为 255.0.0.0。例如,抓取所有发往网段 192.168.1.x 或从网段 192.168.1.x 发出的流量:抓取所有发往网段 10.x.x.x 或从网段 10.x.x.x 发出的流量:和 Host 过滤器一样,这里也可以指定源和目的:也可以使用 CIDR 格式:Proto 过滤器用来过滤某个协议的数据,关键字为 proto,可省略。proto 后面可以跟上协议号或协议名称,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp和 tcp。因为通常的协议名称是保留字段,所以在与 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。例如,抓取 icmp 协议的报文:Port 过滤器用来过滤通过某个端口的数据报文,关键字为 port。例如:截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。> 符号代表数据的方向。此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:下面给出一些具体的例子,每个例子都可以使用多种方法来获得相同的输出,你使用的方法取决于所需的输出和网络上的流量。我们在排障时,通常只想获取自己想要的内容,可以通过过滤器和 ASCII 输出并结合管道与 grep、cut、awk 等工具来实现此目的。例如,在抓取 HTTP 请求和响应数据包时,可以通过删除标志 SYN/ACK/FIN 来过滤噪声,但还有更简单的方法,那就是通过管道传递给 grep。在达到目的的同时,我们要选择最简单最高效的方法。下面来看例子。从 HTTP 请求头中提取 HTTP 用户代理:通过 egrep 可以同时提取用户代理和主机名(或其他头文件):抓取 HTTP GET 流量:也可以抓取 HTTP POST 请求流量:注意:该方法不能保证抓取到 HTTP POST 有效数据流量,因为一个 POST 请求会被分割为多个 TCP 数据包。上述两个表达式中的十六进制将会与 GET 和 POST 请求的 ASCII 字符串匹配。例如,tcp[((tcp[12:1] & 0xf0) >> 2):4] 首先会确定我们感兴趣的字节的位置[3](在 TCP header 之后),然后选择我们希望匹配的 4 个字节。提取 HTTP 请求的主机名和路径:从 HTTP POST 请求中提取密码和主机名:提取 Set-Cookie(服务端的 Cookie)和 Cookie(客户端的 Cookie):查看网络上的所有 ICMP 数据包:通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包:可以提取电子邮件的正文和其他数据。例如,只提取电子邮件的收件人:抓取 NTP 服务的查询和响应通过 SNMP 服务,渗透测试人员可以获取大量的设备和系统信息。在这些信息中,系统信息最为关键,如操作系统版本、内核版本等。使用 SNMP 协议快速扫描程序 onesixtyone,可以看到目标系统的信息:当抓取大量数据并写入文件时,可以自动切割为多个大小相同的文件。例如,下面的命令表示每 3600 秒创建一个新文件 capture-(hour).pcap,每个文件大小不超过 200*1000000 字节:这些文件的命名为 capture-{1-24}.pcap,24 小时之后,之前的文件就会被覆盖。可以通过过滤器 ip6 来抓取 IPv6 流量,同时可以指定协议如 TCP:从之前保存的文件中读取 IPv6 UDP 数据报文:在下面的例子中,你会发现抓取到的报文的源和目的一直不变,且带有标志位 [S] 和 [R],它们与一系列看似随机的目标端口进行匹配。当发送 SYN 之后,如果目标主机的端口没有打开,就会返回一个 RESET。这是 Nmap 等端口扫描工具的标准做法。本例中 Nmap NSE 测试脚本 http-enum.nse 用来检测 HTTP 服务的合法 URL。在执行脚本测试的主机上:在目标主机上:向 Google 公共 DNS 发起的出站 DNS 请求和 A 记录响应可以通过 tcpdump 抓取到:抓取 80 端口的 HTTP 有效数据包,排除 TCP 连接建立过程的数据包(SYN / FIN / ACK):通常 Wireshark(或 tshark)比 tcpdump 更容易分析应用层协议。一般的做法是在远程服务器上先使用 tcpdump 抓取数据并写入文件,然后再将文件拷贝到本地工作站上用 Wireshark 分析。还有一种更高效的方法,可以通过 ssh 连接将抓取到的数据实时发送给 Wireshark 进行分析。以 MacOS 系统为例,可以通过 brew cask install wireshark 来安装,然后通过下面的命令来分析:例如,如果想分析 DNS 协议,可以使用下面的命令:抓取到的数据:找出一段时间内发包最多的 IP,或者从一堆报文中找出发包最多的 IP,可以使用下面的命令:cut -f 1,2,3,4 -d '.': 以 . 为分隔符,打印出每行的前四列。即 IP 地址。sort | uniq -c : 排序并计数sort -nr: 按照数值大小逆向排序本例将重点放在标准纯文本协议上,过滤出于用户名和密码相关的报文:最后一个例子,抓取 DHCP 服务的请求和响应报文,67 为 DHCP 端口,68 为客户机端口。 本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。将 tcpdump 与 wireshark 进行组合可以发挥更强大的功效,本文也展示了如何优雅顺滑地结合 tcpdump 和 wireshark。如果你想了解更多的细节,可以查看 tcpdump 的 man 手册。
      Tcpdump 看这一篇就够了

      TCP三次握手,通过抓包工具抓到三次握手过程,抓到的包里TCP首部长度等于28(field value=7)这个是什么意

      field value的意思是首部的长度,这里是以4个字节为单位的,所以4*7刚好就是28个字节了,5*4=20个字节了
      楼上正解,接楼上的往下说: TCP三次握手前两个报文需要指出MSS(最大报文长度),这个字段是在TCP选项字段里的,TCP报头由基本20字节和选项字段组成,所以前两个带SYN标志的报文都比20个字节大,至于究竟有多大,要看除了通告MSS之外还有没有使用其他的选项,如seletive ACK, 窗口扩大因子等。后续传输数据的TCP报文一般头长度都是二十字节(如果没有一些扩展选项被使用) 应用程序通过头长度来得知从哪一块起是TCP数据,如果这个指定错误,应用程序无法对数据正确处理。不能更改头长度值。查看一下TCP报头结构,你自然就知道怎么计算了。
      TCP三次握手,通过抓包工具抓到三次握手过程,抓到的包里TCP首部长度等于28(field value=7)这个是什么意

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类