Analisis de Sb0t 5.36

Iniciado por Noporfavor, Febrero 13, 2017, 04:45:54 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 13, 2017, 04:45:54 PM Ultima modificación: Febrero 13, 2017, 04:52:05 PM por Gabriela
Hola,

les quiero dejar un pedazo de codigo llamado Bans.cs:

Código: csharp

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Net;
using iconnect;

namespace commands
{
    class Bans
    {
        private class Item
        {
            public IPAddress IP { get; set; }
            public Guid Guid { get; set; }
            public uint Time { get; set; }
            public BanDuration Duration { get; set; }
            public String Name { get; set; }
        }

        public static void AddBan(IUser client, BanDuration duration)
        {
            if (list.Find(x => x.IP.Equals(client.ExternalIP) || x.Guid.Equals(client.Guid)) == null)
            {
                list.Add(new Item
                {
                    Guid = client.Guid,
                    IP = client.ExternalIP,
                    Time = Server.Time,
                    Duration = duration,
                    Name = client.Name
                });

                Save();
            }
        }

        public static void RemoveBan(String name)
        {
            list.RemoveAll(x => x.Name == name);
            Save();
        }

        private static List<Item> list { get; set; }

        public static void Tick(uint time)
        {
            for (int i = (list.Count - 1); i > -1; i--)
            {
                Item m = list[i];

                if ((time - m.Time) > (uint)m.Duration)
                {
                    list.RemoveAt(i);
                    Server.Print(Template.Text(Category.Timeouts, 2).Replace("+n", m.Name), true);

                    Server.Users.Banned(x =>
                    {
                        if (x.ExternalIP.Equals(m.IP) || x.Guid.Equals(m.Guid))
                            x.Unban();
                    });
                }
            }
        }

        public static void Clear()
        {
            list = new List<Item>();
            Save();
        }

        private static void Save()
        {
            XmlDocument xml = new XmlDocument();
            xml.PreserveWhitespace = true;
            xml.AppendChild(xml.CreateXmlDeclaration("1.0", null, null));
            XmlNode root = xml.AppendChild(xml.CreateElement("bans"));

            foreach (Item i in list)
            {
                XmlNode item = root.OwnerDocument.CreateNode(XmlNodeType.Element, "item", root.BaseURI);
                root.AppendChild(item);
                XmlNode ip = item.OwnerDocument.CreateNode(XmlNodeType.Element, "ip", item.BaseURI);
                item.AppendChild(ip);
                ip.InnerText = i.IP.ToString();
                XmlNode guid = item.OwnerDocument.CreateNode(XmlNodeType.Element, "guid", item.BaseURI);
                item.AppendChild(guid);
                guid.InnerText = i.Guid.ToString();
                XmlNode time = item.OwnerDocument.CreateNode(XmlNodeType.Element, "time", item.BaseURI);
                item.AppendChild(time);
                time.InnerText = i.Time.ToString();
                XmlNode duration = item.OwnerDocument.CreateNode(XmlNodeType.Element, "duration", item.BaseURI);
                item.AppendChild(duration);
                duration.InnerText = ((uint)i.Duration).ToString();               
                XmlNode name = item.OwnerDocument.CreateNode(XmlNodeType.Element, "name", item.BaseURI);
                item.AppendChild(name);
                name.InnerText = i.Name;
            }

            try { xml.Save(Path.Combine(Server.DataPath, "bans.xml")); }
            catch { }
        }

        public static void Load()
        {
            list = new List<Item>();

            try
            {
                XmlDocument xml = new XmlDocument();
                xml.PreserveWhitespace = true;
                xml.Load(Path.Combine(Server.DataPath, "bans.xml"));

                XmlNodeList nodes = xml.GetElementsByTagName("item");

                foreach (XmlElement e in nodes)
                    list.Add(new Item
                    {
                        IP = IPAddress.Parse(e.GetElementsByTagName("ip")[0].InnerText),
                        Guid = new Guid(e.GetElementsByTagName("guid")[0].InnerText),
                        Time = uint.Parse(e.GetElementsByTagName("time")[0].InnerText),
                        Duration = e.GetElementsByTagName("duration")[0].InnerText == "600" ? BanDuration.Ten : BanDuration.Sixty,
                        Name = e.GetElementsByTagName("name")[0].InnerText
                    });
            }
            catch { }
        }
    }

    enum BanDuration : uint
    {
        Ten = 600,
        Sixty = 3600
    }
}


En la linea 34 se puede ver:

public IPAddress IP { get; set; }

Yo creo que se saca la ip y se coloca. Estoy en lo correcto?

Gracias y saludos

No entiendo a que te refieres con se saca y se coloca la ip.

Por lo que entiendo son metodos

para banear gente, y se agregan a una lista que esta en .xml


realmente de donde sale la ip es de aca:

Código: c#
IP = IPAddress.Parse(e.GetElementsByTagName("ip")[0].InnerText),
                        Guid = new Guid(e.GetElementsByTagName("guid")[0].InnerText),
                        Time = uint.Parse(e.GetElementsByTagName("time")[0].InnerText),
                        Duration = e.GetElementsByTagName("duration")[0].InnerText == "600" ? BanDuration.Ten : BanDuration.Sixty,
                        Name = e.GetElementsByTagName("name")[0].InnerText




No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Febrero 14, 2017, 08:02:23 AM #2 Ultima modificación: Febrero 14, 2017, 02:42:37 PM por Noporfavor
Hola rush,

en realidad queria analizar el proceso de ban. Y me tope con public IPAddress IP { get; set; }.

Siguiendo con el analisis queria saber lo siguiente.
Si vamos a core > AresClient.cs > Linea 711 podemos observar lo siguiente:

while (this.data_out.Count > 0)

Pero que representa el data_out?

Se declara en la linea 98 pero no se para que es eso.

Lo sabes tu?

Gracias y saludos

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola rush,

en realidad queria analizar el proceso de ban. Y me tope con public IPAddress IP { get; set; }.


En realidad no se como explicartelo, pero aca mas informacion No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Esos métodos hacen una función como su nombre lo indica de get(obtener) y set(asignar)

Con la cual puedes obtener el valor con get en el metodo ipaddress o asignarle valor, son usados para llevar un mejor control y mejor programación, pero en sí es como si hicieras lo siguiente:

public Setaddressip {
       set{
           this.ip = addressip;
        }
}

public Getaddressip{
       get{
             return this.adressip;
       }
}

Puedes recuperar un valor por medio de ese metodo o definirle un valor por ese metodo.

Código: php
 while (this.data_out.Count > 0)

Pero que representa el data_out?


Supongo que hace un proceso hasta desde 0 hasta el numero de datos leidos,

data_out quiero pensar que contiene información, asi mismo tiene un contador para determinar cuando parar.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta