tcpdump 常用参数

  这篇博文是我看了大神写的文章做了一些提取和基础知识的补充。

  原文:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/05/1771563.html

  一、tcpdump简介

  tcpdump是linux下的网络抓包工具,主要用于把流经网卡的数据包头截获下来进行分析。

  过滤方式:针对网络层,协议,主机,网络或者端口过滤,辅以and,or,not等逻辑语句帮助你去掉无用的信息。

  注意:此命令需要设置网卡为混杂模式,普通用户不能正常使用,需要root权限。网卡默认只接收目的硬件地址是自己的或者广播硬件地址的数据包。而混杂模式则会使网卡接收所有流经网卡的数据包。

  不带任何参数直接启动tcpdump命令默认回去截获流经第一个网络设备的所有数据包。如下图所示:

  第二行的listening on eth0 说明监听的是第一块网卡,link-type EN10MB表示它的链路层是基于以太网的,capture size 65536 bytes表示要抓取的包的限制大小为65535。下面是抓取的包头的详细内容。很明显,可以看到时间,源IP,目的IP, 端口号等常见的字段。(想查看有几块网卡常用方式是ifconfig命令。)。

  二、tcpdump常用参数

  常用参数:

  <1> -i 指定监听的网卡。这个参数主要用于计算机有多个网卡的情况。如果不使用此参数,则默认监听第一块网卡,eth0。

  <2> -w 将监听到的数据包写入文件中。参数后直接跟“/路径/文件名”。

  <3> -r 因为 -w 保存的是二进制格式,不可以直接读取查看。-r 参数用来流量回放,查看-w保存的文件。

  <4> -c 指定接收到包的数目。当达到指定数目后,tcpdump就会停止。

  <5> -e 打印出数据链路层头部信息。

  三、tcpdump表达式

  网络中的数据流量很大,如果不加分辨就把所有的数据包都截留下来,则数据量太大,反而不容易找到需要的信息。tcpdump使用参数指定需要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件。如果一个数据报满足表达式条件,则这个数据报将会被捕获。下面是几种类型的关键字:

  第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23指明端口号是23。如果没有指定类型,缺省的类型是host.

   第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

     第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

  除了上述的关键字以外,其他重要的关键字如下:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ',与运算是'and','&&';或运算 是'or','││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明:

  A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

  #tcpdump host 210.27.48.1

  B想要截获主机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 \)

  C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

  #tcpdump tcp port 23 host 210.27.48.1

  E 对本机的udp 123 端口进行监视 123 为ntp的服务端口

  # tcpdump udp port 123

  F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:

  #tcpdump -i eth0 src host hostname

  G 下面的命令可以监视所有送到主机hostname的数据包:

  #tcpdump -i eth0 dst host hostname

  H 我们还可以监视通过指定网关的数据包:

  #tcpdump -i eth0 gateway Gatewayname

  I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:

  #tcpdump -i eth0 host hostname and port 80

  J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  K 想要截获主机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 \)

  L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

  #tcpdump tcp port 23 host 210.27.48.1

  

  

 

 

 

   

posted @ 2016-10-07 20:33  Frogjie  阅读(483)  评论(0)    收藏  举报