本文介紹User-Agent解析函數的文法規則,包括參數解釋、函數樣本等。
函數列表
函數 | 說明 |
解析User-Agent中的裝置資訊。 | |
解析User-Agent中的作業系統資訊。 | |
解析User-Agent中的瀏覽器資訊。 | |
解析User-Agent中所有資訊。 | |
解析URL的組成部分。 | |
解析URL中查詢字串包含的參數。 |
User-Agent解析函數會剔除解析結果為None的欄位,例如解析的裝置資料為{'brand': None, 'family': 'Other', 'model': None}
,則brand欄位和model欄位將被剔除,最終的解析結果為{'family': 'Other'}
。
ua_parse_device
解析User-Agent中的裝置資訊。
函數格式
ua_parse_device(value)
參數說明
參數名稱
資料類型
是否必填
說明
value
String
是
待解析的User-Agent字串。
返回結果
返回JSON類型的資料集。
函數樣本
原始日誌
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36
加工規則
e_set("new_column",ua_parse_device(v("http_user_agent")))
加工結果
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36 new_column:{"family":"Mac","brand":"Apple","model":"Mac"}
ua_parse_os
解析User-Agent中的作業系統資訊。
函數格式
ua_parse_os(value)
參數說明
參數名稱
資料類型
是否必填
說明
value
String
是
待解析的User-Agent字串。
返回結果
返回JSON類型的資料集。
函數樣本
原始日誌
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36
加工規則
e_set("new_column",ua_parse_os(v("http_user_agent")))
加工結果
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36 new_column:{'family': 'Mac OS X', 'major': '10', 'minor': '9', 'patch': '4'}
ua_parse_agent
解析User-Agent中的瀏覽器資訊。
函數格式
ua_parse_agent(value)
參數說明
參數名稱
資料類型
是否必填
說明
value
String
是
待解析的User-Agent字串。
返回結果
返回JSON類型的資料集。
函數樣本
原始日誌
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36
加工規則
e_set("new_column",ua_parse_agent(v("http_user_agent")))
加工結果
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36 new_column:{'family': 'Chrome', 'major': '192', 'minor': '168', 'patch': '0'}
ua_parse_all
提取User-Agent中的所有資訊。
函數格式
ua_parse_all(value)
參數說明
參數名稱
資料類型
是否必填
說明
value
String
是
待解析的User-Agent字串。
返回結果
返回JSON類型的資料集。
函數樣本
原始日誌
http_user_agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36
加工規則
e_set("new_column",ua_parse_all(v("http_user_agent")))
加工結果
http_user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/192.168.0.0 Safari/537.36 new_column: { "user_agent": { "family": "Chrome", "major": "192", "minor": "168", "patch": "0" }, "os": { "family": "Mac OS X", "major": "10", "minor": "9", "patch": "4" }, "device": { "family": "Mac", "brand": "Apple", "model": "Mac" } }
url_parse
解析URL的組成部分。
函數格式
url_parse(url, scheme="", allow_fragments=True)
參數說明
參數名稱
資料類型
是否必填
說明
value
String
是
待解析的URL。
scheme
String
否
網路通訊協定,預設為空白字元。
僅在URL中未指定網路通訊協定時,返回結果中的scheme欄位才會使用此處設定的值。
allow_fragments
Boolean
否
是否解析URL中的fragment部分。
True(預設值):解析URL中的fragment部分,返回結果中的fragment欄位為具體值。
False:不解析URL中的fragment部分,返回結果中的fragment欄位為空白字串。
返回結果
返回解析後的JSON資料,具體參數說明如下表所示。
欄位
說明
scheme
網路通訊協定
netloc
網路位置
path
分層路徑標識
query
查詢組件
fragment
片段標識符
函數樣本
樣本1:使用預設參數,返回URL的各個組成部分。
原始日誌
content:https://username:username@example.com:8083/hello/asdah/;type=docx?filename=python3.docx#urllib
加工規則
e_set("url",url_parse(v("content")))
加工結果
content:https://username:username@example.com:8083/hello/asdah/;type=docx?filename=python3.docx#urllib url:{ "scheme": "https", "netloc": "username:username@example.com:8083", "path": "/hello/asdah/;type=docx", "query": "filename=python3.docx", "fragment": "urllib" }
樣本2:設定allow_fragments為False,返回結果中的fragment參數值為空白。
原始日誌
content:https://username:username@example.com:8083/hello/asdah/;type=docx?filename=python3.docx#urllib
加工規則
e_set("url",url_parse(v("content"),allow_fragments=False))
加工結果
content:https://username:username@example.com:8083/hello/asdah/;type=docx?filename=python3.docx#urllib url:{ "scheme": "https", "netloc": "username:username@example.com:8083", "path": "/hello/asdah/;type=docx", "query": "filename=python3.docx", "fragment": "" }
樣本3:設定scheme為https,allow_fragments為False,返回結果中scheme參數值為https,fragment參數值為空白。
原始日誌
content://username:username@example.com:8083/hello/asdah/;type=docx?filename=python3.docx#urllib
加工規則
e_set("url",url_parse(v("content"),scheme="https", allow_fragments=False))
加工結果
content://username:username@example.com:8083/hello/asdah/;type=docx?filename=python3.docx#urllib url:{ "scheme": "https", "netloc": "username:username@example.com:8083", "path": "/hello/asdah/;type=docx", "query": "filename=python3.docx", "fragment": "" }
url_parse_qs
解析URL中查詢字串的組成部分。
函數格式
url_parse_qs( url_qs, keep_blank_values=False, strict_parsing=False, encoding="utf-8", errors="replace", ignore_multi_fields=True, )
參數說明
參數名稱
資料類型
是否必填
說明
url_qs
String
是
待解析的URL查詢字串。
keep_blank_values
Boolean
否
是否傳回值為空白的參數。
False(預設值):不返回。
True:返回,且將空值處理為空白字串。
strict_parsing
Boolean
否
是否處理解析錯誤。
True:解析報錯會引發ValueError異常。
False(預設值):忽略錯誤。
encoding
String
否
指定編碼方式,將含有百分比符號(%)的逸出字元解析為Unicode字元,預設為utf-8。支援ASCII。
errors
String
否
按照編碼方式無法識別字元時的處理方案。取值包括:
ignore:直接忽略。
strict:直接報錯,丟棄此條日誌資料。
replace(預設值):使用半形問號(?)替換無法識別部分。
xmlcharrefreplace:使用對應XML字元替換無法識別部分。
ignore_multi_fields
Num
否
指定單個返回參數的值的個數。
True(預設值):每個參數只返回第一個值, 類型為String。
False:每個參數都返回所有值,類型為List。
返回結果
返回解析後的JSON資料,具體參數如下表所示。
參數
說明
logType
日誌類型
uid
日誌的唯一標識
time
日誌的時間
msg
日誌中的資訊
函數樣本
樣本1:設定keep_blank_values為True,返回結果中包含值為空白的參數。
原始日誌
content:logType=net_wheel_log&uid=62452****&vid=6.1.0_gf_pc&asb=1206427&git=&time=22-11-3+%e4%b8%8a11%e6%97%b649%e5%88%8633%e7%a7%92&operatingSystem=Windows+10++(10.0.0)+64bit&deviceModel=System+Product+Name+(System+manufacturer)&graphicsDeviceName=NVIDIA+GeForce+GTX+1650&graphicsDeviceType=Direct3D11&graphicsDeviceVendor=NVIDIA&graphicsDeviceVersion=Direct3D+11.0+%5blevel+11.1%5d&graphicsMemorySize=3962&systemMemorySize=8127&processorCount=6&processorFrequency=3000&processorType=Intel(R)+Core(TM)+i5-9500F+CPU+%40+3.00GHz&deviceID=96da5902a042a5f84118995f88373f73650e76be166589726****&guessUID=62452****&networkReachability=wifi&msg=GetAuthkeyRsp
加工規則
e_set("url",url_parse_qs(v("content"), keep_blank_values=True))
加工結果
content:logType=net_wheel_log&uid=62452****&vid=6.1.0_gf_pc&asb=1206427&git=&time=22-11-3+%e4%b8%8a11%e6%97%b649%e5%88%8633%e7%a7%92&operatingSystem=Windows+10++(10.0.0)+64bit&deviceModel=System+Product+Name+(System+manufacturer)&graphicsDeviceName=NVIDIA+GeForce+GTX+1650&graphicsDeviceType=Direct3D11&graphicsDeviceVendor=NVIDIA&graphicsDeviceVersion=Direct3D+11.0+%5blevel+11.1%5d&graphicsMemorySize=3962&systemMemorySize=8127&processorCount=6&processorFrequency=3000&processorType=Intel(R)+Core(TM)+i5-9500F+CPU+%40+3.00GHz&deviceID=96da5902a042a5f84118995f88373f73650e76be166589726****&guessUID=62452****&networkReachability=wifi&msg=GetAuthkeyRsp url:{ "logType": "net_wheel_log", "uid": "62452****", "vid": "6.1.0_gf_pc", "asb": "1206427", "git": "", "time": "22-11-3 上11時49分33秒", "operatingSystem": "Windows 10 (10.0.0) 64bit", "deviceModel": "System Product Name (System manufacturer)", "graphicsDeviceName": "NVIDIA GeForce GTX 1650", "graphicsDeviceType": "Direct3D11", "graphicsDeviceVendor": "NVIDIA", "graphicsDeviceVersion": "Direct3D 11.0 [level 11.1]", "graphicsMemorySize": "3962", "systemMemorySize": "8127", "processorCount": "6", "processorFrequency": "3000", "processorType": "Intel(R) Core(TM) i5-9500F CPU @ 3.00GHz", "deviceID": "96da5902a042a5f84118995f88373f73650e76be166589726****", "guessUID": "62452****", "networkReachability": "wifi", "msg": "GetAuthkeyRsp" }
樣本2:設定keep_blank_values為預設值(False),返回結果無值為空白的參數。
原始日誌
content:logType=net_wheel_log&uid=62452****&vid=6.1.0_gf_pc&asb=1206427&git=&time=22-11-3+%e4%b8%8a11%e6%97%b649%e5%88%8633%e7%a7%92&operatingSystem=Windows+10++(10.0.0)+64bit&deviceModel=System+Product+Name+(System+manufacturer)&graphicsDeviceName=NVIDIA+GeForce+GTX+1650&graphicsDeviceType=Direct3D11&graphicsDeviceVendor=NVIDIA&graphicsDeviceVersion=Direct3D+11.0+%5blevel+11.1%5d&graphicsMemorySize=3962&systemMemorySize=8127&processorCount=6&processorFrequency=3000&processorType=Intel(R)+Core(TM)+i5-9500F+CPU+%40+3.00GHz&deviceID=96da5902a042a5f84118995f88373f73650e76be166589726****&guessUID=62452****&networkReachability=wifi&msg=GetAuthkeyRsp
加工規則
e_set("url",url_parse_qs(v("content")))
加工結果
content:logType=net_wheel_log&uid=62452****&vid=6.1.0_gf_pc&asb=1206427&git=&time=22-11-3+%e4%b8%8a11%e6%97%b649%e5%88%8633%e7%a7%92&operatingSystem=Windows+10++(10.0.0)+64bit&deviceModel=System+Product+Name+(System+manufacturer)&graphicsDeviceName=NVIDIA+GeForce+GTX+1650&graphicsDeviceType=Direct3D11&graphicsDeviceVendor=NVIDIA&graphicsDeviceVersion=Direct3D+11.0+%5blevel+11.1%5d&graphicsMemorySize=3962&systemMemorySize=8127&processorCount=6&processorFrequency=3000&processorType=Intel(R)+Core(TM)+i5-9500F+CPU+%40+3.00GHz&deviceID=96da5902a042a5f84118995f88373f73650e76be166589726****&guessUID=62452****&networkReachability=wifi&msg=GetAuthkeyRsp url:{ "logType": "net_wheel_log", "uid": "62452****", "vid": "6.1.0_gf_pc", "asb": "1206427", "time": "22-11-3 上11時49分33秒", "operatingSystem": "Windows 10 (10.0.0) 64bit", "deviceModel": "System Product Name (System manufacturer)", "graphicsDeviceName": "NVIDIA GeForce GTX 1650", "graphicsDeviceType": "Direct3D11", "graphicsDeviceVendor": "NVIDIA", "graphicsDeviceVersion": "Direct3D 11.0 [level 11.1]", "graphicsMemorySize": "3962", "systemMemorySize": "8127", "processorCount": "6", "processorFrequency": "3000", "processorType": "Intel(R) Core(TM) i5-9500F CPU @ 3.00GHz", "deviceID": "96da5902a042a5f84118995f88373f73650e76be166589726****", "guessUID": "62452****", "networkReachability": "wifi", "msg": "GetAuthkeyRsp" }
樣本3:設定ignore_multi_fields為預設值(True),每個參數只返回第一個值。
原始日誌
content:logType=net_log&uid=62452****&x=1&x=2&x=3&asb=123&asb=456
加工規則
e_set("url",url_parse_qs(v("content")))
加工結果
content:logType=net_log&uid=62452****&x=1&x=2&x=3&asb=123&asb=456 url:{ "logType": "net_log", "uid": "62452****", "x": "1", "asb": "123" }
樣本4:設定ignore_multi_fields為False,每個參數返回所有值。
原始日誌
content:logType=net_log&uid=62452****&x=1&x=2&x=3&asb=123&asb=456
加工規則
e_set("url",url_parse_qs(v("content"),ignore_multi_fields=False))
加工結果
content:logType=net_log&uid=62452****&x=1&x=2&x=3&asb=123&asb=456 url:{ "logType": ["net_log"], "uid": ["62452****"], "x": ["1", "2", "3"], "asb": ["123", "456"] }