User Agent中文名為使用者代理,簡稱 UA,它是一個特殊字元串頭,使得伺服器能夠識别客戶使用的作業系統及版本、CPU 類型、浏覽器及版本、浏覽器渲染引擎、浏覽器語言、浏覽器插件等。
百度百科
在 ASP.NET Core 中,可以通過以下代碼在 Action 中擷取到一個 HTTP 請求的 User Agent 資訊:
if (Request.Headers.TryGetValue("User-Agent", out var userAgent))
{
await Response.WriteAsync("User Agent:" + userAgent);
}
一個常見的 UA 字元串可以是下面這個樣子:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
UAParser
可以通過一個名為 UAParser 的元件對 User Agent 進行解析:
var parser = Parser.GetDefault();
var info = parser.Parse("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36");
info.Device.Dump("裝置資訊");
info.OS.Dump("作業系統資訊");
info.UA.Dump("使用者代理資訊");
注意:Dump 擴充方法來自 LINQPad ,可以在碼農很忙搜尋 LINQPad 了解更多資訊。
輸出資訊如下:

其中,
UAParser.Device
類型的
IsSpider
屬性表示這個 User Agent 是否代表一個網絡爬蟲。以 Google 搜尋引擎為例,它的 User Agent 是這樣的:
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
這将會産生如下輸出:
可以看到,UAParser告訴我們,這是一個來自于蜘蛛的 User Agent。
rDNS
即便我們使用 UAParser 根據 User Agent 做出了爬蟲的判定,但因為 User Agent 的僞造成本極低,我們仍需要一個更嚴格的規則來确定該請求是否真的來自一個搜尋引擎蜘蛛,在一些防爬取場景下更是如此。
可逆DNS(rDNS,reverse DNS)是一種把一個IP位址分解成一個域名的方法,正像域名系統(DNS)把域名分解成關聯的IP位址。
大型的搜尋引擎提供商,比如谷歌、百度以及微軟均會有固定的 IP 位址作為爬蟲的 IP ,并且會将這些 IP 做 rDNS 解析。可以通過查詢某個 IP 的 rDNS 解析記錄,來判斷這個 IP 到底是不是真的來自谷歌或者百度。
以谷歌爬蟲的某個 IP:66.249.79.250 為例,在 Windows 系統上,可以使用 nslookup 指令查詢該 IP 的 rDNS 記錄:
但如果是一個僞造的搜尋引擎蜘蛛,則該 IP 不存在 rDNS 記錄或者記錄并不來自對應的搜尋引擎:
可以使用系統内置的 Dns 類來擷取一個 IP 的 rDNS 解析記錄:
Dns.GetHostEntry("66.249.79.250").Dump();
GetHostEntry
方法也提供異步的版本:
GetHostAddressesAsync
。如果在正式程式中使用該代碼,請做好異常處理。
總結
本文講述了如何在 ASP.NET Core 項目中擷取使用者的 User Agent 資訊,并通過 UAParser 元件對擷取到的 User Agent 進行解析。以及如何通過來訪 IP 判斷一個請求是否真的來自一個搜尋引擎爬蟲。文章來源:https://www.coderbusy.com/archives/732.html
歡迎來到:碼農很忙 。