用户代理字符串:我应该捕获什么?

时间:2013-02-28 16:18:47

标签: browser user-agent

我有一个项目,我正在解析Tomcat日志以获取有用的信息。起初,该程序非常简单,只需一个grep即可轻松完成。但是,一旦意识到这些信息可能有用,我就被要求做更多更复杂的解析。

我希望将日志条目的通用信息存储在数据库中,然后执行各种查询以获取自定义报告。大部分信息都非常简单,易于解析。

  • 有IP地址和代理地址。例如,我现在有一个由我们雇用的公司测试我们的应用安全性的10,000个IP地址列表。因此,我们希望忽略任何报告中这些IP地址的条目。
  • 有会话ID:我需要一个报告,用户在页面“B”之前进入页面“A”,但不是在浏览页面“C”之后。会话ID允许我跟踪此行为。
  • 有时间和日期。
  • 有HTTP响应代码。
  • 这是GET还是POST动作。
  • 有网页本身(以及通过GET传递的可能值)。

最后,还有User Agent Mess ...我的意思是用户代理字符串。

用户代理字符串似乎布局相当松散。例如,其中99%以Mozilla/4.0开头,尽管其中大部分来自浏览器与Mozilla,Netscape或Firefox无关,甚至不使用Gecko布局引擎。

不幸的是,用户代理字符串在我们的报告中变得非常重要。例如,我们需要知道有多少人使用Safari或使用任何移动浏览器,或者使用基于Linux的系统而不是Windows与iOS。

最大的问题是我不知道未来会有什么要求,所以我不能100%确定哪些信息有用且哪些无用(看起来99.7%的用户使用的是Mozilla 4.0浏览器! )。

那么,您将如何解析用户代理字符串并提取我可以生成报告的有用的信息?

1 个答案:

答案 0 :(得分:0)

我将启动另一个表:UserAgentString,(id,UAS,num_uses,mobile,);

解析日志时,为表中的每个日志条目存储UserAgentString.id而不是原始用户代理字符串,并将新字符串添加到UserAgentString表中。

每次找到重复项时,都会增加num_uses列。如果(当)知道它代表移动设备,请设置移动列。添加其他列并将其设置为代表uas的其他属性,因为您发现它们很有用。