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)
ceinline;">选项:
ceinline;">-A 以ASCII码显示消息包
ceinline;">-c 指定包个数
ceinline;">-C 配合-wc;当写入文件时c;先检查文件大小是否已经超过1Mc;若超过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 IPc;端口用数字方式显示
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 让十六进制显示包内容
ceinline;">(1)指定接口(-i)
ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump -i eth0
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的包
ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump port 80 指定捕获80端口的包
ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump class="tags" href="/tags/TCP.html" title=tcp>tcp 指定捕获TCP包
ceinline;">如:class="tags" href="/tags/TCP.html" title=tcp>tcpdump broadcast 所有广播包
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
ceinline;">21:07:17(时间).
ceinline;">790296(ID号)
ceinline;">IP (协议)
ceinline;">192.168.1.104.2511 > 192.168.1.90.6000: (源IPc;端口c;目的IPc;端口)中间>表示方向
ceinline;">S (表示为SYN包c;即发起连接包
ceinline;"> 紧急指针— URG
确认序号有效—ACK
接收方应该尽快将这个报文段交给应用层—PSH
重建连接—RST
同步序号用来发起一个连接—SYN
发端完成发送任务—IN
)
ceinline;">3359422806:3359422806(0) (IP包序号c;相对序号为0)
ceinline;">win 64240 (数据窗口大小c;告诉对方本机接收窗口大小c;windows下默认为64240c;可通过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包到Bc;同时带有自身的WIN和MSS大小。
ceinline;">(2) B主机收到后c;发送SYN+ACK的返回包到Ac;也带自身的WIN和MSS大小c;3675079922c;同时为为上一个包的应答包3359422807。
ceinline;">(3) A主机返回ACKc;包序号为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="" />
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 IPc;可以inet_ntoa转换成点号分隔的IP。
c0a8 015a - DST IP
TCP包头
0aef -源端口c;十进制为2799
1770 -目的端口c;十进制为6000
cf79 faf4 包序号c;十进制为217554863
0000 0000 确认序号c;0c;未设置ACKc;确认序号无效
7002 -TCP包头长度c;标志位。(0111 000000 000010)前4bitTCP长度7个32BITc;中间6bit保留c;后6bit为标志位(URG, ACKc;PSHc; RSTc; SYNc; 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个字节