首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止除一个应用程序以外的所有应用程序的IP

阻止除一个应用程序以外的所有应用程序的IP
EN

Stack Overflow用户
提问于 2014-05-20 00:36:54
回答 1查看 25关注 0票数 1

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

我们有一台运行Windows Server2008 R2的专用服务器。

我本来打算运行一个脚本,只允许美国的IP范围通过Windows防火墙,但后来我想起来了,我们的票务站点在同一台服务器上,所以如果我继续执行脚本,我也会阻止票务站点。

我怎么能仍然只允许10个客户站点上的美国IP范围,而允许所有人都在票务站点上?

我们使用的是IIS 7.5。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-05-20 01:53:57

您可以在BeginRequest上的Global.asax上打勾。

代码语言:javascript
复制
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 ;    
    }
}

以及进行检查所需的一些实用程序函数。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23742926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档