CentOS 环境 ngrep 安装及使用
前言
ngrep
可以看作网络版的 grep,是一款功能强大的抓包工具。它不但适配各个操作系统,也能识别大量常用网络协议,支持 BPF 过滤规则,提供灵活抓取各类数据包的能力
1. CentOS 环境安装 ngrep
1.1 搜索安装包
执行以下命令搜索 ngrep 的可用安装包,可以看到在 CentOS 系统下一个可以用的安装包是 ngrep.x86_64
sudo yum search ngrep
1.2 安装 ngrep
执行以下命令即可下载安装 ngrep,安装结束后可以使用命令 sudo ngrep -V
查看版本信息
ngrep 依赖 libpcap 库,通常使用下面的命令安装 ngrep 时都会自动下载相关依赖。如果安装出错未自动解决依赖,可尝试使用
sudo yum install libpcap
下载依赖库后重试
sudo yum install ngrep
2. ngrep 使用
2.1 ngrep 可选参数列表
ngrep
常用的参数如下表所示,更多参数可以使用命令 man ngrep
查看详细信息
参数 | 功能 |
---|---|
-d | 指定需要抓包的网卡,Linux 系统可使用 ifconfig 命令查看本地网卡设备 |
-q | 设置静默,如果没有该参数,未匹配的数据包都以“#”显示 |
-t | 在每个匹配的包之前显示时间戳 |
-i | 忽略大小写 |
-W | 设置数据包内容的展示格式,可选参数为 byline(按行分割) 等 |
2.2 ngrep 使用示例
ngrep 的过滤抓包实际分为3个部分,首先是网卡设备的选定,其次是 BPF 过滤器应用,最后才是报文内容匹配。以下是几个使用的例子:
-
监听本地
eth0
网卡,过滤报文内容能匹配指定字符串 COMPLETE 的数据包,按照包中的换行符分行打印报文sudo ngrep "COMPLETE" -d eth0 -W byline -q -t -i
-
监听本地
eth0
网卡,过滤任一端使用了 5080 端口进行 udp 通信并且报文中内容能匹配指定模式串[a-zA-Z]的数据包,按照包中的换行符分行打印报文注意,通信协议 udp/tcp 等需要在 port 参数前指定
sudo ngrep '[a-zA-Z]' -t -W byline -d eth0 udp port 5080
-
监听本地
eth0
网卡,过滤通信双端中任一端使用了 5080 端口并且任一端主机地址为 127.0.0.1 的数据包,按照包中的换行符分行打印报文sudo ngrep -d eth0 -q -t -W byline host 127.0.0.1 and port 5080
-
监听本地
eth0
网卡,过滤发包端口为 5090 协议为 tcp 或者发包端口为 5061 且收包主机为 172.18.192.76 或者 127.0.0.1 的数据包,并进一步过滤报文内容匹配指定字符串 COMPLETE 的数据包,最后按照包中的换行符分行打印报文BPF 过滤规则中,src 标识来源,dst 标识目标。实际上 ngrep 和 tcpdump 在 BPF 过滤器使用语法上是完全一致的,读者如感兴趣可自行搜索相关知识
sudo ngrep "COMPLETE" -d eth0 -W byline -q -t \(dst host 172.18.192.76 or dst host 127.0.0.1\) and \(tcp src port 5090 or src port 5061\)