ngrep :网络嗅探的利器

在网络安全、渗透测试和系统调试领域,捕获和分析网络流量是不可或缺的技能。虽然像 tcpdumpWireshark 这样的工具广为人知,但有一个轻量级且功能强大的工具却常常被忽视——ngrep。本文将详细介绍 ngrep 的功能、使用方法及其在实际场景中的应用,同时对比类似工具(如 tcpdumpWiresharkdsniff),帮助读者理解它们的特点和适用场景。


一、什么是 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 <接口>:指定监听接口(如 eth0tun0)。
  • -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)。
    • 包含多个工具(如 dsniffarpspoof)。
  • 优点:针对性强,适合密码捕获。
  • 缺点:功能单一,维护较少。
  • 示例
    sudo dsniff -i eth0
    
  • 与 ngrep 的区别dsniff 是被动嗅探工具,ngrep 更灵活。
4. tshark
  • 特点
    • Wireshark 的命令行版本,支持复杂过滤。
  • 优点:功能强大,协议支持广。
  • 缺点:语法复杂,学习曲线陡。
  • 示例
    sudo tshark -i eth0 -Y "icmp"
    
  • 与 ngrep 的区别tshark 更全面,ngrep 更简单。

五、ngrep 的优势与局限
优势
  1. 简单高效:结合了抓包和文本匹配,命令简洁。
  2. 实时性:适合快速调试或渗透测试。
  3. 轻量级:在资源受限环境(如 OSCP 的 Kali VM)表现良好。
局限
  1. 协议支持有限:无法解析复杂协议的头部(如 HTTP/2)。
  2. 加密流量:无法直接处理 HTTPS 等加密数据。
  3. 输出格式:不如 Wireshark 直观。

六、实用建议
  1. 学习场景
    • 在 CTF 或 OSCP 中,用 ngrep 捕获明文流量(如 SMB、FTP)。
    • 示例:
      sudo ngrep -d tun0 'samba|user|pass' port 445
      
  2. 与其他工具结合
    • tcpdump 捕获完整流量,再用 ngrep 过滤:
      sudo tcpdump -i eth0 -w dump.pcap
      ngrep -I dump.pcap 'GET'
      
  3. 替代选择
    • 如果需要图形化分析,转用 Wireshark
    • 如果需要批量处理,试试 tshark

七、结语

ngrep 虽然不如 tcpdumpWireshark 出名,但其独特的正则表达式匹配能力和轻量级设计使其在特定场景下(如实时嗅探、渗透测试)极具价值。相比之下,tcpdump 更通用,Wireshark 更强大,dsniff 更专注,而 ngrep 则在简洁性和灵活性间找到了平衡。

对于网络安全爱好者或从业者来说,掌握 ngrep 不仅能提升效率,还能在资源受限的环境中发挥奇效。如果你还未尝试,不妨在下次调试或测试中用它捕获流量,体验它的魅力吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39415.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机械臂【逆运动学】

回顾正运动学fk&#xff1a; IK&#xff1a; 几何法 代数法 六轴 456轴交再同一点 有解析解 下列公式为正运动学部分结论 a和d是长度 &#xff0c;theta和alfa是角度 **疑问&#xff1a;alfa00&#xff1f; Z轴互相平行 ** 已知末端要在空间XYZ处如下 绿色项&#x…

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录&#xff0c;点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏&#xff1a; IDEA 1. 问…

Ubuntu22.04美化MacOS主题

安装Tweaks 参考Ubuntu 22.04 桌面美化成Mac风格这篇更好点 sudo apt install gnome-tweaks gnome-shell-extensions -y安装macos主题 git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git # 进到文件目录 ./install.sh -t all -N glassy sudo ./tweaks.sh -g…

基于Python的机器学习入门指南

在当今数字化时代&#xff0c;机器学习&#xff08;Machine Learning&#xff09;已经成为科技领域中最热门的话题之一。它不仅改变了我们对数据的理解和处理方式&#xff0c;还在许多行业中得到了广泛应用&#xff0c;如金融、医疗、交通等。Python作为一门强大的编程语言&…

Python前缀和(例题:异或和,求和)

前缀和 前缀和&#xff1a;对于一个长度为n的列表a&#xff0c;前缀和为&#xff1a; sum[i]a[0]a[1]...a[i] 前缀和的性质&#xff1a; 第一条性质用于处理出前缀和&#xff1a; Sum[i]Sum[i-1]a[i] 第二条性质可以在O(l)的时间内求出区间和&#xff1a; a[l]....a[r] S…

统计矩的高阶推广:经验还是理论推导?

矩的发展既是经验总结的结果&#xff0c;也是数学理论推导的产物。研究者们在分析数据、描述物理现象的过程中&#xff0c;发现了低阶矩与日常物理概念&#xff08;如质心、惯性&#xff09;之间的紧密联系&#xff0c;而高阶矩的应用往往出现在更复杂的数学体系中&#xff0c;…

安宝特分享|AR智能装备赋能企业效率跃升

AR装备开启智能培训新时代 在智能制造与数字化转型浪潮下&#xff0c;传统培训体系正面临深度重构。安宝特基于工业级AR智能终端打造的培训系统&#xff0c;可助力企业构建智慧培训新生态。 AR技术在不同领域的助力 01远程指导方面 相较于传统视频教学的单向输出模式&#x…

《软件安装与使用教程》— NVIDIA CUDA在Windows的安装教程

《软件安装与使用教程》— NVIDIA CUDA在Windows的安装教程 Installed: - Nsight Monitor Not Installed: - Nsight for Visual Studio 2019 Reason: VS2019 was not found - Nsight for Visual Studio 2017 Reason: VS2017 was not found - Integrated Graphics Frame Debugge…

领域驱动设计(DDD)实践入门

文章目录 1.认识领域驱动设计1.1 简介1.2 发展历史1.3 DDD 的兴起 2.从一个简单案例2.1 转账需求2.2 设计的问题2.3 违反的设计原则 3.使用 DDD 进行重构抽象数据存储层抽象第三方服务抽象中间件封装业务逻辑重构后的架构 4.小结参考文献 1.认识领域驱动设计 1.1 简介 领域驱…

OrangePi 5B 内核开启 CONFIG_CIFS 通过 Samba 挂载 NAS 路径

文章目录 OrangePi 5B 内核开启 CONFIG_CIFS 通过 Samba 挂载 NAS 路径获取 Linux SDK 的源码从 github 下载 orangepi-build编译 linux 内核更新开发板内核上传编译好的 deb 包到开发板登录开发板&#xff0c;卸载旧内核安装新内核重启开发板 Ubuntu & Debian 系统下挂载 …

8662 234的和

8662 234的和 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;模拟、二维前缀和 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int[] a ne…

softmax回归的实现

softmax回归是logistic回归在多分类问题上的推广 原理 网络架构&#xff1a; 常用的方式是独热编码&#xff1a; 如果下面这样&#xff0c;会使得分类器更倾向于把奶牛和耗牛预测到一起&#xff0c;因为预测为海公牛惩罚更大&#xff0c;这样是不合理的。 损失函数&…

架构师面试(十九):IM 架构

问题 IM 系统从架构模式上包括 【介绍人模式】和 【代理人模式】。介绍人模式也叫直连模式&#xff0c;消息收发不需要服务端的参与&#xff0c;即客户端之间直连的方式&#xff1b;代理人模式也叫中转模式&#xff0c;消息收发需要服务端进行中转。 下面关于这两类模式描述的…

WSL2增加memory问题

我装的是Ubuntu24-04版本&#xff0c;所有的WSL2子系统默认memory为主存的一半&#xff08;我的电脑是16GB&#xff0c;wsl是8GB&#xff09;&#xff0c;可以通过命令查看&#xff1a; free -h #查看ubuntu的memory和swap &#xff08;改过的11GB&#xff09; 前几天由于配置E…

OpenCV图像拼接(5)构建图像的拉普拉斯金字塔 (Laplacian Pyramid)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::createLaplacePyr 是 OpenCV 中的一个函数&#xff0c;用于构建图像的拉普拉斯金字塔 (Laplacian Pyramid)。拉普拉斯金字塔是一种多…

C++题目

1、内存管理 1.内存模型 栈:在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。 堆&#xff1a;就是那些由new分配的内存块&#xff0c;其释放由程序员控制&#xff08;一个new对应一个delete&#xff09…

vscode终端不识别npm 无法解析npm

vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑&#xff0c;寻思安装各种环境&#xff0c;一顿操作猛如虎&#xff0c;当最后一个打开vscode后&#xff0c;运行项目发现&#xff0c;新建终端>npm run dev 无法识别。 在cmd 中 打node -…

解决 Element UI 嵌套弹窗显示灰色的问题!!!

解决 Element UI 嵌套弹窗显示灰色的问题 &#x1f50d; 问题描述 ❌ 在使用 Element UI 开发 Vue 项目时&#xff0c;遇到了一个棘手的问题&#xff1a;当在一个弹窗(el-dialog)内部再次打开另一个弹窗时&#xff0c;第二个弹窗会显示为灰色&#xff0c;影响用户体验。 问题…

EasyUI数据表格中嵌入下拉框

效果 代码 $(function () {// 标记当前正在编辑的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …

JAVA学习*Object类

Object类 Object类是所有类的父类 类中有一些方法&#xff08;都需要掌握&#xff09; toString()方法 在学习类的对象的时候有介绍过了&#xff0c;当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较&#xff0c; 如果左右两侧是基本类型变量&#…