
文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载本篇指南基于 linux-command 仓库中的 ngrep 命令文档 展开系统讲解 ngrep 的安装、语法、全部选项与真实抓包场景。读完你可以掌握如何在 Linux 上从源码编译安装 ngrep如何用类 grep 的正则表达式在实时流量中搜寻指定数据包如何借助-W byline、-d、-t、-N等参数完成 HTTP 请求/响应、Flash 视频地址等实战抓取并理解其与 libpcap、BPF 过滤器的关系。什么是 ngrepgrep 的网络版ngrepnetwork grep是 grep 命令的网络版它力求继承 grep 的多数特征用于在实时网络流量中搜寻指定的数据包。简单来说grep 在文本文件里做正则匹配而 ngrep 在网卡上流过的数据包里做正则匹配。ngrep 之所以能做到这一点是因为它依赖libpcap库工作。libpcap 是 Linux 平台上最经典的抓包库同样被 tcpdump 命令 所依赖。正因如此ngrep 得以支持大量的操作系统和网络协议它能识别TCP、UDP 和 ICMP包并且理解BPFBerkeley Packet Filter过滤机制——这正是 tcpdump 抓包过滤表达式的底层引擎。在本仓库中ngrep 属于网络通讯类命令的范畴与 tcpdump、netstat、ping、nc 等工具并列是网络排障与安全分析中按内容找包的利器tcpdump 擅长按主机、端口、协议过滤包而 ngrep 更进一步可以按包内的字符串内容如 URL、关键字匹配并展示整段报文。安装 ngreplibpcap 与源码编译ngrep 的核心依赖是 libpcap因此安装分两步先装好 libpcap再编译安装 ngrep 本体。第一步安装 libpcap在 Red Hat 系发行版上最简单的做法是直接用包管理器安装yum install libpcap需要注意有时候用 libpcap 安装包装出来的库不完整会直接影响 ngrep 的正常使用。如果 yum 无法安装或安装后 ngrep 报错建议采用源码编译方式安装 libpcapwget http://www.tcpdump.org/release/libpcap-1.3.0.tar.gz tar -zxf libpcap-1.3.0.tar.gz cd libpcap-1.3.0 ./configure make make install第二步编译安装 ngrepngrep 本身的安装就是经典的 configure / make / make install 三部曲./configure make make install常见问题pcap 头文件路径在 configure 阶段如果遇到please wipe out all unused pcap installations之类的报错说明系统中存在多个 libpcap 安装configure 无法判断使用哪一个。此时需要显式指定 pcap 头文件的安装路径常见写法如下./configure --with-pcap-includes/usr/local/include/pcap安装完成后直接在终端输入ngrep即可验证安装是否成功——能正常输出网卡接口和启动信息说明安装无误。语法与命令行结构ngrep 的完整语法如下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语法结构可以拆解为三个层次选项区尖括号内是可选的命令行选项控制显示格式、匹配行为、抓包数量等match expression匹配表达式这是 ngrep 的核心使用类 grep 的正则表达式去匹配数据包内容例如\.flv匹配包含.flv字符串的包bpf filterBPF 过滤器可选使用 tcpdump 风格的过滤表达式例如tcp port 18080只让符合条件的包进入匹配流程。三者同时使用时先由 BPF 过滤器做粗粒度筛选按协议、端口、主机再由正则匹配表达式做内容级筛选最后按选项要求的格式输出。这与 grep 的先选文件、再匹配内容思路一脉相承。选项速查表ngrep 的选项分为几类下面逐一说明匹配行为类-e # 显示空数据包 -i # 忽略大小写 -v # 反转匹配不匹配指定模式的数据包才会显示 -w # 整字匹配 -x # 以16进制格式显示 -X # 以16进制格式匹配 -N # 显示由 IANA 定义的子协议号 -M # 仅进行单行匹配其中-N在分析未知协议时非常有用它会输出数据包所属的 IANA 子协议编号便于判断应用层协议类型。时间与输出格式类-t # 在每个匹配的包之前显示时间戳 -T # 显示上一个匹配的数据包之间的时间间隔 -W # 设置显示格式byline 将解析包中的换行符 -c # 强制显示列的宽度 -P # 设置不可打印字符的显示字符 -l # 使标准输出行缓冲make stdout line buffered -q # 静默输出仅打印匹配到的包不打印接口、match 等头信息-W byline是最常用的可读性参数默认情况下 ngrep 会把包内所有数据连续打印成一行换行符也被当作普通字节导致 HTTP 报文可读性极差加上-W byline后ngrep 会解析包内的换行符把 HTTP 请求/响应的每一行请求行、Header、空行分行显示。抓包控制类-d # 使用哪个网卡可以用 -L 选项查询 -L # 查询网卡接口 -p # 不使用混杂模式 -n # 仅捕获指定数目的数据包进行查看 -A # 匹配到数据包后 dump 随后的指定数目的数据包 -s # 设置 bpf 的 caplen抓取长度 -S # 设置匹配包上的 limitlen显示长度上限-d any可以同时监听所有网卡-A num类似 grep 的-Aafter context匹配到目标包后继续显示后续 num 个包非常适合追踪一次请求引发的后续数据包。文件读写与权限类-I # 从文件中读取数据进行匹配 -O # 将匹配的数据保存到文件 -F # 使用文件中定义的 bpfBerkeley Packet Filter -D # 按 pcap_dump 文件记录的原始时间间隔回放数据包 -R # 不做权限降级逻辑dont do privilege revocation logic-I/-O让 ngrep 也能像 tcpdump 一样离线分析 pcap 文件先用 tcpdump 或 ngrep-O抓包落盘再用-I慢慢分析避免线上长时间占用终端。-D则用于按原始时间间隔回放抓包文件还原现场。通配说明上表中的-Lh组合里-h用于显示帮助信息其余选项的英文描述如-R、-D、-s、-S、-P、-l在帮助输出中即为原文中文注释为补充解释。实战一捕捉指定端口的 HTTP 请求与响应最常见的场景是在开发调试时查看本机某个服务端口上进出站的 HTTP 报文。以监听本机18080端口为例ngrep -W byline -d lo port 18080-W byline解析包中的换行符否则包内所有数据都是连续的可读性差-d lo监听本地回环网卡loopback本机进程间通信的流量都走 loport 18080BPF 过滤器只匹配 TCP/UDP 端口为 18080 的包。如果要监听对外网卡上的 Web 流量比如本机对外提供 80 端口服务把网卡换成对外网卡即可ngrep -W byline -d eth0 port 80注意网卡名称在不同发行版/虚拟化环境可能不同如eth0、ens33、enp0s3可以先运行ngrep -L查看本机可用的网卡列表再指定。如果不确定流量走哪张网卡可以用-d any捕获所有网卡的包再叠加过滤条件ngrep [a-zA-Z] -t -W byline -d any tcp port 18080这条命令同时演示了三个要素的组合用法[a-zA-Z]正则匹配表达式只匹配包含字母的包过滤掉纯二进制的噪声包-t在每个匹配的包前显示时间戳便于观察请求时序-d anytcp port 18080先按协议TCP和端口18080粗筛再做内容匹配。实战二从实时流量中提取 Flash 视频下载地址ngrep 一个非常经典的用途在浏览网页时从网络流量中实时抓取视频、图片等资源的真实下载 URL。例如要捕获包含字符串.flv的数据包Web Flash 视频文件的下载地址通常就藏在 GET 请求里可以执行ngrep -d3 -N -q \.flv启动后 ngrep 会先打印当前使用的网卡接口和匹配表达式例如interface: \Device\TNT_40_1_{670F6B50-0A13-4BAB-9D9E-994A833F5BA9} (10.132.0.0/255.255.192.0) match: \.flv这条命令用到了三个关键参数-d3监听编号为 3 的网卡接口不同平台编号规则不同Windows 上会显示为\Device\TNT_40_1_...这样的 GUID 名称-N显示由 IANA 定义的子协议号帮助识别应用层协议-q静默模式只输出匹配到的数据包正文不打印接口和 match 头信息减少干扰。此时打开一个视频播放页面ngrep 会立刻捕获到携带.flv关键字的 HTTP GET 请求T(6) 10.132.34.23:24860 - 61.142.208.154:80 [AP] GET /f59.c31.56.com/flvdownload/12/19/ggyg774156.com_56flv_zhajm_11955697397.flv HTTP/1.1..accept: */*..Referer: http://www.56.com/flashApp/v_player_site.swf..x-flash-version: 9,0,45,0..UA-CPU: x86..Accept-Encoding: gzip, deflate..User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)..host: f59.r.56.com..Connection: Keep-Alive..Cookie: whistoryview23423759-23635627-23423344-23171935-23058374-23081156-23207350-22395727-; geoip............; wl_all_sy....逐字段解读这段输出T(6)-t类时间戳信息括号内数值与抓包时间处理相关10.132.34.23:24860 - 61.142.208.154:80源地址端口到目的地址端口说明这是本机发出的、发往对端 80 端口的请求[AP]TCP 标志位标记A 表示 ACK、P 表示 PUSH说明这是携带数据的确认包GET /f59.c31.56.com/.../....flv HTTP/1.1请求行.flv文件的完整路径就在其中后续的accept、Referer、User-Agent、host、Cookie等是 HTTP 请求头注意默认输出下它们之间以..分隔——这正是换行符未被解析的表现。至此地址已经找到http://f59.c31.56.com/flvdownload/12/19/ggyg774156.com_56flv_zhajm_11955697397.flv。实战三加 -W byline 提升可读性默认输出把换行符显示为..整段 Header 挤在一行里难以阅读。加上-W byline参数后ngrep 会解析包内的换行符输出变成按行展示的标准 HTTP 报文T(6) 2007/11/25 15:56:12.192619 10.132.34.23:26365 - 59.151.21.101:80 [AP] GET /aa.flv HTTP/1.1. Accept: */*. Accept-Language: zh-cn. UA-CPU: x86. Accept-Encoding: gzip, deflate. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30). Host: www.google.cn. Connection: Keep-Alive. Cookie: PREFida0b2932c336477e9:TB4:NW1:TM1187877372:LM1187956074:SY1FzndprT3vFo7ac; SIDDQAAAHcAAABJCEXeOVLHu2rIfb5BfKP3GG9PbhJDEkXsLTV8y0f_lvSd2Y46Q0FPt83CnEs9rxA1xBDM9mLR8-ckWeScyOQA8PyYnX5u5OjFvjfRbDg_FDZfwxhRzqS9KPZv26pjnsUxs0FDM1xpJ5AgDn38pXtlCdkksJ0-cbiIWoA61oHWMg; NID7AvJxn5B6YOLLxoYz4LLzhIbNsQUQiulRS6UJGxdBniQBmXm99y7L-NBNORN82N3unmZSGHFPfePVHnLK2MjYjglyXZhU9x7ETXNBnY3NurNijHDhJ7Kyi7E53UBOcv4V.对比默认输出可以看到行首时间戳升级为完整格式2007/11/25 15:56:12.192619精确到微秒每个 Header 独占一行句尾的.即原包中的\r\n换行符解析结果请求行、各请求头、Cookie 一目了然适合直接阅读和复制分析。与 grep、tcpdump 的配合与区别grep处理的是文本文件/命令输出在 linux-command 仓库中对应 grep 命令文档。它支持-i忽略大小写、-v反转、-w整词、-A/-B/-C上下文行等ngrep 借鉴了其中大部分语义-i、-v、-w、-A但作用对象从行变成了网络数据包。tcpdump处理的是网络数据包对应仓库中的 tcpdump 命令文档按主机、端口、协议等 BPF 表达式过滤输出包头信息ngrep 同样内置 BPF 过滤器port 18080、tcp port 18080写法一致但额外提供包内容正则匹配和可读的报文正文展示-W byline适合直接在流量里找关键字、看请求内容。实际排障时可以组合使用先用 tcpdump 确认流量存在与包方向再用 ngrep 匹配具体内容或先用 tcpdump-w落盘抓包再用 ngrep-I离线分析互不冲突。常见问题与注意事项权限问题抓包通常需要 root 权限若提示网卡无法打开请用sudo或 root 用户执行-R选项用于控制是否执行权限降级逻辑。网卡选择不确定用哪张网卡时先ngrep -L列出所有接口本机通信用-d lo对外流量用-d eth0或-d any。正则转义匹配点号等特殊字符时要转义如\.flv在 shell 中最好用单引号包裹表达式防止[a-zA-Z]这类字符被 shell 展开。可读性观察 HTTP 这类按行组织的文本协议时务必加-W byline否则包内数据会连成一行。依赖完整性libpcap 安装不完整是 ngrep 无法正常工作的常见原因遇到 configure 报please wipe out all unused pcap installations时按上文用--with-pcap-includes指定头文件路径重新 configure 即可。离线分析需要长时间抓包时用-O将匹配数据保存为 pcap 文件之后再通过-I读取分析或配合-D按原始时间间隔回放。延伸阅读本文原始出处为仓库中的 command/ngrep.md可在 linux-command 仓库通过 npm 安装linux-command包 或直接浏览 command 目录中查阅。相关工具文档tcpdump 抓包命令、grep 文本搜索命令、netstat 网络状态命令、nc 网络工具。仓库还提供了完整的 命令贡献规范如需补充 ngrep 更多实例可参照其中的文档格式约定提交。赞分享文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载相关推荐Cherry Studio 跨平台上手指南Windows、macOS、Linux 各 3 步装好多模型一个入口管起来Cherry Studio 跨平台上手指南Windows、macOS、Linux 各 3 步装好多模型一个入口管起来 在 Windows 台式机、Mac 笔AI 应用大模型桌面应用本地部署RAGProxyPin全平台网络抓包工具实战指南ProxyPin全平台网络抓包工具实战指南 ProxyPin是一款基于Flutter框架开发的开源免费抓包工具支持Windows、Mac、Linux、And网络开发工具接口测试Linux 命令大全之 grep文本搜索与正则匹配实战手册linux-command 项目Linux 命令大全之 grep文本搜索与正则匹配实战手册linux command 项目 本文是 linux command 项目 command/gr文档教程上一篇如何掌握房间布局估计技术Awesome Scene Understanding中的核心算法论文完全指南下一篇XiangShan XSPdb 反汇编子系统解析spike-dasm/capstone 双引擎、四类内存区域反汇编与缓存机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考