Asp.net 阻止除一个应用外的所有应用的IP

Asp.net 阻止除一个应用外的所有应用的IP,asp.net,windows,iis,firewall,Asp.net,Windows,Iis,Firewall,我需要允许美国用户连接到我们的客户网站,其中10个,但允许所有用户访问我们的在线支持票务网站,因为我们有美国以外的技术人员,他们只需要访问这一个网站 我们有一台运行Windows server 2008 R2的专用服务器 我本来打算运行一个脚本,只允许美国IP范围通过Windows防火墙,但后来我记得我们在同一台服务器上有票务站点,因此如果我继续执行该脚本,我也会阻止票务站点 我怎样才能在10个客户站点上只允许美国IP范围,而在票务站点上允许所有人 我们正在使用IIS 7.5 谢谢您可以在Beg

我需要允许美国用户连接到我们的客户网站,其中10个,但允许所有用户访问我们的在线支持票务网站,因为我们有美国以外的技术人员,他们只需要访问这一个网站

我们有一台运行Windows server 2008 R2的专用服务器

我本来打算运行一个脚本,只允许美国IP范围通过Windows防火墙,但后来我记得我们在同一台服务器上有票务站点,因此如果我继续执行该脚本,我也会阻止票务站点

我怎样才能在10个客户站点上只允许美国IP范围,而在票务站点上允许所有人

我们正在使用IIS 7.5


谢谢

您可以在BeginRequest上的Global.asax上进行检查

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;
}

你确定这是正确的方法吗?有时,由于没有自己的过错,人们最终通过正确或错误地映射到非美国位置的IP地址连接到站点。是否确实要阻止此类用户使用您的网站?IP->位置映射是一个粗糙的工具,我建议将其用于默认语言/区域设置,但不用于访问控制