首页 > 代码库 > tcpdump

tcpdump

tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s
snaplen ] [ -T type ] [ -w file ] [ 捕捉条件 ]


常用选项:
-S 

     显示绝对的TCP序列号         tcpdump -S
-e      显示链路层头            tcpdump -Se
-vv      显示详细的协议信息         tcpdump -Sevv
-n      不把地址转换成名字         tcpdump -Sevvn
-f      数字形式显示外部的互联网地址      tcpdump -Sevvnf

-i 接口名   指定监听的接口            tcpdump -i eth0
-s      抓包的大小,tcpdump默认只抓68字节   tcpdump -s 1518
-c 数字      指定抓多少个包            tcpdump -Sevvnfc 100 -i eth0
-l > 文件路径   将结果保存到指定文件         tcpdump -Sevvnflc > /tcp.txt 100 -i eth0
-w 文件路径   将原始报文保存到指定文件(不显示)   tcpdump -Sevvfnw /tcp.txt -c 100 -i eth0
      若指定文件为-则标准输出(即能看到)   tcpdump -w -
-r 文件路径   读取以-w保存的文件         tcpdump -r /tcp.txt
      若指定文件为-则从标准输入读取      tcpdump -r -
-x      以十六进制显示每个报文,可以显示较小的完整报文(redhatenterprise下测试最多82个字节,)
,可配合其它使用(不含链路层信息从IP头开始)
                     tcpdump -rx

其它选项用到时可以再去查手册

可配合过滤语法:可通过“and/or/not”组合使用
根据地址类型匹配
    srcip地址
    dstip地址
    ip地址ip地址
    src net网络号
    dst net网络号
    网络号网络号
    网络号 网络号 掩码掩码
    net网络号/掩码长度
    ether dstMAC地址
    ether srcMAC地址
    ether 原MAC目的MAC
    etherbroadcast    //二层广播
    ipbroadcast      //三层广播
    ethermulticast    //二层多播
    ipmulticast      //三层多播
    gatewayip地址      //若报文将该IP当做网关就匹配

根据端口匹配

    src port端口
    dst port端口      //不分tcp、udp
    源端口目的端口
    tcp src port端口    

根据报文长度匹配

    less长度      //报文长度小于等于指定就匹配
    len <=长度
    greater长度      //大于等于该长度就匹配
    len >=长度

根据协议匹配   :协议可以写数字的协议号也可以直接写协议名字,但需要用\或\\转义
    proto协议      //各种协议   
    ip proto协议号      //基于IP的协议
    ether proto协议号   //基于二层的协议





       
tcpdump常用的选项:

     -a    将网络地址和广播地址转变成名字;
   -d    将匹配信息包的代码以人们能够理解的汇编格式
   -dd    将匹配信息包的代码以c语言程序段的格式给出;
   -ddd    将匹配信息包的代码以十进制的形式给出;
   -e    在输出行打印出数据链路层的头部信息;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    不把网络地址转换成名字;
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i    指定监听的网络接口;
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);
   -w    直接将包写入文件中,并不分析和打印出来;
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议;)






(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
  #tcpdump host 210.27.48.1 
(2) 想要截获主机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\\) 
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 ,使用命令:
  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
  #tcpdump tcp port 23 host 210.27.48.1 


数据链路层头信息:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60:h219.33357 > ice. telnet
t 0:0(0) ack 22535 win 8760 (DF)
  分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该 数据包,eth0>表示从网络接口设备

发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它 表明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC

地址,表示该数据包的 目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >ice. telnet 表明

该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535表明对序列号是222535的包进行响应. win 8760

表明发送窗口的大小是8760.

ARP包头信息:
 tcpdump arp
   22:32:42.802509 eth0 > arp who-has route tell ice(0:90:27:58:af:1a)
  22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66(0:90:27:58:af :1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是 ARP请求包,who-has route tell ice

表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。

TCP包头信息:
    src >dst: flags data-seqno ack window urgent options
  src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P(PUSH) , R (RST) "." (没

有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小,urgent表明数据包

中是否有紧急指针.  Options是选项.


UDP包头信息:
    route.port1> ice.port2: udp lenth
 UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机 ICE的port2端口,类型是UDP,包的长

度是lenth

tcpdump