ngrep是grep和tcpdump的综合体。它能够监视网络端口并显示匹配特定模式的分组。你必须以root身份运行ngrep。
11.3.1 预备知识
你的系统中可能并没有安装ngrep。可以使用包管理器自行安装:
# apt-get install ngrep# yum install ngrep -y# yum install epel-release 安装epel扩展库# yum install ngrep -y #安装ngrep
11.3.2 实战演练
ngrep可以接受一个要匹配的模式(例如grep)、一个分组过滤器(例如tcpdump)以及多个用于调整命令行为的选项。
下面的例子会监视端口80上的流量并输出内容包含字符串Linux的分组:
$ ngrep -q -c 64 Linux port 80interface: eth0 (192.168.1.0/255.255.255.0)filter: ( port 80 ) and (ip or ip6)match: LinuxT 192.168.1.44:36602 -> 152.160.80.35:80 [AP]GET /Training/linux_detail/ HTTP/1.1..Host: noucorp.com..User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0..Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8..Accept-Language: en-US,en;q=0.5..Accept-Encoding: gzip, deflate..Referer: http://noucorp.com/Training/..Connection: keep-alive..Cache-Control:max-age=0....
选项-q指示ngrep只打印分组头部和载荷。选项-c定义了以几列的形式显示分组的载荷。默认会显示4列,不过如果载荷内容是文本的话,这个选项并没有什么用。跟随在选项之后的是要匹配的字符串(Linux),然后是分组过滤表达式,其过滤器语法和tcpdump一样。
11.3.3 工作原理
ngrep同样会设置网卡的混杂模式,允许嗅探网络上出现的所有分组,不管是否为发往本机的。
上一个例子中显示了所有的HTTP流量。如果主机处于无线网络或是通过集线器(非交换机)接入有线网络,ngrep能够显示出网络中所有用户的Web流量。
11.3.4 补充内容
选项-x能够以十六进制和可打印形式显示分组内容。该选项可以配合-X在分组中搜索二进制字符串(可能是病毒签名或是某些已知模式)。
下面的例子在HTTPS连接中监视指定的二进制流:
# ngrep -xX '1703030034' port 443interface: eth0 (192.168.1.0/255.255.255.0)filter: ( port 443 ) and (ip or ip6)match: 0x1703030034################################################T 172.217.6.1:443 -> 192.168.1.44:40698 [AP]17 03 03 00 34 00 00 00 00 00 00 00 07 dd b0 02 ....4...........f5 38 07 e8 24 08 eb 92 3c c6 66 2f 07 94 8b 25 .8..$...<.f/...%37 b3 1c 8d f4 f0 64 c3 99 9e b3 45 44 14 64 23 7.....d....ED.d#80 85 1b a1 81 a3 d2 7a cd .......z.
井字符号表示被扫描的分组,这些分组中不匹配指定的模式。ngrep还有很多其他的选项,详细信息可以参阅其手册页。
