justniffer实战应用
在上一篇blog《justniffer使用指南》中讲了justniffer的基本使用,本篇blog将分享一下justniffer在生产环境中的具体使用。下面就实际环境中的使用举一些例子加以说明。
0x01 输出日志格式
首先要讲到的就是justniffer的日志输出日志格式,因为这个功能太实用而且强大了。
使用参数:-l or –log-format=<format>
基本示例输出Example: justniffer -i eth0 -l “\”%request.line\”%tab%response.time”
其输出的日志格式如下形式:
“POST /v2/rss/network/oreste.notelli?src=ffbmext2.1.034 HTTP/1.1” 0.623382
“GET /man_page_howto.html HTTP/1.1” 0.024437
0x02 日志格式关键字
由于涉及到的关键字较多,这里就不一一列举说明,详细见官方文档。
0x03 时间戳格式化表示
justniffer所采用的时间戳格式采用标准的strtime格式。
详细相关格式化参数见官方文档。
0x04 实例使用教程
$ justniffer -i eth0
实例3:
$ justniffer -i eth0 -r
全包数据捕获(添加-u或者-x参数编码不可打印的字符)。输出格式如下:
实例4:
$ justniffer -i eth0 -l "%request.timestamp %source.ip %dest.ip %request.header.host %request.url"
实例5:
$ justniffer -f /file.cap
tcpdump 的命令格式: tcpdump -w /tmp/file.cap -s0 -i ath0
从一个.pcap数据包中分析和处理。注意:捕获文件必须与整个数据包捕捉无限snaplen用于执行。justniffer可以工作在整个包pcap文件。
实例6:
$ justniffer -i eth0 -l "%request.timestamp %request.header.host %request.url %response.time"
采用多个关键词可以构造更加自定义化的输出格式,上面的配置参数输出如下:
也可以指定时间戳格式:
$ justniffer -i eth0 -l "%request.timestamp (%B %d %Y %H:%M:%S) %request.header.host %request.url %response.time"
或者当%request.header.host 的之不存在时打印出“NoHostFound”字符串:
$ justniffer -i eth0 -l "%request.timestamp %request.header.host (NoHostFound)%request.url %response.time"
一些关键词都有自己的格式,可以使用(-n)参数设置未识别出来的字符串。一般是:%request.header.[headername],当然如果存在“not found”字符串时,将会覆盖掉-n参数:
$ justniffer -i eth0 -l "%request.timestamp %request.header.host(NoHostFound) %request.header.host %request.url %response.time" -n N/A
输出如下:
实例7:
捕获http数据报文。使用-p参数可以让你通过兼容tcpdump过滤语法的格式进行自定义输出。例如:
$ justniffer -i eth0 -r -p "port 80 or port 8080"
实例8:
使用-e参数执行扩展脚本。这样的话,justniffer的输出将会重定向:
$ justniffer -l "%response" -e ./myscript.sh -i ath0
myscript.sh脚本内容如:
#!/bin/bash # myscript.sh # example script (print all lines containing "href" string) while read inputline do anchors=`echo "$inputline" | grep href` if [ "$anchors" != "" ]; then echo $anchors; fi; done
实例9:
捕获SMTP数据报文,如:
$ justniffer -i eth0 -r -p "port 25"
实例10:
通过常用关键词记录类如日志记录,提供基于HTTP协议的测量接线时间,服务性能概述响应时间,TCP连接超时,保持请求等:
$ sudo justniffer -i eth0 -u -p "port 80 or port 8080" -l "%request.header.host %request.url %connection.time %idle.time.0 %request.time %response.time.begin %response.time.end %idle.time.1 %connection %close.originator"
实例11:
通过正则匹配进行关键字查找。例如对URL的正则:[^\s]*[\s]*([^\s]*), 基于http的正文内容的正则:Content-Type:(\s)*([^\r]*)
$ sudo justniffer -l "%request.header.grep([^\s]*[\s]*([^\s]*)) %response.header.grep(Content-Type:(\s)*([^\r]*)) %source.ip" -i eth0