网络流量抓包神器!ngrep 命令超详细教程|数据包级网络 grep

一、命令简介

ngrep(Network Grep)是 grep 命令的网络版本,专门用于在数据包级别进行模式匹配和搜索。它继承了 grep 的许多特性,并利用 libpcap 库支持跨平台运行,能够识别和分析 TCP、UDP、ICMP 等多种网络协议的数据包。ngrep 支持 Berkeley Packet Filter(BPF)语法,允许用户灵活地过滤和捕获网络流量,是网络调试、安全分析和协议学习的实用工具。

二、语法格式

基本语法

bash

运行

ngrep [选项] [匹配表达式] [BPF过滤器]

其中:

  • [匹配表达式]:指定要搜索的字符串或正则表达式
  • [BPF过滤器]:用于过滤网络流量(与 tcpdump 语法兼容)

详细语法

bash

运行

ngrep <-LhNXViwqpevxlDtTRM> <-IO pcap_dump> <-n num> <-d dev> <-A num> <-s snaplen> <-S limitlen> <-w normal|byline|single|none> <-c cols> <-P char> <-F file> <match expression> <bpf filter>

三、常用选项及说明

表格

选项说明
-h显示帮助信息
-V显示版本信息
-q静默模式,不显示不匹配的数据包
-e显示空数据包
-i忽略大小写进行匹配
-v反转匹配,显示不匹配的数据包
-x以十六进制格式显示数据包内容
-X以十六进制格式进行匹配
-w整字匹配(类似 grep -w)
-p不使用混杂模式(promiscuous mode)
-t在每个匹配的数据包前显示时间戳
-T显示上一个匹配数据包之间的时间间隔
-I <文件>从 pcap 文件中读取数据进行匹配
-O <文件>将匹配的数据包保存到 pcap 文件
-n <数量>仅捕获指定数量的数据包后退出
-A <数量>匹配到数据包后,额外捕获后续指定数量的数据包
-d <接口>指定要监听的网络接口(如 eth0、lo、any)
-W <格式>设置显示格式:normal(默认)、byline(按行解析)、single(单行)、none(无格式)
-L列出所有可用的网络接口

四、示例用法

基本捕获

捕获本地回环接口上 18080 端口的流量,并按行解析显示:

bash

运行

ngrep -W byline -d lo port 18080

搜索特定内容

在所有网卡的 80 端口(HTTP)流量中,忽略大小写搜索包含password的数据包:

bash

运行

sudo ngrep -i password port 80

十六进制操作

以十六进制格式显示 443 端口(HTTPS)的数据包内容:

bash

运行

sudo ngrep -x port 443

文件输入输出

从已有的抓包文件capture.pcap中读取数据,并搜索GET请求:

bash

运行

ngrep -I capture.pcap "GET"

高级控制与显示

捕获 DNS 流量(端口 53),只处理前 10 个数据包,并显示时间戳和包间隔:

bash

运行

sudo ngrep -t -T -n 10 port 53

监控 SSH 登录尝试:

bash

运行

sudo ngrep -d any "ssh" port 22

五、注意事项

  • 权限要求:ngrep 需要 root 权限或相应的网络捕获权限(如 CAP_NET_RAW 能力)才能监听网络接口。在大多数情况下,需要使用 sudo 运行。
  • 性能影响:在高流量网络环境中使用复杂的匹配表达式可能增加系统负载。建议使用精确的 BPF 过滤器缩小捕获范围。
  • BPF 过滤器:ngrep 与 tcpdump 完全兼容,是过滤流量的关键,应优先使用过滤器而非匹配表达式来减少处理的数据量。

获取更多Linux学习资料请关注“阿成学长工具包”,对话框中输入2647获取