예제 #1
0
        public static Boolean Parse(out RegisterDump Register, Byte[] registerZipArchive)
        {
            Boolean ret = true;

            Register = new RegisterDump();
            String dumpfile = @"dump.xml";

            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(dumpfile);
                Register.UpdateTime = xmlDoc.GetElementsByTagName("reg:register")[0].Attributes.GetNamedItem("updateTime").InnerText;
                XmlNodeList content = xmlDoc.GetElementsByTagName("content");
                for (int i = 0; i < content.Count; i++)
                {
                    ItemRegisterDump item = new ItemRegisterDump();
                    item.id          = content[i].Attributes.GetNamedItem("id").InnerText;
                    item.includeTime = content[i].Attributes.GetNamedItem("includeTime").InnerText;
                    foreach (XmlNode node in content[i].ChildNodes)
                    {
                        switch (node.Name)
                        {
                        case "decision":
                            item.date   = node.Attributes.GetNamedItem("date").InnerText;
                            item.number = node.Attributes.GetNamedItem("number").InnerText;
                            item.org    = node.Attributes.GetNamedItem("org").InnerText;
                            break;

                        case "url":
                            item.url.Add(node.InnerText);
                            break;

                        case "domain":
                            item.domain.Add(node.InnerText);
                            break;

                        case "ip":
                            item.ip.Add(node.InnerText);
                            break;
                        }
                    }
                    Register.Items.Add(item);
                }
            }
            catch (Exception)
            {
                ret = false;
            }
            return(ret);
        }
예제 #2
0
        public static Boolean AddFilterL7(RegisterDump dump)
        {
            Boolean ret = true;

            try
            {
                string MyFileName = @"rules.txt";
                string s;
                File.Delete(MyFileName);

                FileStream   fs = new FileStream(MyFileName, FileMode.OpenOrCreate);
                StreamWriter sw = new StreamWriter(fs);
                s = @"/system script add name=cleaner source=""/ip firewall layer7-protocol remove [find comment=register]\n/ip firewall filter remove [find comment=register]""";
                sw.WriteLine(s);
                s = @"/system script run number=cleaner";
                sw.WriteLine(s);

                /* Cleaner
                 * /ip firewall layer7-protocol remove [find comment=register]
                 * /ip firewall filter remove [find comment=register]
                 */

                foreach (ItemRegisterDump item in dump.Items)
                {
                    for (Int32 i = 0; i < item.domain.Count; i++)
                    {
                        s = @"/ip firewall layer7-protocol add comment=register name=" + item.id + "_" + i + @" regexp=""^.+(" + item.domain[i] + @").*\$""";
                        sw.WriteLine(s);
                        s = @"/ip firewall filter add comment=register action=drop chain=forward disabled=no dst-port=80 layer7-protocol=" + item.id + "_" + i + " protocol=tcp src-address= out-interface=ether1-gateway";
                        sw.WriteLine(s);
                    }
                }
                sw.Close();
                fs.Close();
            }
            catch (Exception)
            {
                ret = false;
            }

            return(ret);
        }