tcpdump抓包分析TCP三次握手过程

news/2024/5/17 19:25:21 标签: tcp, file, 网络, dst, interface, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

ceinline;">转:http://hi.baidu.com/xxjjyy2008/blog/item/e6566bf837d91903d9f9fdd0.html

ceinline;">一、 class="tags" href="/tags/TCP.html" title=tcp>tcpdump使用

ceinline;">1、首先看下MAN手册

ceinline;">TCPDUMP(8)                                                                                                                                                        

class="blogstory">ceinline;">NAME
       class="tags" href="/tags/TCP.html" title=tcp>tcpdump - dump traffic on a network

class="blogstory">ceinline;">SYNOPSIS
       class="tags" href="/tags/TCP.html" title=tcp>tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
               [ -C class="tags" href="/tags/FILE.html" title=file>file_size ] [ -F class="tags" href="/tags/FILE.html" title=file>file ]
               [ -i class="tags" href="/tags/INTERFACE.html" title=interface>interface ] [ -m module ] [ -M secret ]
               [ -r class="tags" href="/tags/FILE.html" title=file>file ] [ -s snaplen ] [ -T type ] [ -w class="tags" href="/tags/FILE.html" title=file>file ]
               [ -W class="tags" href="/tags/FILE.html" title=file>filecount ]
               [ -E
ceinline;">spi@ipaddrceinline;"> algo:secret,... ]
               [ -y datalinktype ] [ -Z user ]
               [ expression ]

ceinline;">选项:

ceinline;">-A        以ASCII码显示消息包

ceinline;">-c         指定包个数

ceinline;">-C        配合-w࿰c;当写入文件时࿰c;先检查文件大小是否已经超过1M࿰c;若超过࿰c;生成新文件࿰c;文件名为指定文件名加后缀1。

ceinline;">-d        将匹配信息包的代码以人们能够理解的汇编格式给出

ceinline;">-dd      将匹配信息包的代码以c语言程序段的格式给出

ceinline;">-ddd    将匹配信息包的代码以十进制的形式给出。

ceinline;">-D        列出可以抓包的所有class="tags" href="/tags/WangLuo.html" title=网络>网络接口

ceinline;">-e        显示链路层内容

ceinline;">-f         外部的IP以数字方式显示

ceinline;">-i         指定class="tags" href="/tags/WangLuo.html" title=网络>网络接口

ceinline;">-l         使标准输出变为缓冲行形式

ceinline;">-n        IP࿰c;端口用数字方式显示

ceinline;">-t    在输出的每一行不打印时间戳;
-v    输出一个稍微详细的信息࿰c;例如在ip包中可以包括ttl和服务类型的信息;
-vv   输出详细的报文信息;
-c    在收到指定的包的数目后࿰c;class="tags" href="/tags/TCP.html" title=tcp>tcpdump就会停止;
-F    从指定的文件中读取表达式,忽略其它的表达式;
-i    指定监听的class="tags" href="/tags/WangLuo.html" title=网络>网络接口;
-r    从指定的文件中读取包(这些包一般通过-w选项产生);
-w   直接将包写入文件中࿰c;并不分析和打印出来;
-T    将监听到的包直接解释为指定的类型的报文࿰c;常见的类型有rpc (远程过程调用)和snmp(简单class="tags" href="/tags/WangLuo.html" title=网络>网络管理协议;)

ceinline;">-x        让十六进制显示包内容

class="blogstory">ceinline;">2、过滤

ceinline;">(1)指定接口(-i)

ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump -i eth0

class="blogstory">ceinline;">(2)指定IP地址(host)࿰c;可以辅加and , or ࿰c;!等逻辑符࿰c;以及srcc;dest等表示方向。

ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump host 192.168.1.23 捕获192.168.1.23发出或者收到的包

ceinline;">class="tags" href="/tags/TCP.html" title=tcp>tcpdump -A host 192.168.1.90 and /( 192.168.1.104 or 192.168.1.105 /) 捕获192.168.1.23与192.168.1.104或者192.168.1.105之间往来的包

ceinline;">class="tags" href="/tags/TCP.html" title=tcp>tcpdump host ! 192.168.1.23 捕获除192.168.1.23以外所有主机的包

ceinline;">class="tags" href="/tags/TCP.html" title=tcp>tcpdump -A src 192.168.1.90 and class="tags" href="/tags/DST.html" title=dst>dst 192.168.1.104 指定从90发往104的包

class="blogstory">ceinline;">(3)指定端口(port)

ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump port 80 指定捕获80端口的包

class="blogstory">ceinline;">(4)指定协议( 协议包括:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, class="tags" href="/tags/TCP.html" title=tcp>tcp and udp)

ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump class="tags" href="/tags/TCP.html" title=tcp>tcp 指定捕获TCP包

class="blogstory">ceinline;">(5)其它(gateway, broadcast, less, greater)

ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump broadcast 所有广播包

class="blogstory">ceinline;">二、三次握手过程分析

ceinline;">用netstat -an | grep LISTEN看一下࿰c;当前主机正在监听的端口࿰c;使用另一台机telnet过来࿰c;不输入任何内容࿰c;进行抓包。

ceinline;">我们这里以6000为例

ceinline;">class="tags" href="/tags/TCP.html" title=tcp>tcpdump port 6000 -c 3 -n

class="blogstory">ceinline;">内容如下:

class="blogstory">ceinline;">21:07:17.790296 IP 192.168.1.104.2511 > 192.168.1.90.6000: S 3359422806:3359422806(0) win 64240 <mss1460,nop,nop,sackOK>
21:07:17.790317 IP 192.168.1.90.6000 > 192.168.1.104.2511: S 3675079922:3675079922(0) ack 3359422807 win5840 <mss 1460,nop,nop,sackOK>
21:07:17.790675 IP 192.168.1.104.2511 > 192.168.1.90.6000: . ack 1 win 64240

class="blogstory">ceinline, Arial, Helvetica, sans-serif; font-size: small; ">我们来对第一个包进行分析:

ceinline;">21:07:17(时间).

ceinline;">790296(ID号)

ceinline;">IP (协议)

ceinline;">192.168.1.104.2511 > 192.168.1.90.6000: (源IP࿰c;端口࿰c;目的IP࿰c;端口)中间>表示方向

ceinline;">S (表示为SYN包࿰c;即发起连接包  

ceinline;">    紧急指针— URG
    确认序号有效—ACK
    接收方应该尽快将这个报文段交给应用层—PSH
    重建连接—RST
    同步序号用来发起一个连接—SYN
    发端完成发送任务—IN
)

ceinline;">3359422806:3359422806(0) (IP包序号࿰c;相对序号为0)

ceinline;">win 64240 (数据窗口大小࿰c;告诉对方本机接收窗口大小࿰c;windows下默认为64240࿰c;可通过setsockopt动态修改࿰c;同样可以通过修改注册表项(HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters的TCPWindowSize)来更改默认值)

ceinline;"><mss1460,nop,nop,sackOK> 对应TCP包头中的选项字段

ceinline;">  MSS: Maxitum Segment Size 最大分段大小࿰c;MSS表示TCP传往另一端的最大块数据的长度。当一个连接建立时࿰c;连接的双方都要通告各自的MSS。如果一方不接收来自另一方的MSS值࿰c;则MSS就定为默认的536字节。

ceinline;">以上三个包正好是TCP连接的三次握手过程:

ceinline;">(1) A主机发送序号为3359422806的SYN包到B࿰c;同时带有自身的WIN和MSS大小。

ceinline;">(2) B主机收到后࿰c;发送SYN+ACK的返回包到A࿰c;也带自身的WIN和MSS大小࿰c;3675079922࿰c;同时为为上一个包的应答包3359422807。

ceinline;">(3) A主机返回ACK࿰c;包序号为1(相对序号࿰c;如果需要看绝对序号࿰c;可以在class="tags" href="/tags/TCP.html" title=tcp>tcpdump命令中加-S)

ceinline;">c="http://hi.csdn.net/attachment/201010/9/0_12866089332Y90.gif" alt="" />

class="blogstory">ceinline, Arial, Helvetica, sans-serif; font-size: small; ">然后我们再来分析一下包的具体内容:

ceinline;">我们在class="tags" href="/tags/TCP.html" title=tcp>tcpdump命令中加-x选项࿰c;后可得到如下内容:

ceinline;">22:07:13.436638 IP 192.168.1.104.2799 > 192.168.1.90.6000: S 3480877812:3480877812(0) win 64240 <mss 1460,nop,nop,sackOK>
    0x0000: 4500 0030 b195 4000 8006 c51f c0a8 0168
    0x0010: c0a8 015a 0aef 1770 cf79 faf4 0000 0000
    0x0020: 7002 faf0 174e 0000 0204 05b4 0101 0402
22:07:13.436675 IP 192.168.1.90.6000 > 192.168.1.104.2799: S 4226616929:4226616929(0) ack 3480877813 win 5840 <mss 1460,nop,nop,sackOK>
    0x0000: 4500 0030 0000 4000 4006 b6b5 c0a8 015a
    0x0010: c0a8 0168 1770 0aef fbed 0e61 cf79 faf5
    0x0020: 7012 16d0 f10e 0000 0204 05b4 0101 0402
22:07:13.437019 IP 192.168.1.104.2799 > 192.168.1.90.6000: . ack 1 win 64240
    0x0000: 4500 0028 b196 4000 8006 c526 c0a8 0168
    0x0010: c0a8 015a 0aef 1770 cf79 faf5 fbed 0e62
    0x0020: 5010 faf0 39b2 0000

ceinline;">还是一样࿰c;我们对第一个包进行分析࿰c;第一个包为SYN包࿰c;应该为一个空包࿰c;即只包括IP头和TCP头。
IP包头
4 - IP版本号 IPV4
5 - IP包头长度 5个32字节
00 - TOS (000 0000 0)前三个BIT优先权࿰c;现已忽略;4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用࿰c; 均为0表示一般服务;最后1BIT未用。
0030 -总长度࿰c;48个字节
b195 -包唯一标识
4000 -标志字段࿰c;和片偏移࿰c;用于分片
80 - TTL(128)
06 - 协议 TCP
c51f - MAC
c0a8 0168 - SRC IP࿰c;可以inet_ntoa转换成点号分隔的IP。
c0a8 015a - DST IP
TCP包头
0aef -源端口࿰c;十进制为2799
1770 -目的端口࿰c;十进制为6000
cf79 faf4 包序号࿰c;十进制为217554863
0000 0000 确认序号࿰c;0࿰c;未设置ACK࿰c;确认序号无效
7002 -TCP包头长度࿰c;标志位。(0111 000000 000010)前4bitTCP长度7个32BIT࿰c;中间6bit保留࿰c;后6bit为标志位(URG, ACK࿰c;PSH࿰c; RST࿰c; SYN࿰c; FIN)࿰c;可以看出设置了倒数第二位࿰c;SYN位。
faf0 - 窗口大小࿰c;十进制为64240
174e - 校验和࿰c;覆盖了整个的 T C P报文段: T C P首部和T C P数据
0000 - 紧急指针࿰c; 只有当URG标志置1时紧急指针才有效
0204 05b4 0101 0402 - 选项字段࿰c;8个字节

cle>

http://www.niftyadmin.cn/n/923422.html

相关文章

epoll

I/O多路复用技术在比较多的TCP网络服务器中有使用&#xff0c;即比较多的用到select函数。在linux2.6内核中&#xff0c;有了一种替换它的机制&#xff0c;就是epoll。 一、epoll相关的数据结构和函数 epoll用到的所有函数都是在头文件sys/epoll.h中声明的&#xff0c;下面简…

多进程服务器中,epoll的创建应该在创建子进程之后

转&#xff1a;http://blog.csdn.net/wei801004/archive/2009/06/13/4264031.aspx 看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调用,一个在创建epoll fd之前,一个在之后,在调用在创建之前的代码…

c语言共用体对齐

还从网上找到共用体内存分配原则的文章&#xff0c;下面列几个例子说明&#xff1a; 1.Union data1{ double d; int i; char c1; char c2[9]; }; sizeof(union data1)的值为16.在编译器默认设置的情况下&#xff0c;该共用体最大基本类型为double,它占8字节&#…

gdb调试正在运行的进程

转&#xff1a;http://hi.baidu.com/brady_home/blog/item/6b92aa8ffdfee2e6f01f369b.html 有时会遇到一种很特殊的调试需求&#xff0c;对当前正在运行的其它进程进行调试&#xff08;正是我今天遇到的情形&#xff09;。这种情况有可能发生在那些无法直接在调试器中运行的进…

find和xargs命令

http://bbs.chinaunix.net/thread-1387521-1-1.html 想好好学习的同学&#xff0c;请认真看完&#xff0c;有点长。 能很好的用好find将是Linux工作的一大幸事&#xff0c;不要奢望一口气记住本文所有的方法&#xff0c;要慢慢的去尝试和领会这…

c语言运算符优先级列表

优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 &#xff08;表达式&#xff09;/函数名(形参表) . 成员选择&#xff08;对象&#xff09; 对象.成员名 -> 成员选择&#xff08;指针&#xff0…

gcc如何生成库链接参数

1.gcc包含的c/c编译器 gcc,cc,c,g,gcc和cc是一样的&#xff0c;c和g是一样的。一般c程序就用gcc编译&#xff0c;c程序就用g编译。 2.gcc的基本用法 gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序&#xff0c;-o参数用来指定生成…

linux解压缩tar命令

转&#xff1a;http://blog.csdn.net/teamlet/archive/2008/02/18/2104262.aspx 本文引用了两部分tar的说明&#xff0c;第一部分是举例说明使用tar。第二部分是详细的参数说明。 第一部分&#xff1a; tar命令 tar [-cxtzjvfpPN] 文件与目录 .... 参数&#xff1a; -c …