tcpdump分析tcp三次握手

tcpdump分析tcp三次握手

1) tcpdump

tcpdump:监听流经一个本机网络接口上的数据,功能非常强劲

使用方法:

tcpdump [options]  [expression]

             options部分命令行选项:

命令

说明

-c num

接受到指定num个符合条件的包就退出

-n

Ip信息用数字显示                                                 

-x

以十六进制方式显示包内容                                      

-X

同时以十六进制、ascii方式显示包内容                                      

-i dev

指定要监听的网络接口   (例如  -i eth0)

注意::

     在同一台机器上进行测试时,最好加上参数:

        -iany

     这样可以接收任何网卡的信息。

-w

把监听的信息写入文件中

-r

从用w选项创建的文件中读取保存的监听信息

-s(数据包大小)

设置每个数据包的大小   -s2400

表示每个数据包的大小是2400

 -n  

显示IP信息,而不是主机名

 -A  

将数据包以ascii方式显示出来

 -d  

把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。

-dd    

把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。

 

           expression 监听网络报的条件表达式,只有符合此条件的数据包才会显示

        条件表达式有一个或多个条件组成

条件类型

常用条件标志

协议条件

ip, ip6, arp, rarp, tcp ,udp.

源/目的条件

src dst

具体条件

host,net,port

其中多个条件可以由关系运算符组合在一起 

关系类型

关系运算符

! 或 not

&& 或 and

|| 或 or

使用实例:

a) 显示所有主机192.168.1.3发送出和接收的数据包

   tcpdump host 192.168.1.3

 

b) 显示主机 A 与主机(B 或 C)之间的交互IP数据包

   tcpdump ip and host A and (B or C)

 

c) 本机地址192.168.1.3 ,显示从主机192.168.5.1网络192.168.1本地53端口udp数据包,但不显示本机发送到本地53端口的数据包,

同时显示十六进制和ASCII方式的数据包内容

tcpdump  -X 'udp and dst host 192.168.1.3 and dst port 53 and (src host 192.168.5.1 or src net 192.168.1) and src not 

localhost'

命令参数说明:

udp数据包             :udp

目的地址192.168.1.3   :dst host 192.168.1.3

目的端口 53           :dst port 53

源主机地址192.168.5.1 :src host 192.168.5.1

源网络地址192.168.1   :src net 192.168.1

非本机发送的包        : src not localhost

注意: -s0 完整显示包内容;类似strace的 -s size

tcpdump解析tcp连接建立和释放
下面命令抓包:
# tcpdump -n -ieth1 'tcp and dst host 172.25.34.88 and port 7012'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
 
1.           14:44:52.174122 IP 172.25.38.145.49563 > 172.25.34.88.7012: S 1986599379:1986599379(0) win 5840 <mss 1460,sackOK,timestamp 3824018401 0,nop,wscale 2>
2.           14:44:52.174249 IP 172.25.34.88.7012 > 172.25.38.145.49563: S 4294961892:4294961892(0) ack1986599380 win 5792 <mss 1460,sackOK,timestamp 1927787323 3824018401,nop,wscale 2>
3.           14:44:52.174228 IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>
4.           14:44:52.174433 IP 172.25.38.145.49563 > 172.25.34.88.7012: P 1:109(108) ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>
5.           14:44:52.174443 IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 109 win 1448 <nop,nop,timestamp 1927787323 3824018401>
6.           14:44:52.186891 IP 172.25.34.88.7012 > 172.25.38.145.49563: P 1:857(856) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>
7.           14:44:52.186914 IP 172.25.34.88.7012 > 172.25.38.145.49563: F 857:857(0) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>
8.           14:44:52.187054 IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 857 win 1888 <nop,nop,timestamp 3824018404 1927787326>
9.           14:44:52.195347 IP 172.25.38.145.49563 > 172.25.34.88.7012: F 109:109(0) ack 858 win 1888 <nop,nop,timestamp 3824018406 1927787326>
10.        14:44:52.195355 IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 110 win 1448 <nop,nop,timestamp 1927787328 3824018406>
 
每一行中间都有这个包所携带的标志:
S=SYN ,     发起连接标志。
P=PUSH ,    传送数据标志
F=FIN ,     关闭连接标志
ack           表示确认包
RST=RESET , 异常关闭连接
.            表示没有任何标志
()           括号中的数字是包的长度,建立连接和关闭连接时,包长都为0,括号前面的都是序列号
上面抓包的过程解析:
 
1 行:14:44:52 这个时间,从172.25.38.145 client )的临时端口49563 172.25.34.88 server )的7012 监听端口发起连接,
                         client 初始包序号1986599379
                               win 滑动窗口大小为 5840 字节滑动窗口 tcp接收缓冲区的大小,用于tcp 拥塞控制),
                                mss 大小为1460(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)。
 
2 行:                  server 响应连接,同时带上第一个包的 ack信息,为client端的初始包序号加1,即1986599380
                                         也即server端下次等待接受这个包序号的包,用于tcp 字节流的顺序控制
                         server 端的初始包序号 4294961892 mss 也是1460
3 行:client 再次确认,tcp 连接三次握手完成。
 
4 行:client 发请求包,包长度108 字节。
5 行:server 响应ack
6 行:server 回包,包长度856 字节。
7 行:client 响应ack 。(这里应该是有问题的,但应该是这样)
 
8 行:client 发起关闭连接请求。
9 行:server 响应ack ,并且也发送FIN 标志关闭。
10 行:客户端响应ack ,关闭连接的四次握手完成。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们来解释一下TCP三次握手的过程: 1. 客户端向服务器发送一个SYN(同步)包,其中包含一个随机生成的初始序号(ISN)2. 服务器收到SYN包后,会回复一个SYN+ACK(同步+确认)包,其中确认号是客户端发送的ISN加1,并且服务器也会生成一个自己的随机序列号。 3. 客户端再次回复一个ACK(确认)包,其中确认号是服务器发送的ISN加1。 这样,TCP连接就建立起来了。现在我们来分析一下抓包数据。 在抓包工具中,你可以使用Wireshark或者tcpdump来捕获网络数据包。当你开始抓包后,你会看到大量的数据包被捕获和显示。 对于TCP三次握手的抓包分析,你需要过滤出与目标IP地址和端口相关的数据包。使用过滤器表达式"tcp.dstport == 目标端口 && ip.dst == 目标IP地址"可以帮助你过滤出特定的数据包。 在抓包的结果中,你应该能够看到三个关键的数据包: 1. SYN包:这是客户端发送的第一个数据包,源IP地址是客户端的IP地址,目标IP地址是服务器的IP地址,源端口是随机生成的,目标端口是服务器监听的端口。 2. SYN+ACK包:这是服务器作为对SYN包的回复发送的数据包,源IP地址是服务器的IP地址,目标IP地址是客户端的IP地址,源端口是服务器监听的端口,目标端口是客户端发送SYN包时的源端口。 3. ACK包:这是客户端作为对SYN+ACK包的回复发送的数据包,源IP地址是客户端的IP地址,目标IP地址是服务器的IP地址,源端口是客户端发送SYN+ACK包时的源端口,目标端口是服务器监听的端口。 通过分析这些数据包的源、目标IP地址、端口号以及序列号和确认号等信息,你可以看到TCP三次握手过程中的交互步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值