Ngrep – Linux 网络数据包分析器
ngrep一个类似于grep 命令的网络包分析器,但ngrep grep 是网络层的包。这个工具 grep 将要进入网络接口的流量。ngrep 允许我们指定一个扩展的正则或十六进制表达式来匹配数据包的数据负载。ngrep 可以在 IPv4/6、TCP、UDP、ICMPv4/6 等协议上工作, IGMP 以及许多接口上的 Raw。
安装
现在让我们看看如何在 Linux 上安装 ngrep。 ngrep 在大多数 Linux 包管理器中可用。我们将使用这些包管理器来安装 ngrep。根据您的操作系统使用以下命令之一:
对于 Debian/Ubuntu/Kali Linux:
sudo apt-get install ngrep
对于 Arch Linux:
sudo pacman -S ngrep
对于 Fedora:
dnf install ngrep
用法
成功安装ngrep后,现在让我们看看如何使用ngrep。要监控在默认网络接口上运行的所有流量,只需使用 ngrep 命令
sudo ngrep
停止使用 ngrep ctrl+C键。
基于协议过滤数据包
要仅显示有关数据包头和数据包有效负载的信息并避免无用信息,请在 ngrep 命令中使用 -q 选项。我们将在下一个命令中使用此选项。让我们看看如何使用 ngrep 过滤特定协议的包。让我们举一个例子,在这个例子中,我们将捕获所有 ICMP 包。要使用 ICMP 协议,我们将向另一台主机发送 ping,然后使用 ngrep 捕获所有 ICMP 数据包。
sudo ngrep -q '.' 'icmp'
基于主机过滤数据包
我们也可以根据主机对数据包进行过滤,比如我们抓一下主机google.com的数据包:
sudo ngrep -q '.' 'host google.com'
过滤通过浏览器接收的数据包
要捕获通过 Web 浏览器上网时接收到的所有数据包,我们可以使用以下命令:
sudo ngrep -q '^GET .* HTTP/1.1
过滤通过端口的数据包
要监控通过源主机或目标端口的流量,请使用 port 选项并使用 ngrep 命令提及端口号:
sudo ngrep port 443
过滤包含“错误”一词的数据包
要在任何基于网络的 Syslog 流量中搜索“error”一词的出现,请使用以下命令:
sudo ngrep -d any 'error' port 514
使用文件/etc/services/ 中的端口名称而不是端口
ngrep 工具还可以将存储在 /etc/services 中的服务端口名称转换为端口号,这意味着无需在 ngrep 命令中提及端口号,我们可以在 /etc/services 文件中提及端口名称。
sudo ngrep -d any 'error' port syslog
在端口号 80 上过滤数据包
要捕获在端口号 80 上运行的所有流量,我们可以使用以下命令:
sudo ngrep port 80
以易于阅读的格式获取数据包数据
在前面的输出中,我们可以看到标题没有格式化,这使得阅读标题变得困难。要以格式良好的方式获取标题,请使用以下命令:
sudo ngrep -W byline port 80
获取数据包的时间戳
每次匹配数据包时,将 -t 选项与 ngrep 命令一起使用以获取 YYYY/MM/DD HH:MM:SS.UUUUUU 中的时间戳
sudo ngrep -t -W byline port 80
避免混杂模式
使用 -p 选项避免将接口置于混杂模式
sudo ngrep -p -W byline port 80
当观察原始或未知协议以显示子协议编号和单字符标识符时,请在 ngerp 命令中使用 -N 选项:
sudo ngrep -N -W byline
man ngrep