ngrep :网络嗅探的利器
在网络安全、渗透测试和系统调试领域,捕获和分析网络流量是不可或缺的技能。虽然像 tcpdump 和 Wireshark 这样的工具广为人知,但有一个轻量级且功能强大的工具却常常被忽视——ngrep。本文将详细介绍 ngrep 的功能、使用方法及其在实际场景中的应用,同时对比类似工具(如 tcpdump、Wireshark 和 dsniff),帮助读者理解它们的特点和适用场景。
一、什么是 ngrep?
ngrep(Network Grep)是一个基于文本的网络数据包捕获和过滤工具,名字来源于其与 grep 的相似性。它结合了数据包嗅探和正则表达式匹配的能力,允许用户实时捕获网络流量并筛选出符合特定模式的内容。ngrep 由 Jordan Ritter 在 2000 年代初开发,虽然不如 Wireshark 那样广为人知,但在某些场景下却异常高效。
核心特点
- 轻量级:无需图形界面,适合命令行环境。
- 正则表达式支持:可以匹配数据包 payload 中的文本内容。
- 协议支持:支持 TCP、UDP、ICMP 等协议。
- 实时性:捕获并显示匹配的数据包,适合快速调试。
安装方法
在大多数 Linux 发行版中,可以通过包管理器安装:
sudo apt install ngrep # Debian/Ubuntu
sudo yum install ngrep # CentOS/RHEL
或从源代码编译:
git clone https://github.com/jpr5/ngrep.git
cd ngrep
./configure && make && sudo make install
二、ngrep 的基本使用
ngrep 的基本语法如下:
ngrep [选项] '匹配模式' [过滤器]
- 匹配模式:正则表达式,用于筛选数据包 payload。
- 过滤器:类似于
tcpdump的 BPF(Berkeley Packet Filter)语法,用于限定协议、端口或主机。
示例 1:捕获 HTTP 请求
监听接口 eth0 上包含 GET 的 HTTP 流量:
sudo ngrep -d eth0 'GET' port 80
输出:
interface: eth0 (192.168.111.0/255.255.255.0)
filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6)))
match (JIT): GET
####
T 192.168.111.1:56503 -> 192.168.111.100:80 [AP] #4GET / HTTP/1.1..User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; zh-CN) WindowsPowerShell/5.1.22621.4391..Host: 192.168.111.100..Connection: Keep-Alive....
######
T:TCP 数据包。[AP]:标志(ACK 和 PSH)。GET /index.html:匹配的 payload。
示例 2:捕获 ICMP Ping 数据
捕获包含 abcd(Windows Ping 默认 payload)的 ICMP 流量:
sudo ngrep -d any 'abcd' icmp
输出:
interface: any
filter: ( icmp ) and (ip || ip6)
match (JIT): abcd
#
I 192.168.111.1 -> 192.168.111.100 8:0 #1....abcdefghijklmnopqrstuvwabcdefghi
#
I 192.168.111.100 -> 192.168.111.1 0:0 #2....abcdefghijklmnopqrstuvwabcdefghi
#
I 192.168.111.1 -> 192.168.111.100 8:0 #3....abcdefghijklmnopqrstuvwabcdefghi
#
I 192.168.111.100 -> 192.168.111.1 0:0 #4....abcdefghijklmnopqrstuvwabcdefghi
常用选项
-d <接口>:指定监听接口(如eth0、tun0)。-i:忽略大小写。-x:以十六进制和 ASCII 显示 payload。-t:显示时间戳。-q:静默模式,只显示匹配结果。
三、ngrep 的高级应用
1. 嗅探明文凭据
在渗透测试中,ngrep 可以捕获未加密的协议流量(如旧版 SMB 或 FTP):
sudo ngrep -d tun0 'user|pass' port 21
匹配 FTP 的用户名或密码:
T 10.10.10.100:12345 -> 10.10.10.200:21 [AP]USER admin
T 10.10.10.100:12345 -> 10.10.10.200:21 [AP]PASS secret123
2. 调试网络应用
检查特定 API 请求:
sudo ngrep -d any 'api_key' port 443
捕获 HTTPS 的明文流量(需配合 SSL 解密工具)。
3. 捕获自定义协议
匹配自定义 ICMP payload:
sudo ngrep -d any 'SECRET' icmp
适用于 CTF 或调试场景。
四、类似工具对比
虽然 ngrep 功能强大,但它并非万能。以下是与类似工具的对比:
1. tcpdump
- 特点:
- 经典的命令行抓包工具,支持 BPF 过滤。
- 不直接支持正则表达式,但可结合
grep使用。
- 优点:轻量,支持所有协议,广泛预装。
- 缺点:输出复杂,难以直接匹配 payload。
- 示例:
sudo tcpdump -i eth0 icmp | grep "abcd" - 与 ngrep 的区别:
tcpdump更适合捕获原始数据包,ngrep更擅长文本过滤。
2. Wireshark
- 特点:
- 图形化界面,支持深度数据包分析。
- 可通过显示过滤器(如
http.request)筛选流量。
- 优点:可视化强,协议解析全面。
- 缺点:资源占用高,不适合轻量环境。
- 与 ngrep 的区别:
Wireshark适合离线分析,ngrep更适合实时捕获。
3. dsniff
- 特点:
- 专注于嗅探明文凭据(如 FTP、SMTP)。
- 包含多个工具(如
dsniff、arpspoof)。
- 优点:针对性强,适合密码捕获。
- 缺点:功能单一,维护较少。
- 示例:
sudo dsniff -i eth0 - 与 ngrep 的区别:
dsniff是被动嗅探工具,ngrep更灵活。
4. tshark
- 特点:
Wireshark的命令行版本,支持复杂过滤。
- 优点:功能强大,协议支持广。
- 缺点:语法复杂,学习曲线陡。
- 示例:
sudo tshark -i eth0 -Y "icmp" - 与 ngrep 的区别:
tshark更全面,ngrep更简单。
五、ngrep 的优势与局限
优势
- 简单高效:结合了抓包和文本匹配,命令简洁。
- 实时性:适合快速调试或渗透测试。
- 轻量级:在资源受限环境(如 OSCP 的 Kali VM)表现良好。
局限
- 协议支持有限:无法解析复杂协议的头部(如 HTTP/2)。
- 加密流量:无法直接处理 HTTPS 等加密数据。
- 输出格式:不如
Wireshark直观。
六、实用建议
- 学习场景:
- 在 CTF 或 OSCP 中,用
ngrep捕获明文流量(如 SMB、FTP)。 - 示例:
sudo ngrep -d tun0 'samba|user|pass' port 445
- 在 CTF 或 OSCP 中,用
- 与其他工具结合:
- 用
tcpdump捕获完整流量,再用ngrep过滤:sudo tcpdump -i eth0 -w dump.pcap ngrep -I dump.pcap 'GET'
- 用
- 替代选择:
- 如果需要图形化分析,转用
Wireshark。 - 如果需要批量处理,试试
tshark。
- 如果需要图形化分析,转用
七、结语
ngrep 虽然不如 tcpdump 或 Wireshark 出名,但其独特的正则表达式匹配能力和轻量级设计使其在特定场景下(如实时嗅探、渗透测试)极具价值。相比之下,tcpdump 更通用,Wireshark 更强大,dsniff 更专注,而 ngrep 则在简洁性和灵活性间找到了平衡。
对于网络安全爱好者或从业者来说,掌握 ngrep 不仅能提升效率,还能在资源受限的环境中发挥奇效。如果你还未尝试,不妨在下次调试或测试中用它捕获流量,体验它的魅力吧!
相关文章:
ngrep :网络嗅探的利器
在网络安全、渗透测试和系统调试领域,捕获和分析网络流量是不可或缺的技能。虽然像 tcpdump 和 Wireshark 这样的工具广为人知,但有一个轻量级且功能强大的工具却常常被忽视——ngrep。本文将详细介绍 ngrep 的功能、使用方法及其在实际场景中的应用&…...
HCIE是否必须培训?
一、官方政策:不强制培训,但实操门槛高 根据华为认证官网最新规定,HCIE考试不强制要求参加官方培训,考生可直接报名。但需注意以下隐性门槛: 实验环境限制: HCIE实验考试涉及 真机操作(如CE交换…...
python面试高频考点(深度学习大模型方向)
1. python中yeild和return的区别? 2. 介绍一下pytohn中的上下文管理器? 在Python中,上下文管理器(Context Manager) 是一种通过 with 语句管理资源的协议,确保资源(如文件、数据库连接、线程锁…...
六、重学C++—深入探索new delete
上一章节: 五、重学C—类(封装继承)-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146458436?spm1001.2014.3001.5502 本章节代码: cpp CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/m…...
西门子200smart之modbus_TCP(做主站与第三方设备)通讯
西门子200smart做MODBUS_TCP主站通讯,只有一个指令。设置相关参数即可完成读写操作。整 个过程非常复杂,操作非常严谨。此次,我们使用汇川EASY系列PLC做从站,完成演示。关于汇川案例的演示,详见汇川EASY系列之以太网通讯(MODBUS_TCP做从站)-CSDN博客 关于主站和从站的介…...
Unity代码热更新和资源热更新
知识点来源:人间自有韬哥在,hybridclr,豆包 目录 一、代码热更新1.代码热更新概述2.HybridCLR 二、资源热更新1.资源热更新概述2.AB包2.1.AB包的加载2.2.卸载AB包2.3.加载AB包依赖包2.4.获取MD52.5.生成对比文件2.6.更新AB包 3.Addressable3.1.AssetRef…...
C语言中的共同体(共用体)
一.共用体 1.应用场景: 一种数据可能有多种数据类型,因此我们可以使用共同体来定义这种数据 2.定义格式: union 共同体名字 {数据类型1 成员1;数据类型2 成员2;...数据类型n 成员n; } 3.简单案例: #include<stdio.h> …...
二叉搜索树的最近公共祖先 删除二叉搜索树中的节点 修剪二叉搜索树(Java)
二叉搜索树的最近公共祖先(Java) 重要结论:第一次遇到cur节点是数值在[q, p]区间中,那么cur就是q和p的最近公共祖先(闭区间是因为公共祖先可以是本身) (如果知道这个结论:本题就类似于给定二叉搜索树(BST&…...
于纷扰中寻静谧:正念观照的智慧之旅
在现代社会的快节奏浪潮中,我们仿若被裹挟前行的浮萍,生活的压力与信息的洪流冲刷着内心的宁静,焦虑与迷茫如影随形。而正念观照,恰似一叶扁舟,能引领我们在心灵的海洋中回归自我,探寻那片澄澈之境。 正念…...
Java并发编程面试汇总
Java并发编程 一、 基础概念1. 进程与线程的区别是什么?2. 创建线程的几种方式?3. 线程的生命周期(状态)有哪些?4. 什么是守护线程(Daemon Thread)?5. 线程优先级(Priori…...
计算机考研复试机试-考前速记
考前速记 知识点 1. 链表篇 1. 循环链表报数3,输出最后一个报数编号 #include <iostream> using namespace std;typedef struct Node {int no;struct Node* next; }Node, *NodeList;void createNodeListTail(NodeList&L, int n) {L (Node*)malloc(siz…...
环境评价分析中土地利用现状图的制作方法
在环境评价中,土地利用现状图是重要的基础图件,用于分析项目区域的土地利用类型、分布格局及其生态环境特征。 以下是制作土地利用现状图的详细步骤和方法: 一、前期准备工作 确定制图范围和比例尺 根据评价范围确定制图区域边界 常用比例…...
SpringMVC 请求处理详解
SpringMVC 是 Spring 框架中用于构建 Web 应用程序的模块,它基于 MVC(Model-View-Controller)设计模式,能够将业务逻辑、数据和显示分离,从而提高代码的可维护性和可扩展性。本文将详细介绍 SpringMVC 中请求处理的原理…...
编程题记录3
九宫幻方 题目链接:https://www.lanqiao.cn/problems/100/learning/?page1&first_category_id1&second_category_id3&tags%E7%9C%81%E8%B5%9B&tag_relationintersection 先旋转、镜像得到所有的情况,可以发现情况是可以暴力得出的。…...
sql语句给表添加一个递增列
SSMS–》视图-》数据库(表)-》新建查询 ALTER TABLE [表名] DROP COLUMN ID ALTER TABLE [表名] ADD ID INT IDENTITY(1,1)执行完以上操作,会在表的最后一列添加一个自增字段 接下来如何把最后一个字段放到第一个字段呢? 假如sqlserver 表test 有以下…...
Java面试黄金宝典10
1. Tomcat 的负载均衡方式 定义 Tomcat 的负载均衡是将客户端的请求均匀分配到多个 Tomcat 实例上,以提高系统的处理能力和可用性。常见的负载均衡方式有以下几种: 硬件负载均衡 原理:采用专门的硬件设备,如 F5 Big - IP、Cisco…...
vue java 实现大地图切片上传
文章目录 一、项目背景二、页面三、代码1.前端2.mock-i18n.js文件3.xx.js文件定义方法4.配置文件 application.properties5.后端方法 四、易错点易错点1:前端要进行分片切割,然后再分片上传。易错点2:后端配置文件要配置。易错点3:…...
langchain+ollama+deepseek的部署(win)
ANACONDA 安装 官网:Download Anaconda Distribution | Anaconda 配置系统环境 在系统变量中配置 检查是否配置成功 通过 cmd 窗口输入: conda info 如图:表示成功 配置你的虚拟环境 二、安装 ollama allama 安装 官网地址:…...
deepseek实战教程-第四篇开放平台接口文档使用
第二篇讲解了如何本地安装大模型,然后编写一个基于jsspringboot的项目,通过页面实现对话的功能。实际上,上面的demo用到是deepseek提供的接口,那么deepseek共提供了多少接口呢?这就要讨论到deepseek的接口库了…...
Android第六次面试总结(Java设计模式二)
在 Android 开发里,ListView 和 RecyclerView 是常用的视图组件,用于展示大量数据列表。不过,这些视图组件本身无法直接展示原始数据源,需要借助 Adapter(适配器)把数据源适配成视图能够展示的数据…...
一站式电脑工具箱,功能全面且实用
小明工具箱是一款集成了系统设置、维护工具、实用工具、图像处理等四大类工具的电脑工具箱,涵盖了上百种实用工具,能够满足用户在文件管理、文本处理、系统优化、图像处理等多方面的需求。 初次使用,需双击软件,便会自动将工具解压…...
那些正常的动态规划
文章目录 前言动态规划到底是啥? 线性dp最长上升子序列子集和子序列和子串的区别内容分析 最大上升子序列例题1——[NOIP2004 提高组] 合唱队形分析 最长公共子序列最长公共子串 平面dp例题2——[NOIP2000 提高组] 方格取数分析 例题3——[NOIP2008 提高组] 传纸条分…...
Opencv计算机视觉编程攻略-第二节 图像像素操作
第二节 图像像素操作 1.访问像素值2.用指针扫描图像3.扫描图像并访问相邻像素4.实现简单的图像运算5.图像重映射 1.访问像素值 以椒盐噪声为例展示像素值访问的几种方法 void salt(cv::Mat image, int n) {// C11 random number generatorstd::default_random_engine generat…...
华为交换相关
端口模式 (1)access:只能属于单个VLAN,一般用于连接计算机端口 (2)trunk:端口允许多个VLAN通过,可以接收和发送多个VLAN报文,默认情况下只有管理VLAN不携带标签信息 &…...
Chrome Performance 面板完全指南:从卡顿到丝滑的终极调试术
1.写在前面 前端性能调试是优化网页加载速度和运行效率的关键步骤,Chrome DevTools 的 Performance 面板 是核心工具; 2.Performance 面板使用步骤 ★ 基础 打开面板 在 Chrome 中按 F12 → 切换到 Performance 标签页。 开始录制 方式一:点击 ⚫️ 圆…...
idea中快速注释函数
在IntelliJ IDEA中,有多种方法可以快速注释函数。 使用快捷键 你可以使用以下快捷键来快速注释函数[3]: 行注释:使用Ctrl/(Windows系统)或Command/(Mac系统)可以在当前行前添加或删除单行注释…...
深入解析Linux网络、安全与容器技术
1. Netfilter:Linux内核的包处理框架 Netfilter 是Linux内核中用于控制网络数据包的核心机制,负责处理数据包的过滤、修改和转发。其核心功能包括: 包过滤(Packet Filtering):根据规则允许或拒绝数据包通过…...
JDK 24:Java 24 中的新功能
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:历代文学,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计…...
java中的枚举类型和c,c++的有区别吗?c,c++的枚举,结构体,联合体,三种数据有什么区别和联系
Java 枚举类型与 C、C 枚举类型的区别 1. 类型安全 Java:Java 的枚举类型是类型安全的。枚举常量是枚举类型的实例,编译器会严格检查传递的参数是否为该枚举类型的有效常量。例如: java Apply enum Color { RED, GREEN, BLUE } // 编译器会检…...
ubuntu服务器server版安装,ssh远程连接xmanager管理,改ip网络连接。图文教程
ventoy启动服务器版iso镜像,注意看server名称,跟之前desktop版ubuntu不一样。没有gui界面。好,进入命令行界面。语言彻底没汉化了,选英文吧,别的更看不懂。 跟桌面版ubuntu类似,选择是否精简系统࿰…...
