嵌入式linux系统的开发—tcpdump工具应用

时间:2023-01-23 18:49:22
前言

作为网络开发人员来说Wireshark是最为流行的网络分析工具,可以捕捉网络中的数据报文,提供关于网络协议上的各种信息,一般在PC上的Windows、Linux等平台上应用。在嵌入式linux系统中由于硬件资源的限制,并且多数设备也不具备图形界面,无法使用Wireshark,但Linux下具有tcpdump这个强大的网络数据采集工具,通常我们可以使用tcpdump和Wireshark两者相结合的方式进行抓包分析。

tcpdump是基于Unix系统的命令行式的数据包嗅探工具(sniffer),可以抓取传输在网卡上的数据报文。从网络安全方面考虑,只有具备root权限的用户才可以执行tcpdump命令来获取网络上任何经过它的数据报文,即网卡的混杂模式,而普通用户无法看到网络上的数据报文。tcpdump可以使用BPF语言指定抓包过滤器以获取所需的数据报文,捕获后的数据报文存储为.cap格式,可直接用wireshark打开查看。
嵌入式linux系统的开发—tcpdump工具应用

本文主要介绍如何使用tcpdump抓取数据报文,以及结合Wireshark进行数据分析的方法。

tcpdump安装

在LEDE发行版的配置界面中选择tcpdump选项,编译后会在bin/packages/mipsel_24kc/base路径下生成tcpdump_4.9.2-1_mipsel_24kc.ipk、libpcap_1.8.1-1_mipsel_24kc.ipk,其中 libpcap为tcpdump的依赖库,将ipk包添加至设备文件系统目录下进行安装。

opkg install libpcap_1.8.1-1_mipsel_24kc.ipk opkg install tcpdump_4.9.2-1_mipsel_24kc.ipk

嵌入式linux系统的开发—tcpdump工具应用

tcpdump语法

输入命令tcpdump开始捕获经过第一个网口的所有数据报文,在控制台上输出简要的信息,可增加-v或-vv后缀显示完整的报文信息,可针对网络协议、主机地址、端口等关键字以及and、or、not等逻辑语句过滤无用的报文信息。

嵌入式linux系统的开发—tcpdump工具应用

tcpdump采用命令行方式,它的命令格式如下所示,包含了多种选项,如-c为收到指定数量的报文后停止捕获;-w为直接将捕获到的报文存储为路径下的文件;-expression为BPF语法编写的用于过滤报文的正则表达式(libpcap库中支持伯克利包过滤Berkeley Packet Filter语法),如果一个报文满足表达式的条件则会被捕获,如果未给出任何条件,则网络上所有的报文都会被捕获,如指明关键字 host 192.168.1.1则表明捕获192.168.1.1主机的报文。

嵌入式linux系统的开发—tcpdump工具应用

主要选项说明:

  • -A:以ASCII编码打印每个报文(不包括链路层的头)
  • -a:将网络地址和广播地址转变成名字
  • -c:收到指定数量报文后停止捕获
  • -C:用于判断-w选项将报文写入的文件的大小是否超过该值,超过则新建文件(文件名后缀为1、2、3依次增加)
  • -d:将匹配信息包的代码以人们能够理解的汇编格式给出
  • -dd:将匹配信息包的代码以c语言程序段的格式给出
  • -ddd:将匹配信息包的代码以十进制的形式给出
  • -D:列出当前主机的所有网卡编号和名称,与选项-i配合使用
  • -e:在输出行打印出数据链路层的头部信息
  • -f:将外部的Internet地址以数字的形式打印出来
  • -F:从指定的文件中读取表达式,忽略其它的表达式
  • -i:监听指定网卡上的数据流,未指定则使用最小编号的网卡,与选项-D配合使用
  • -l:未使用-w选项,则将报文打印到标准输出终端(默认)
  • -n:显示ip地址,而不是主机名
  • -N:不列出域名;
  • -O:不将数据包编码最佳化;
  • -p:不让网络界面进入混杂模式;
  • -q:快速输出,仅列出少数的传输协议信息;
  • -r:从指定的文件中读取包(这些包一般通过-w选项产生)
  • -s:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,由于ethernet MTU为1500字节,使用默认参数会导致包数据丢失
  • -S:用绝对而非相对数值列出TCP关联数
  • -t:在输出的每一行不打印时间戳
  • -tt:在输出的每一行显示未经格式化的时间戳记
  • -T:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议)
  • -v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
  • -vv:输出详细的报文信息
  • -x/-xx/-X/-XX:以十六进制显示包内容
  • -w:不打印报文,直接写入文件中
  • -expression:过滤报文的表达式,包括类型关键字(host、net、port),传输方向关键字(src 、dst),协议关键字(fddi、ip、arp、rarp、tcp、udp),逻辑运算关键字(not、!、and、&&、or、||),以及gateway、broadcast、less、greater等
tcpdump应用

1)抓取eth0上主机192.168.1.100报文,抓到100个包后退出

tcpdump -i eth0 host 192.168.1.100 -c 100 -n

嵌入式linux系统的开发—tcpdump工具应用

2)抓取eth0上主机192.168.1.1报文,抓到100个包后退出

tcpdump -i eth0 host 192.168.1.1 -c 100 -n

嵌入式linux系统的开发—tcpdump工具应用

3)抓取主机192.168.1.1和除了主机192.168.1.100之外所有主机通信的数据包:

tcpdump -i eth0 host 192.168.1.1 and ! 192.168.1.100 -c 100 -n

嵌入式linux系统的开发—tcpdump工具应用

4)抓取eth0上80端口的TCP报文,抓到100个包后退出

tcpdump -i eth0 port 80 and tcp -c 100 -n

嵌入式linux系统的开发—tcpdump工具应用

5)抓取eth0上主机192.168.1.1接收的所有报文,抓到100个包后退出

tcpdump -i eth0 dst host 192.168.1.1 -c 100 -n

嵌入式linux系统的开发—tcpdump工具应用

6)抓取eth0上网络192.168.1.100发送,主机192.168.1.1 接收的所有报文,抓到100个包后退出

tcpdump -i eth0 src net 192.168.1.100 and dst host 192.168.1.1 -c 100 -n

嵌入式linux系统的开发—tcpdump工具应用

7)默认情况下tcpdump抓包结果显示在控制台,为了进一步进行数据分析,可使用-w命令将抓包结果存放在文件中,用Wireshark打开查看。

tcpdump -w /tmp/wireopen.cap

嵌入式linux系统的开发—tcpdump工具应用

Wireshark查看

将存储在linux文件系统下的.cap文件通过winscp工具下载到本地,通过Wireshark工具可打开查看。
嵌入式linux系统的开发—tcpdump工具应用