您的位置:首页 > 理论基础 > 计算机网络

tcpdump用法

2016-03-13 16:24 381 查看
tcpdump是非常强大的网络安全分析工具,可以将网络上截获的数据包保存到文件以备分析。可以定义过滤规则,只截获感兴趣的数据包,以减少输出文件大小和数据包分析时的装载和处理时间。

1. tcpdump用法说明

tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]

[ -C file_size ] [ -G rotate_seconds ] [ -F file ]

[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]

[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]

[ -W filecount ]

[ -E spi@ipaddr algo:secret,... ]

[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]

[ expression ]

2. tcpdump选项说明

-a    将网络地址和广播地址转变成名字;

   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;

   -dd    将匹配信息包的代码以c语言程序段的格式给出;

   -ddd   将匹配信息包的代码以十进制的形式给出;

   -e    在输出行打印出数据链路层的头部信息;

   -f    将外部的Internet地址以数字的形式打印出来;

   -l    使标准输出变为缓冲行形式;

   -n    不把网络地址转换成名字;

   -t    在输出的每一行不打印时间戳;

   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息

   -vv    输出详细的报文信息;

-x 打印出数据包的内容

-xx 更加详细的打印出数据包的内容

-X 用ASCII码的形式打印出数据包的内容

-XX 同上,不过打印出来的信息内容更加详尽

   -c    在收到指定的包的数目后,tcpdump就会停止;

   -F    从指定的文件中读取表达式,忽略其它的表达式;

   -i    指定监听的网络接口;

-p 禁止在混杂模式下捕获

   -r    从指定的文件中读取包(这些包一般通过-w选项产生);

-s 捕获数据包大小值

   -w    直接将包写入文件中,并不分析和打印出来;

   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

3. tcpdump详细用法

3.1 定义类型的关键字

主要包括host,net,port,分别代表主机,网络地址和端口。没有指定类型,缺省为host。

例子:

tcpdump host hostname -i eth0

监视所有送到主机hostname的数据包。

3.2 定义传输方向的关键字

主要包括src , dst ,dst or src, dst and src,如果没有指明方向关键字,则缺省是src or dst关键字。

例子:

tcpdump –i eth0 host hostname and dst port 80

监视所有送到主机hostname并且端口号为80的数据包。

3.3 定义协议的关键字

主要包括fddi,ip,arp,rarp,tcp,udp等类型,如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

例子:

tcpdump tcp port 23 host 192.168.200.100

获取主机192.168.200.100接收或发出的telnet包。

3.4 其他类型的关键字

主要包括有gateway, broadcast,less,greater,以及三种逻辑运算(取非运算是'not ' '! ', 与运算是'and','&&';或运算是'or' ,'││');这些关键字可以组合起来构成强大的组合条件来满足人们的需要。

例子:

tcpdump -i eth0 gateway Gatewayname

监视通过指定网关的数据包。

4. tcpdump实例

4.1 tcpdump

普通情况下,直接启动tcpdump将监视第一个网卡上所有流过的数据包。

4.2 tcpdump -p

禁止在混杂模式下捕获。默认情况下使用tcpdump都是在混杂模式下捕获。

在系统的日志/var/log/syslog将会记录以下内容:

May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.

May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode

May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode

4.3 tcpdump -s

捕获数据包大小值。这样如果需要抓取的数据包长度大于该默认值大小,就会导致数据包没有捕获到,因此需要设置此值大小,一般情况下设置-s 0就不会因为数据长度问题导致数据丢失。

4.6 tcpdump -w

直接将包写入文件中,并不分析和打印出来。

tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

4.2 tcpdump -i eth0 tcp port 6666 -w test.pcap

截取网络接口eth0,端口号6666的tcp数据包。数据文件保存为test.pcap。

4.3 tcpdump -w test.pcap -i eth0 tcp port 6666 or udp /( 33210 or 33220 /)

'/'是转义字符,逻辑符号OR是加(+)的意思。其他表达式是截取端口号6666的tcp包加上端口号33210和33220的UDP包。and运算符是交集的意思,因此截取端口号33210和33220的UDP包使用 or 而不是 and。

4.4 tcpdump -ttttnnr test.pcap

读取保存文件数据包

选项 -nn 不把网络IP和端口号转换成名字,r(read)读取包。

可以添加 -tttt 选项使时间戳格式更加可读。

4.5 tcpdump ip host 210.27.48.1 and ! 210.27.48.2

获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包。

本文章参考内容来自:/article/4470008.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: