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

前言

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

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

图片描述

本文主要介绍如何使用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

图片描述

tcpdump语法

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

图片描述

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

图片描述

主要选项说明:
-A:以ASCII编码打印每个报文(不包括链路层的头)
-a:将网络地址和广播地址转变成名字
-c:收到指定数量报文后停止捕获
-C:用于判断-w选项将报文写入的文件的大小是否超过该值,超过则新建文件(文件名后缀为1、2、3依次增加)
-d:将匹配信息包的代码以人们能够理解的汇编格式给出
-dd:将匹配信息包的代码以c语言程序段的格式给出
-ddd:将匹配信息包的代码以十进制的形式给出
-D:列出当前主机的所有网卡编号和名称,与选项-i配合使用
-e:在输出行打印出数据链路层的头部信息
-f:将外部的Internet地址以数字的形式打印出来
-F:从指定的文件中读取表达式,忽略其它的表达式
-i:监听指定网卡上的数据流,未指定则使用最小编号的网卡,选项-D查看设备网卡,linux 2.2 内核及之后的版本支持any网卡,用于指代任意网卡
-l:未使用-w选项,则将报文打印到标准输出终端(默认)
-n:显示ip地址,而不是主机名
-N:不列出域名
-O:不将数据包编码最佳化
-p:不让网络界面进入混杂模式
-Q:显示输入|输出|输入输出报文
-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
-i eth0 'tcp and net 192.168.1.1 or host 192.168.1.100'

tcpdump应用

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

tcpdump -i eth0 host 192.168.1.100 -c 100 -n

图片描述

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

tcpdump -i eth0 host 192.168.1.1 -c 100 -n

图片描述

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

图片描述

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

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

图片描述

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

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

图片描述

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

图片描述

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

tcpdump -w /tmp/wireopen.cap

图片描述

8)抓取eth0上所有tcp、udp、icmp包,此处使用or关联过滤条件

tcpdump -i eth0 tcp or udp or icmp

图片描述

9)抓取设备上所有网卡的报文,可使用-D选项查看设备支持的网卡,any为虚拟设备表示捕获所有的网卡报文

tcpdump -D

图片描述

tcpdump -i any

图片描述

4、 Wireshark查看

将存储在linux文件系统下的.cap文件通过winscp工具下载到本地,通过Wireshark工具可打开查看。

图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值