2011-03-23 178 views
0

可能重複禁止用戶:
Max length for client ip address通過IP地址

我需要一種方法,如果有必要阻止他們的IP用戶。什麼是最好的方法來解決這個問題?我可以使用Request.ServerVariables [「REMOTE_ADDR」]並將IP地址作爲字符串存儲在數據庫中嗎?什麼長度適合varchar?

感謝

+1

取決於。你支持IPv6嗎? – 2011-03-23 20:28:24

+0

我其實不太確定,我與discountasp – Prabhu 2011-03-23 20:29:12

+0

你應該知道現在很多人都在路由器後面,所以阻止一個IP會阻止路由器AFAIK後面的每個人。 – 2011-03-23 20:33:59

回答

0

你既可以儲存IP爲長度爲16的VARCHAR或者你可以存儲一個整數b1 + b2 * 255 + b3 * 255^2 + b4 * 255^3其中B1到B4來自知識產權領域,爲b1.b2.b3.b4你可以使用其他的校驗和,但沒有一點的儲存長IP作爲字符串。

+3

這不適合IPv6。 – 2011-03-23 20:37:36

+0

對,我的不好,但是一些校驗和會比整個ip更好,這將有恆定的長度。 – Sebi 2011-03-23 20:40:28

1

我們在其中一個應用程序中做了同樣的事情,我們採取的方法是創建一個自定義的HttpHandler,這個HttpHandler連接到Application_BeginRequest事件。

在處理程序中,我們通過執行HttpContext.Current.Request.UserHostAddress來獲取請求的IP地址,然後對我們的阻止的IP地址列表執行檢查。被阻止的IP都存儲在數據庫中,但我們也在服務器的內存中保存一個緩存副本,以避免每次請求都訪問數據庫。

有關於創建自定義HTTP模塊Walkthrough: Creating and Registering a Custom HTTP Module

對於什麼是值得我們存儲的IP的作爲DB串上MSDN一個很好的文章,但沒有對最佳格式一些好的信息在使用帖子已添加。