1.  tcpdump 命令详解


1.1 tcpdump 命令的基本简介

  • tcpdump :dump the traffic on a network 根据使用者的定义对网络上的数据包进行截获的分析工作;tcpdump 可以讲网络中传送的数据包的header完全截获下来进行分析;它支持对网络层(net  IP 段)、协议(TCP/UDP)、主机(src/dst host)、网络或端口(prot)的过滤,并提供and、or、not 等逻辑语句来帮助你去掉无用的信息。
  • tcpdump:默认情况下,sudo /usr/sbin/tcpdump 会监视 第一个网络接口 一般是eth0 的所有port 所有协议的 数据包


1.2 tcpdump 的主要选项

协议

TCP,UDP,IP,ARP,RARP,ETHER,FDDI

网络(net)

192.168.0.0/16 IP网段

方向(host)

src,dst,src or dst,src and dst

端口(prot)

80 22 !22  9999 

逻辑

and,or,not  &&,||,!

  • 协议:tcp udp ip arp rarp ether fddi   协议这选项要放在 前面,因为要过滤数据包
  • 网络:net  ip网段     tcpdump net 192.168.1.0/24   监听这个网段
  • 方向:host  就是主机  src 是源主机、dst 是目的主机 or  and 是逻辑 tcpdump host test.hostname 
  • 端口:port  指定tcpdump 监听的端口  tcpdump src 192.168.1.11 and port 80  监听源IP是192.168.1.11 的80端口
  • 逻辑:是表示 与 或  即:同时满足或满足之一

        前面的四个选项:协议、net 、host、port 如果同时在 tcpdump 里面 时必须用 逻辑 and 连接起来;而且如用() 一定要转义,否则会包语法错误。    

 



2. tcpdump 的选项

2.1 主要选项
• -i :指定网卡 默认是 eth0   
• -n :线上ip,而不是hostname
• -c :指定抓到多个包后推出
• -A:以ASCII方式线上包的内容,这个选项对文本格式的协议包很有用
• -x:以16进制显示包的内容
• -vvv:显示详细信息
• -s :按包长截取数据;默认是60个字节;如果包大于60个字节,则抓包会出现丢数据;所以我们一般会设置 -s 0 ;这样会按照包的大小截取数据;抓到的是完整的包数据
• -r:从文件中读取【与 -w 对应,/usr/sbin/tcpdump -r test.out  读取 tcpdump -w  test.out】
• -w:到处指向文件【一定要用,-w t.out ,然后用 -r t.out 来看抓包信息,否则可读性很差】
使用:
tcpdump -w google.cap        #抓包结果存放在文件中
 tcpdump -r google.cap http   #还可以使用-r参数制定抓包数据文件
 tcpdump -i eth1              #使用-i参数指定通过哪一个网卡抓包
 tcpdump -D                   #查看哪几个网卡抓包 
 
  
 
2.2 tcpdump 抓包的具体含义
       tcpmdump 抓包出来分析包的具体含义
1.        包携带的标志:
• S:S=SYC  :发起连接标志
• P:P=PUSH:传送数据标志
• F:F=FIN:关闭连接标志
• ack:表示确认包
• RST=RESET:异常关闭连接
• . 表示没有任何标志
 
 
3. tcpdump的实例:
• 起步1: 抓取指定端口的包
 tcpdump -i eth0 -c 100• 起步2:抓取指定协议的包
 tcpdump -i eth0 -c 100 tcp• 起步3:抓取指定协议,指定port的包【tcp ip port src dst host net】
 tcpdump -i eth0 -c 100 tcp port 5440• 起步4:组合过滤条件【and or not】
 tcpdump -i eth0 -c 100 tcp port 5440  and src host 192.1.1.2• 起步5:抓取指定网段的包
 tcpdump -i eth0 -c 100 tcp port 5440 and src net 192.1.1.0/24• 高级1:写入文件并用wireshark在windows下分析
 tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
 然后用ftp传输到windows下面,在用wireshark打开cap文件即可• 高级2:提取http包
 tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 -c 20 -w ./target.cap
 其中-s 0表示不限制包的大小;tcp[20:2]从表示tcp包头第20个字节开始的2个字节等于0x4745(对应字符GE)或者等于0x4854(对应HT);
 这种方法适用于tcp头中OPTION为空的情况,如果不为空,需要从第24个字节开始。 基本语法 ========
 过滤主机
 --------
 - 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据
 # tcpdump -i eth1 host 192.168.1.1
 - 源地址
 # tcpdump -i eth1 src host 192.168.1.1
 - 目的地址
 # tcpdump -i eth1 dst host 192.168.1.1
 过滤端口
 --------
 - 抓取所有经过 eth1,目的或源端口是 25 的网络数据
 # tcpdump -i eth1 port 25
 - 源端口
 # tcpdump -i eth1 src port 25
 - 目的端口
 # tcpdump -i eth1 dst port 25网络过滤
 --------
 # tcpdump -i eth1 net 192.168
 # tcpdump -i eth1 src net 192.168
 # tcpdump -i eth1 dst net 192.168
 协议过滤
 --------
 # tcpdump -i eth1 arp
 # tcpdump -i eth1 ip
 # tcpdump -i eth1 tcp
 # tcpdump -i eth1 udp
 # tcpdump -i eth1 icmp

  注意:在linux抓取包后用tcpdump -r 只能看到包的简单信息;如果需要查询抓取包的详细信息需要把抓取的包target.cap 通过 ftp服务器传输到windows机器上;借助wireshark工具来分析数据;wireshark是一款开源的分析网络抓包的工具;灰常的好用。