所以我的问题是我需要创建一个脚本,找到一个模式,其中生存时间和用户代理按顺序发生,我增加一个计数(或者获取我想要的数据等;它可能会从那里。)
例如:
Time to live: 64
Some other data: ________
...
User-Agent: Mozilla/Chrome/IE:Windows/Unix/Mac
所以基本上数据按照TTL然后用户代理的顺序出现,根据该信息我可以获取我想要的数据,但我不知道如何处理识别这种情况的模式。如果它有助于我从Wireshark捕获中获取此数据保存为文本文件。
感谢Shellter,我达到了我的目的:
egrep ' User-Agent:| Time to live:' ../*.txt
查找文件中是否包含(TTL和UA)。
我很感激你的帮助。
Fragment offset: 0
Time to live: 128
Protocol: TCP (6)
Header checksum: 0x7e4d [correct]
[Good: True]
[Bad: False]
Source: 1.1.1.3 (1.1.1.3)
Destination: 1.1.1.4 (1.1.1.4)
//packet 2
Fragment offset: 0
Time to live: 128
Protocol: TCP (6)
Hypertext Transfer Protocol
GET / HTTP/1.1\r\n
[Expert Info (Chat/Sequence): GET / HTTP/1.1\r\n]
[Message: GET / HTTP/1.1\r\n]
[Severity level: Chat]
[Group: Sequence]
Request Method: GET
Request URI: /
Request Version: HTTP/1.1
Host: mail.yahoo.com\r\n
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0\r\n
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n
我为缓慢的回复道歉,我不得不做一些编辑。
所以基本上我只需要确定何时只发生TTL,何时发生TTL以及用户代理数据;基本上我用它来识别网关背后的客户端。
因此,如果TTL是126(窗口)并且我看到125,我们假设它在网关后面并计算++。 如果我们得到相同的计数,但使用不同的用户代理但操作系统相同,则计数不会改变。 如果我们获得相同的计数但使用不同的用户代理和操作系统,则计算++。
所以输出可以简单如下:
1 (ttl)
1 (ttl+os)
2 (ttl+os+ua)
来自上面的例子(不是数据)。
答案 0 :(得分:1)
目前还有点不清楚你要报道的内容,但也许这会有所帮助。
我们将使用awk
,因为该工具旨在解决此类问题(以及其他许多问题)。
虽然我的输出与您的输出完全不符,但我认为代码是自我记录的,您可以使用它,并更接近您的最终需求。您可以使用新代码,新输出更新您的问题,最好是您希望实现的输出的确切示例。
awk '
/Time to live/{ttl++}
/User-Agent/{agent++}
/Windows|Linux|Solaris/{os++}
END{print "ttl="ttl; print "os="os; print"agent="agent}
' ttlTest.txt
<强>输出强>
ttl=2
os=1
agent=1
要理解的关键是awk(以及大多数基于Unix的reg-ex实用程序,包括grep)读取每行输入并决定是否使用当前数据行打印(或执行其他操作)。
awk
通常会打印每一行输入,如果你给它类似
awk '{print $1}' file
在这个例子中,只打印每行数据的第一个字段。
在上面的解决方案中,我们使用正则表达式过滤数据并应用action
,因为我们匹配了一些数据,即
/Time to live/{ ttl++ }
| | | |
| | | > block end
| | > action (in this case, increment value of ttl var
| > block begin
>/ regex to match / #
所以我们还有另外两个'正则表达式',我们正在扫描每一行,每次匹配那个正则表达式时,我们都会增加相关变量。
最后,awk
允许在从文件读取所有数据后执行的END
块。
这就是我们创建摘要报告的方式。 awk
还有BEGIN
个块,在读取任何数据之前执行。
awk扫描的另一个习惯用法允许更复杂的模式匹配,如
awk '{
if ( /Time to live/ && User-Agent/ ) {
ttl_agent++
}
}' ttlTest.txt
第一个和最后一个{ }
块定义字符表示此逻辑将应用于从数据中读取的每一行。此块可能非常复杂,可以使用其他变量值在if
测试中进行评估,如if ( var=5 ) { print "found var=5"}
。
IHTH