用于从 citrix 日志中捕获用户代理的正则表达式

Regex to capture the useragent from the citrix logs

需要帮助从 citrix 日志中捕获用户代理详细信息。 citrix 的日志格式对于成功和拒绝是完全不同的。示例如下

对于成功的身份验证,用户代理详细信息包含在“”内。详情在关键字Browser_type“”

之后

对于拒绝流量,“”中不存在用户代理详细信息。它出现在关键字 Browser

之后

拒绝

Dec 8 05:20:53 netscaler02 12/08/2017:05:20:53 netscaler02 0-PPE-0 : AAA LOGIN_FAILED -adasd92 0 : User renju - Client_ip X.X.X.X - Failure_reason "External authentication server denied access" - Browser Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36

成功

Dec 8 05:54:06 netscaler02 12/08/2017:11:54:06 GMT netscaler02 0-PPE-0 : SSLVPN LOGIN -78342434122 0 : Context renjus@1X.X.X.X - SessionId: xxx- User renju - Client_ip X.X.X.X - Nat_ip "Mapped Ip" - Vserver X.X.X.X:443 - Browser_type "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" - SSLVPN_asdasdat_type ICA - Group(s) "N/A"

我确实有一个正则表达式来捕获“”中的浏览器代理

(?P(?<=Browser_type\s\").?(?=\s(?:\w+=|\")))"

Bud 需要一个从所有格式中捕获用户代理的正则表达式。

提前致谢。

也许你可以这样匹配你的日志:

Browser(?:_type)?\s"?(.+|[^"]+)

  • 将浏览器与可选的_type匹配Browser(?:_type)
  • 后跟一个可选的双引号 "?
  • 后跟一个空格 \s
  • 然后在一组中捕获任意字符零次或多次( .*
  • |
  • 全部直到遇到双引号[^"]+
  • 关群)

编辑:

要在命名捕获组中捕获 "Browser" 而不使用可选的“_type”:

(?P<citrix_useragent>Browser)(?:_type)?\s"?(.+|[^"]+)

The fourth bird 那里得到了最初的推动,并做了一些工作。

Browser((?:_type)?\s\"*)(?P(.+\"-|[^\"]+))