tcpdump抓包工具的使用
tcpdump抓包工具的使用
一,前言
tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。
另外,tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性。tcpdump存在于基本的Linux系统 中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
二、安装
1、介质下载:
1 | http://www.tcpdump.org/release/tcpdump-4.9.3.tar.gz //依赖libpcap 1.9.1,tcpdump的运行需要pcap的支持,所以最好先行安装pcap软件包 |
2、安装前准备
1>ubuntu:
安装c编译所需包:apt-get install build-essential
安装 libpcap的前置:apt-get install flex,apt-get install bison
2>centos
1 | yum -y install flex |
3>安装
1 | tar -zxvf libpcap-1.9.1.tar.gz |
附录:
1 | yum install wireshark(核心,可以用命令tshark) |
如果运行tshark报:wireshark: symbol lookup error: wireshark: undefined symbol: gtk_combo_box_text_new_with_entry
请更新安装:yum update gtk2
其中,tshark是WireShark的命令行工具,可以通过命令提取自己想要的数据,可以重定向到文件,也可以结合上层语言来调用命令行,实现对数据的处理。
3、验证
#tcpdump -vv
//输出网络信息
4、命令使用
tcpdump的命令格式如下:
tcpdump [ -adeflnNOpqRStuvxX ] [ -c 数量 ] [ -C 文档尺寸 ] [ -F 文档名 ] [ -i 网络接口 ] [ -m 文档名 ] [ -r 文档名 ] [ -s 长度 ] [ -T 类型 ] [ -w 文档名 ] [ -E algo:secret ] [ 表达式 ]
tcpdump [-i 网卡] -nnAX ‘表达式’
【参数说明】:
-a :将网络地址和广播地址转变成容易识别的名字。
-A:以ascii的方式显示数据包,抓取web数据时很有用。
-c: 指定要抓取的包数量,在捕获指定个数的数据包后退出。
-d :将已截获的数据包的代码以人容易理解的格式输出。
-dd :将已截获的数据包的代码以C程式的格式输出。
-ddd :将已截获的数据包的代码以十进制格式输出。
-e: 输出数据链路层的头部信息。
-f :将internet地址以数字形式输出。
-F :从指定的文档中读取过滤规则,忽略命令行中指定的其他过滤规则。
-G
-l: 将标准输出变为行缓冲方式。
-n:不将网络地址转换成易识别的主机名,对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析,避免DNS查询。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。常用,总的是实现以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
-s: <数据包大小> 设置每个数据包的大小,0表示全部数据。
-t :不输出时间戳;
-N:不打印出host的域名部分。
-P:指定要抓取的包是流入还是流出的包。可以给定的值为”in”、“out”和”inout”,
默认为”inout”。
-r
-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。
对于要抓取的数据包较大时,长度设置不够可能会产生包截断。
-T: 将截获的数据包直接解释为指定类型的报文,现在支持的类型有cnfp、rpc、rtp、snmp、vat和wb。
-i:interface:指定tcpdump需要监听的接口。
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-Z
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。
-w :将截获的数据包直接写入指定的文档中,不对其进行分析和输出;。
-w <数据包文件> :把数据包数据写入指定的文件。按时间分包时,可使用strftime的格式命名,例如 %Y_%m_%d_%H_%M_%S.pcap
-W
常用关键字说明:
host(缺省类型): 指明一台主机
net: 指明一个网络地址,net 100.0.0.0指明100.0.0.0是一个网络地址
port: 指明端口号
src: 指定网络源地址
dst: 指定目标网络地址,src,dst,dst or src,dst and src, 这些关键字指明了传输的方向
协议类: 主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。
其他重要的关键字如下:gateway, broadcast,less, greater, 还有三种逻辑运算,取非运算是 ‘not ’ ‘! ‘, 与运算是’and’,’&&’;或运算是’or’ ,’||’; 更多man 7 pcap-filter查看。