Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。
TcpDump是Linux中强大的网络数据采集分析工具之一。
TcpDump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
常用选项
常用选项 | 具体含义 |
-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、默认启动-tcpdump
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包:
2、监视指定网络接口的数据包(-i)
举例:tcpdump抓取所有通过eth0的包
命令:tcpdump -i eth0
注意:如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0。
3、抓取指定数目的包(-c)
举例:只针对eth0网口抓5个包。
命令:tcpdump -c 5 -i eth0
4、将抓到的包写入文件中(-w)
举例:将抓包记录到一个指定的文件中
命令:tcpdump -w tcpdump.pcap -i eth0
5、读取tcpdump保存文件(-r)
对于保存的抓包文件,可以使用-r选项进行读取。
举例:tcpdump -r tcpdump.pcap
6、抓包时不进行域名解析(-n)
默认情况下,tcpdump抓包结果中将进行域名解析,显示的是域名地址,而不是IP地址,而使用-n选项,可以指定显示IP地址。
7、增加抓包时间戳(-tttt)
使用-tttt选项,抓包结果将包含抓包日期。
举例:tcpdump -n -tttt -i eth0
不显示时间戳(-t)
8、指定抓包协议类型
tcpdump支持指定协议类型有:ip,ip6,arp,tcp,udp,wlan等。
tcp ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
举例:抓取arp协议的包。
命令:tcpdump arp -i eth0
9、监视指定主机的数据包
例如:截获所有210.27.48.1 的主机收到的和发出的所有的数据包
命令:tcpdump host 210.27.48.1
10、监视指定主机和端口的数据包
举例:如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1