Jusene's Blog

tcpdump

字数统计: 1.1k阅读时长: 4 min
2017/04/16 Share

tcpdump

tcpdump抓包命令,tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。

tcpdump命令格式

tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae] [-qX] [-r 文件] [所欲捕获的数据内容]

-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。

tcpdump选项

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

~]# tcpdump -vv
不带参数的tcpdump会收集网络中所有的信息包头,数量巨大,必须过滤。

[opotion]

  • -A: 以ascii格式打印出所有分组,并将链路层的头最小化
  • -c: 在收集到指定数量的分组后,tcpdump就会停止
  • -D: 打印出系统中所有可以用tcpdump截取包的网络接口
  • -e: 在输出行打印出数据链路层的头部信息
  • -i: 指定监听的网络接口
  • -b: 在数据链路层选择协议,包括arp、rarp,ipx
  • -n: 不把网络地址装换成名字
  • -nn:不进行端口名称的转换
  • -t: 在输出的每一行不打印时间戳
  • -P: 不把接口设置成混杂模式
  • -q:快速输出,只输出较少的协议信息
  • -r:从指定的文件中读取包(一般通过-w选项产生)
  • -w:写入到文件中,一般以.pcap结尾
  • -v:输出稍微详细的信息
  • -vv:输出详细的报文信息

tcpdump表达式

  1. 第一种是关于类型的关键字:主要包括host,net,port。
  2. 第二种是确定chuan传输方向的关键字:主要包括src,dst,dst or src,dst and src。
  3. 第三种是协议的关键字:主要包括fddi,ip,arp,icmp,tcp,udp等

输出结果介绍

  • 数据链路层的信息
    1
    tcpdump -e host 10.211.55.24
    2
    21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE. telne t 0:0(0) ack 22535 win 8760 (DF)
    3
    可以得到数据链路层mac地址的通信过程
  • icmp包的tcpdump输出信息
    1
    [root@localhost ~]#tcpdump icmp 
    2
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    3
    listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
    4
    08:16:17.876094 IP node1 > 10.211.55.24: ICMP echo request, id 10800, seq 1, length 64
    5
    08:16:17.876125 IP 10.211.55.24 > node1: ICMP echo reply, id 10800, seq 1, length 64
  • tcp包的输出信息
    1
    src > dst: flags data-seqno ack window urgent options
    2
    src > dst:表明从源地址到目的地址, flags是TCP报文中的标志信息,S 是SYN标志, F (FIN), P (PUSH) ,  R (RST) "." (没有标记); data-seqno是报文中的数据 的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明 报文中是否有紧急指针。 Options是选项。
  • udp包的输出信息
    1
    oute.port1 > ICE.port2: udp lenth
    2
    UDP十分简单,上面的输出行表明从主机route的port1端口发出的一个UDP报文 到主机ICE的port2端口,类型是UDP, 包的长度是lenth。

举例

(1) 想要截获所有210.27.48.1 的主机收到的和发出的所有的分组:

1
tcpdump host 210.27.48.1

(2) 想要截获主机源地址210.27.48.1 和主机210.27.48.2或210.27.48.3的通信,使用命令(注意:括号前的反斜杠是必须的):

1
tcpdump src host 210.27.48.1 and dst \( 210.27.48.2 or 210.27.48.3 \)

(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包

1
tcpdump ip host 210.27.48.1 and ! 210.27.48.2

(4) 如果想要获取主机192.168.228.246接收或发出的ssh包,并且不转换主机名使用

1
tcpdump -nn -n  host 192.168.228.246 and port 22 and tcp

(5) 获取主机192.168.228.246接收或发出的ssh包,并把mac地址也一同显示

1
tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn

(6) 过滤源主机物理地址为XXX的报头:

1
tcpdump ether src 00:50:04:BA:9B
CATALOG
  1. 1. tcpdump
    1. 1.1. tcpdump命令格式
    2. 1.2. tcpdump选项
    3. 1.3. tcpdump表达式
    4. 1.4. 输出结果介绍
    5. 1.5. 举例