zoukankan      html  css  js  c++  java
  • 动态封杀与解封IP

    不论IIS6还是IIS7 都可以把需要封杀的IP加入封杀列表。但是需要注意的是我们代码写的是全部替换原先的数据。但是在IIS7下,执行的效果是原先的不替换,新加一批封杀 IP。当然IIS7下,如果新加的IP原来就有了,则会报如下异常:

    System.Runtime.InteropServices.COMException was caught 
      Message="当文件已存在时,无法创建该文件。 (异常来自 HRESULT:0x800700B7)" 
      Source="System.DirectoryServices" 
      ErrorCode=-2147024713 
      StackTrace: 
           在 System.DirectoryServices.DirectoryEntry.CommitChanges() 
           在 IIS_Security_ConsoleApplication.Program.IPDeny() 位置 D:MyCodesIIS_Security_ConsoleApplication IIS_Security_ConsoleApplicationProgram.cs:行号 109 
      InnerException:

    这就是说,IIS7, 我们可以通过编程接口增加封杀IP名单,但是没发通过编程接口剔出封杀IP。

    如果谁知道怎么在iis7下面提出限制ip的请M我 571111539@qq.com,下面代码不是很完整,自行修改

           [STAThread]
            static void Main(string[] args)
            {
                string webName = "xiangpi";//网站名
                string flag = "-a";
                string denyflag = "-d";//-d黑名单 else白名单
                string ipString = "192.168.0.89";//要限制的ip
                string[] ipstringlist = ipString.Split(',');
    
    
                int objID = GetObjID(webName);
                if (objID <= 0)
                    return;
    
                string objName = "IIS://localhost/W3SVC/" + objID+"/ROOT";
                Console.WriteLine(objName);
                try
                {
                    DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");
                    foreach (DirectoryEntry dir in root.Children)
                    {
                       
                        if (dir.SchemaClassName == "IIsWebServer")
                        {
                            string ww = dir.Properties["ServerComment"].Value.ToString();
                           
                            Console.WriteLine(string.Format(dir.Path+"/ROOT/{1}", dir.Name, ww));
                        }
                    }
                    Console.ReadLine();
                    DirectoryEntry IIS = new DirectoryEntry(objName);
                    Type typ = IIS.Properties["IPSecurity"][0].GetType();
                    object IPSecurity = IIS.Properties["IPSecurity"][0];
                    Array origIPDenyList = null;
                    if (denyflag.Equals("-d"))//
                    {
                        //retrieve the IPDeny list from the IPSecurity object
                        origIPDenyList = (Array)typ.InvokeMember("IPDeny",
                                   BindingFlags.DeclaredOnly |
                                   BindingFlags.Public | BindingFlags.NonPublic |
                                   BindingFlags.Instance | BindingFlags.GetProperty,
                                   null, IPSecurity, null);
    
                        // display what was being denied
                        List<string> iplist = new List<string>();
    
                        foreach (string s in origIPDenyList)
                        {
                            //iplist.Add(s);
                            Console.WriteLine("已有拒绝条目: " + s);
                        }
                        // check GrantByDefault.  This has to be set to true, 
                        // or what we are doing will not work.
    
    
                        if (flag.Equals("-a"))
                        {
                            foreach (string s in ipstringlist)
                            {
                                string ipstring = s + ", 255.255.255.255";
                                if (!iplist.Contains(ipstring))
                                    iplist.Add(ipstring);
                            }
                        }
                        else if (flag.Equals("-g"))
                        {
                            foreach (string ip in iplist)
                            {
                                Console.WriteLine(ip);
                            }
                           
                        }
                        else
                        {
                            foreach (string s in ipstringlist)
                            {
                                string ipstring = s + ", 255.255.255.255";
                                if (iplist.Contains(ipstring))
                                    iplist.Remove(ipstring);
                            }
    
                        }
    
                        bool bGrantByDefault = (bool)typ.InvokeMember("GrantByDefault",
                                    BindingFlags.DeclaredOnly |
                                    BindingFlags.Public | BindingFlags.NonPublic |
                                    BindingFlags.Instance | BindingFlags.GetProperty,
                                    null, IPSecurity, null);
    
                        // Console.WriteLine("GrantByDefault = " + bGrantByDefault);
                        if (!bGrantByDefault)
                        {
                            typ.InvokeMember("GrantByDefault",
                                   BindingFlags.DeclaredOnly |
                                   BindingFlags.Public | BindingFlags.NonPublic |
                                   BindingFlags.Instance | BindingFlags.SetProperty,
                                   null, IPSecurity, new object[] { true });
                        }
    
                        object[] newIPDenyList = new object[iplist.Count];
                        int i = 0;
                        foreach (string s in iplist)
                        {
                            newIPDenyList[i] = s;
                            i++;
                        }
    
                        typ.InvokeMember("IPDeny",
                                 BindingFlags.DeclaredOnly |
                                 BindingFlags.Public | BindingFlags.NonPublic |
                                 BindingFlags.Instance | BindingFlags.SetProperty,
                                 null, IPSecurity, new object[] { ipString });
    
                        IIS.Properties["IPSecurity"][0] = IPSecurity;
                        //  Console.WriteLine("Commiting the changes.");
    
                        // commit the changes
                        IIS.CommitChanges();
                        IIS.RefreshCache();
    
                        // check to see if the update took
                        Console.WriteLine("Checking to see if the update took.");
                        IPSecurity = IIS.Properties["IPSecurity"][0];
                        Array y = (Array)typ.InvokeMember("IPDeny",
                                  BindingFlags.DeclaredOnly |
                                  BindingFlags.Public | BindingFlags.NonPublic |
                                  BindingFlags.Instance | BindingFlags.GetProperty,
                                  null, IPSecurity, null);
                        // foreach (string s in y)
                        //   / Console.WriteLine("After:  " + s);
                    }
                    else
                    {
                        origIPDenyList = (Array)typ.InvokeMember("IPGrant",
                                   BindingFlags.DeclaredOnly |
                                   BindingFlags.Public | BindingFlags.NonPublic |
                                   BindingFlags.Instance | BindingFlags.GetProperty,
                                   null, IPSecurity, null);
    
                        // display what was being denied
                        List<string> iplist = new List<string>();
    
                        foreach (string s in origIPDenyList)
                        {
                            iplist.Add(s);
                            //Console.WriteLine("Before: " + s);
                        }
                        // check GrantByDefault.  This has to be set to true, 
                        // or what we are doing will not work.
    
    
                        if (flag.Equals("-a"))
                        {
                            foreach (string s in ipstringlist)
                            {
                                string ipstring = s + ", 255.255.255.255";
                                if (!iplist.Contains(ipstring))
                                    iplist.Add(ipstring);
                            }
                        }
                        else if (flag.Equals("-g"))
                        {
                            foreach (string ip in iplist)
                            {
                                Console.WriteLine(ip);
                            }
                          
                        }
                        else
                        {
                            foreach (string s in ipstringlist)
                            {
                                string ipstring = s + ", 255.255.255.255";
                                if (iplist.Contains(ipstring))
                                    iplist.Remove(ipstring);
                            }
    
                        }
    
                        bool bGrantByDefault = (bool)typ.InvokeMember("GrantByDefault",
                                    BindingFlags.DeclaredOnly |
                                    BindingFlags.Public | BindingFlags.NonPublic |
                                    BindingFlags.Instance | BindingFlags.GetProperty,
                                    null, IPSecurity, null);
    
                        // Console.WriteLine("GrantByDefault = " + bGrantByDefault);
                        if (bGrantByDefault)
                        {
                            typ.InvokeMember("GrantByDefault",
                                   BindingFlags.DeclaredOnly |
                                   BindingFlags.Public | BindingFlags.NonPublic |
                                   BindingFlags.Instance | BindingFlags.SetProperty,
                                   null, IPSecurity, new object[] { false });
                        }
    
                        object[] newIPDenyList = new object[iplist.Count];
                        int i = 0;
                        foreach (string s in iplist)
                        {
                            newIPDenyList[i] = s;
                            i++;
                        }
    
                        typ.InvokeMember("IPGrant",
                                 BindingFlags.DeclaredOnly |
                                 BindingFlags.Public | BindingFlags.NonPublic |
                                 BindingFlags.Instance | BindingFlags.SetProperty,
                                 null, IPSecurity, new object[] { newIPDenyList });
    
                        IIS.Properties["IPSecurity"][0] = IPSecurity;
                        //  Console.WriteLine("Commiting the changes.");
    
                        // commit the changes
                        IIS.CommitChanges();
                        IIS.RefreshCache();
    
                        // check to see if the update took
                        Console.WriteLine("Checking to see if the update took.");
                        IPSecurity = IIS.Properties["IPSecurity"][0];
                        Array y = (Array)typ.InvokeMember("IPGrant",
                                  BindingFlags.DeclaredOnly |
                                  BindingFlags.Public | BindingFlags.NonPublic |
                                  BindingFlags.Instance | BindingFlags.GetProperty,
                                  null, IPSecurity, null);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.ToString());
                }
    
                Console.ReadLine();
            }
            static int GetObjID(string strWebSite)
            {
                string objName = strWebSite;// args[0];
                //Console.WriteLine(objName);
                Regex regex = new Regex(objName);
    
                string tmpStr;
    
                //  string entPath = "IIS://LocalHost/W3SVC/";// String.Format("IIS://{0}/w3svc", objName);
                //
                DirectoryEntry ent = new DirectoryEntry("IIS://Localhost/W3SVC");
    
                foreach (DirectoryEntry child in ent.Children)
                {
                    //Console.WriteLine(child.Name);
    
                    if (child.SchemaClassName == "IIsWebServer")
                    {
    
                        if (child.Properties["ServerBindings"].Value != null)
                        {
    
                            tmpStr = child.Properties["ServerBindings"].Value.ToString();
    
                            if (regex.Match(tmpStr).Success)
                            {
                                Console.WriteLine(child.Name);
                                return int.Parse(child.Name);
                                //return child.Name;
    
                            }
    
                        }
    
                        if (child.Properties["ServerComment"].Value != null)
                        {
    
                            tmpStr = child.Properties["ServerComment"].Value.ToString();
    
                            if (regex.Match(tmpStr).Success)
                            {
                                //onsole.WriteLine(child.Properties["path"].Value);
                                // Console.WriteLine(child.Name);
                                return int.Parse(child.Name);
                            }
                        }
                    }
                }
                return -1;
            }
  • 相关阅读:
    js休眠
    CentOS6.3安装Mysql-5.5.29
    轻量级应用开发之(11)手势
    Git Pull 避免用户名和密码方法
    Ubuntu学习总结-03 安装软件 & 技巧
    Ubuntu学习总结-06 安装 Nginx
    轻量级应用开发之(09)创建控制器
    轻量级应用开发之(10) UINavigationController导航控制器
    轻量级应用开发之(08)程序启动原理
    Ubuntu学习总结-01 安装Ubuntu
  • 原文地址:https://www.cnblogs.com/daxiongblog/p/5447227.html
Copyright © 2011-2022 走看看