2014-05-19 33 views
1

我需要允許美國用戶連接到我們的客戶網站(其中10個),但允許所有人訪問我們的在線支持票務網站,因爲我們有美國以外的技術人員需要訪問只有這一個網站。阻止IP到所有應用程序但一個

我們有一臺運行Windows Server 2008 R2的專用服務器。

我打算運行一個腳本,通過Windows防火牆只允許美國的IP範圍,但後來我記得我們在同一臺服務器上有票務網站,所以如果我繼續處理腳本,我會阻止票務網站也是如此。

我該如何仍然只允許在10個客戶網站上使用美國的IP範圍,但允許票務網站上的每個人?

我們使用IIS 7.5。

感謝

+2

您確定這是正確的方法嗎?有時候,通過自己的過錯,人們最終通過IP地址(正確或不正確地)「映射」到非美國地區連接到站點。您確定要阻止此類用戶使用您的網站嗎? IP->位置映射是一種*粗俗的工具,我推薦他們用於例如*默認*語言/地區設置,但不適用於訪問控制 –

回答

0

可以放置在Global.asax上的BeginRequest檢查。

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    // here check if is allowed 
    if(!IsOnPermitedNetwork(MyCurrentContent.Request.ServerVariables["REMOTE_ADDR"]) 
    { 
     HttpContext.Current.Response.TrySkipIisCustomErrors = true; 
     HttpContext.Current.Response.StatusCode = 403; 
     HttpContext.Current.Response.End(); 
     return ;  
    } 
} 

以及您需要進行檢查的一些實用程序功能。

public bool IsOnPermitedNetwork(string sMyIpString) 
{ 
    long TheIpTranslate = AddressToNum(sMyIpString); 

    if (TheIpTranslate >= 0) 
    { 
     // exampple 
     // 192.168.0.0 192.168.255.255 
     if (TheIpTranslate >= 3232235520 && TheIpTranslate <= 3232301055) 
      return true; 
    } 

    return false; 
} 

public long AddressToNum(string cAddress) 
{ 
    IPAddress MyIpToCheck = null; 

    if (IPAddress.TryParse(cAddress, out MyIpToCheck)) 
    { 
     return AddressToNum(MyIpToCheck); 
    } 
    else 
    { 
     return -1; 
    } 
} 


public long AddressToNum(IPAddress Address) 
{ 
    byte[] b = BitConverter.GetBytes(Address.Address); 

    if (b.Length == 8) 
     return (long)(((long)16777216 * b[0]) + ((long)(65536 * b[1])) + ((long)(256 * b[2])) + b[3]); 
    else 
     return 0; 
} 
相關問題