Beispiel #1
0
        public static byte[] GetByteArrayFromPacket(Packets.Packet p)
        {
            if (p.Subpackets == null || p.Subpackets.Count == 0)
            {
                return(null);
            }
            byte[] bytes  = new byte[0];
            byte[] header = ByteUtils.ConvertStructToByteArray(p.Header);

            foreach (Subpacket sp in p.Subpackets)
            {
                byte[] subheader = ByteUtils.ConvertStructToByteArray(sp.SubpacketHeader);
                Array.Copy(subheader, 0, bytes, bytes.Length, 0);
                if (sp.PacketData.GetType().Equals(typeof(List <Object>)))
                {
                    foreach (Object d in (List <Object>)sp.PacketData)
                    {
                        byte[] subbody = ByteUtils.ConvertStructToByteArray(d);
                        Array.Copy(subbody, 0, bytes, bytes.Length, 0);
                    }
                }
                else
                {
                    byte[] subbody = ByteUtils.ConvertStructToByteArray(sp.PacketData);
                    Array.Copy(subbody, 0, bytes, bytes.Length, 0);
                }
            }


            return(bytes);
        }
Beispiel #2
0
        public unsafe void SendPacket(Packets.Packet pkt)
        {
            bool worked = false;

            if (pkt.Outbound)
            {
                ETH_REQUEST          Request = new ETH_REQUEST();
                INTERMEDIATE_BUFFER *ib      = pkt.IB;
                Request.EthPacket.Buffer = (IntPtr)ib;
                Request.hAdapterHandle   = adapterHandle;
                if (!Ndisapi.SendPacketToAdapter(hNdisapi, ref Request))
                {
                    worked = false;
                }
                else
                {
                    worked = true;
                }
            }
            else
            {
                ETH_REQUEST          Request = new ETH_REQUEST();
                INTERMEDIATE_BUFFER *ib      = pkt.IB;
                Request.EthPacket.Buffer = (IntPtr)ib;
                Request.hAdapterHandle   = adapterHandle;
                worked = Ndisapi.SendPacketToMstcp(hNdisapi, ref Request);
            }
            if (pkt.CodeGenerated)
            {
                pkt.ClearGeneratedPacket();
            }
        }
Beispiel #3
0
        public override void Execute(Peer peer, bool hasReceivedArguments, string arguments = "")
        {
            Game          _game          = Program.ResolveDependency <Game>();
            PlayerManager _playerManager = Program.ResolveDependency <PlayerManager>();

            try
            {
                var s = arguments.Split(' ');
                if (s.Length < 2)
                {
                    _owner.SendDebugMsgFormatted(DebugMsgType.SYNTAXERROR);
                    ShowSyntax();
                    return;
                }

                var opcode = Convert.ToByte(s[1], 16);
                var packet = new Packets.Packet((PacketCmdS2C)opcode);
                var buffer = packet.getBuffer();

                for (int i = 2; i < s.Length; i++)
                {
                    if (s[i] == "netid")
                    {
                        buffer.Write(_playerManager.GetPeerInfo(peer).Champion.NetId);
                    }
                    else
                    {
                        buffer.Write(Convert.ToByte(s[i], 16));
                    }
                }

                _game.PacketHandlerManager.sendPacket(peer, packet, Channel.CHL_S2C);
            }
            catch { }
        }
 protected override void OnFillRequestDataPacket(Packets.Packet requestPacket)
 {
     base.OnFillRequestDataPacket(requestPacket);
     requestPacket.DATA.Add(Setting.ChannelTrafficTimeout);
     requestPacket.DATA.Add(Setting.InterCharacterTimeout);
     requestPacket.DATA.Add(Setting.ResponseTimeout);
     requestPacket.DATA.Add(Setting.NumberOfRetries);
 }
Beispiel #5
0
 //Force-trigger the IncreaseIndex() function within TargetApplication
 //through our DLL.
 public void TriggerIncreaseIndex()
 {
     Packets.Packet packet = new Packets.Packet()
     {
         Id = Packets.PacketType.IncreaseIndex
     };
     this._communication.Send <Packets.Packet>(packet);
 }
 protected override void OnFillRequestDataPacket(Packets.Packet requestPacket)
 {
     // <authenticate> ::= 53H <auth-req-length><auth-request>
     byte[] authenticationRequest = DESEncryptor.EncryptTicket(_authenticationType.Ticket, _password);
     base.OnFillRequestDataPacket(requestPacket);
     requestPacket.DATA.AddRange(new byte[] { (byte)(authenticationRequest.Length + 1), 0x00 });  // muy raro pero hay que colocar un 0x00 antes del password encriptado.
     requestPacket.DATA.AddRange(authenticationRequest);
 }
Beispiel #7
0
        /// <summary>
        /// Event raised when a network packet is read from the file.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Parser_PacketRead(object sender, PacketReadEventArgs e)
        {
            var packet = e.PacketRecord;

            recordCount++;
            try
            {
                var etherPacket = packet.EthernetPacket;
                if (etherPacket != null && etherPacket.Proto == EtherType.IPv4)
                {
                    var ipPacket = etherPacket.Data as IPv4Packet;

                    // Ignore loopback traffic. We can't distinguish direction if both sides are local.
                    // TODO create a more complex algoritm that allows this, but uses port instead.  Would require client to not use server port range though.
                    if (ipPacket.SrcAddr.IsLocal && ipPacket.DestAddr.IsLocal)
                    {
                        return;
                    }

                    if (ipPacket != null && ipPacket.Proto == IPProtocolType.UDP)
                    {
                        var udpPacket = ipPacket.Data as UdpPacket;

                        // Only process udp packets inwhich one direction is within our server port range
                        if (
                            udpPacket != null &&
                            ((udpPacket.SrcPort >= serverPortStart && udpPacket.SrcPort <= serverPortEnd) ||
                             (udpPacket.DestPort >= serverPortStart && udpPacket.DestPort <= serverPortEnd))
                            )
                        {
                            var sourceIP = new System.Net.IPEndPoint(ipPacket.SrcAddr.LongAddress, udpPacket.SrcPort);
                            // Create an Packet using byte data.  Packet parses AC headers and fragments from the data.
#if NETWORKDEBUG
                            // Packet number for reference in UI
                            var ACPacket = new Packets.Packet(udpPacket.Data, sourceIP, packet.PacketNum);
#else
                            var ACPacket = new Packets.Packet(udpPacket.Data, sourceIP);
#endif
                            // Pass packet to defragmenter to extract messages
                            if (ipPacket.SrcAddr.IsLocal)
                            {
                                c2sDefragmenter.ProcessPacket(ACPacket);
                            }
                            else
                            {
                                s2cDefragmenter.ProcessPacket(ACPacket);
                            }
                        }
                    }
                }
            }
            catch (Exception ex2)
            {
                string error = "Exception at packet " + packet.PacketNum + " of file " + FilePath.FullName;
                var    newEx = new Exception(error, ex2);
                exceptions.Add(newEx);
            }
        }
        public bool AnswerContactRequest(ContactRequest req, bool ack, out string message)
        {
            try
            {
                // Prepare the packet to send
                Packets.ContactReqPacket packet = new Packets.ContactReqPacket(
                    (ack) ? Packets.PacketTypes.AcceptNewContact : Packets.PacketTypes.RegNewContact,
                    alea,
                    req.From.Username,
                    profile.Username
                    );

                // send the package
                udp.SendMessage(packet.Pack());

                // Recieve packet
                byte[] data = udp.RecieveMessage();

                // Unpack the data and check the type
                Packets.Packet p = Packets.Packet.Unpack <Packets.Packet>(data);
                switch ((Packets.PacketTypes)p.Type)
                {
                case Packets.PacketTypes.ContactAck:
                    if (ack)
                    {
                        // Todo: Get Contacts info
                        DebugInfo("Answer Contact Request: Accepted " + req.From.Username + " correctly.");
                    }
                    else
                    {
                        DebugInfo("Answer Contact Request: Refused " + req.From.Username + " correctly.");
                    }

                    // Update the request list
                    GetContactRequestList(out message);

                    message = "Answered correctly";
                    return(true);

                case Packets.PacketTypes.Error:
                    message = "Error: " + Packets.Packet.Unpack <Packets.AckErrorPacket>(data).Message;
                    DebugInfo("Answer Contact Request: " + message);
                    break;

                default:
                    DebugInfo("Answer Contact Request: Unexpected type.");
                    message = "Error, unexpected type.";
                    break;
                }
                return(false);
            }
            catch (System.Net.Sockets.SocketException)
            {
                DebugInfo("Server is offline.");
                message = "Server is offline.";
                return(false);
            }
        }
Beispiel #9
0
 //Unhook our DLL from TargetApplication, which restores it back to normal.
 private void Unhook()
 {
     Packets.Packet packet = new Packets.Packet()
     {
         Id = Packets.PacketType.Terminate
     };
     this._communication.Send <Packets.Packet>(packet);
     this._isHooked = false;
 }
Beispiel #10
0
        private void ServerClient_OnData(object sender, Packets.Packet e)
        {
            switch (e)
            {
            case ClientPacket cp:
                ProcessClientPacket(cp);
                break;

            default:
                _logger.LogWarning("Received from gameserver unknown packet: {0}", e.GetType().Name);
                break;
            }
        }
        public bool GetContactRequestList(out string message)
        {
            try
            {
                // Prepare the packet to send
                Packets.BasicReqPacket packet = new Packets.BasicReqPacket(
                    Packets.PacketTypes.ListContactReq,
                    alea,
                    profile.Username
                    );

                // send the package
                udp.SendMessage(packet.Pack());

                // Recieve packet
                byte[] data = udp.RecieveMessage();

                // Unpack the data and check the type
                Packets.Packet p = Packets.Packet.Unpack <Packets.Packet>(data);
                switch ((Packets.PacketTypes)p.Type)
                {
                case Packets.PacketTypes.ContactAck:
                    // Update contact requests list
                    Packets.ContactReqListPacket contactsRequests =
                        Packets.Packet.Unpack <Packets.ContactReqListPacket>(data);

                    profile.RecievedContactRequests = contactsRequests.Recieved;
                    profile.SentContactRequests     = contactsRequests.Sent;

                    message = "Recieved list correctly";
                    return(true);

                case Packets.PacketTypes.Error:
                    message = "Error: " + Packets.Packet.Unpack <Packets.AckErrorPacket>(data).Message;
                    DebugInfo("Contact request list: " + message);
                    break;

                default:
                    DebugInfo("Contact request list: Unexpected type.");
                    message = "Error, unexpected type.";
                    break;
                }
                return(false);
            }
            catch (System.Net.Sockets.SocketException)
            {
                DebugInfo("Server is offline.");
                message = "Server is offline.";
                return(false);
            }
        }
Beispiel #12
0
 public void SendPacket(Packets.Packet packet)
 {
     if (_DebugLogOutgoing)
     {
         Console.ForegroundColor = ConsoleColor.Blue;
         Console.WriteLine("0x" + ((byte)packet.PacketId).ToString("X2") + ' ' + packet.PacketId.ToString());
         if (_PacketDumpOutgoing)
         {
             packet.Dump();
         }
     }
     stream.WriteByte((byte)packet.PacketId);
     byte[] data = packet.Data;
     stream.Write(data, 0, data.Length);
     if (_DebugLogOutgoing)
     {
         Console.ForegroundColor = ConsoleColor.Gray;
     }
 }
 public ClientPacketInfo(int i, Packets.Packet p)
 {
     id = i;
     packet = p;
 }
 protected override void OnFillRequestDataPacket(Packets.Packet requestPacket)
 {
     base.OnFillRequestDataPacket(requestPacket);
     requestPacket.DATA.Add(WaitTime);
 }
 internal PacketReceivedEventArgs(Packets.Packet netPacket)
 {
     Packet = netPacket;
 }
Beispiel #16
0
 public void ProcessPacket(Packets.Packet pkt)
 {
     processQueue.Enqueue(pkt);
 }
Beispiel #17
0
 public ClientPacketInfo(int i, Packets.Packet p)
 {
     id     = i;
     packet = p;
 }
Beispiel #18
0
        private void RunConnectedLoop()
        {
            while (connection.Connected)
            {
                try
                {
                    int packetId_ = stream.ReadByte();
                    if (packetId_ == -1)
                    {
                        break;
                    }
                    byte           packetId = (byte)packetId_;
                    Packets.Packet packet   = Packets.Deserialize(packetId, stream);
                    if (_DebugLogIncoming)
                    {
                        Console.WriteLine("0x" + ((byte)packet.PacketId).ToString("X2") + ' ' + packet.PacketId.ToString());
                        if (_PacketDumpIncoming)
                        {
                            packet.Dump();
                        }
                    }
                    switch (packet.PacketId)
                    {
                    case Packets.PacketId.KeepAlive:
                        OnPacket_KeepAlive((Packets.KeepAlive)packet);
                        break;

                    case Packets.PacketId.LoginRequest:
                        OnPacket_LoginRequest((Packets.LoginRequestIncoming)packet);
                        break;

                    case Packets.PacketId.Handshake:
                        OnPacket_Handshake((Packets.HandshakeIncoming)packet);
                        break;

                    case Packets.PacketId.ChatMessage:
                        OnPacket_ChatMessage((Packets.ChatMessage)packet);
                        break;

                    case Packets.PacketId.TimeUpdate:
                        OnPacket_TimeUpdate((Packets.TimeUpdate)packet);
                        break;

                    case Packets.PacketId.EntityEquipment:
                        OnPacket_EntityEquipment((Packets.EntityEquipment)packet);
                        break;

                    case Packets.PacketId.SpawnPosition:
                        OnPacket_SpawnPosition((Packets.SpawnPosition)packet);
                        break;

                    case Packets.PacketId.UseEntity:
                        OnPacket_UseEntity((Packets.UseEntity)packet);
                        break;

                    case Packets.PacketId.UpdateHealth:
                        OnPacket_UpdateHealth((Packets.UpdateHealth)packet);
                        break;

                    case Packets.PacketId.Respawn:
                        OnPacket_Respawn((Packets.Respawn)packet);
                        break;

                    case Packets.PacketId.Player:
                        OnPacket_Player((Packets.Player)packet);
                        break;

                    case Packets.PacketId.PlayerPosition:
                        OnPacket_PlayerPosition((Packets.PlayerPosition)packet);
                        break;

                    case Packets.PacketId.PlayerLook:
                        OnPacket_PlayerLook((Packets.PlayerLook)packet);
                        break;

                    case Packets.PacketId.PlayerPositionAndLook:
                        OnPacket_PlayerPositionAndLook((Packets.PlayerPositionAndLookIncoming)packet);
                        break;

                    case Packets.PacketId.PlayerDigging:
                        OnPacket_PlayerDigging((Packets.PlayerDigging)packet);
                        break;

                    case Packets.PacketId.PlayerBlockPlacement:
                        OnPacket_PlayerBlockPlacement((Packets.PlayerBlockPlacement)packet);
                        break;

                    case Packets.PacketId.HoldingChange:
                        OnPacket_HoldingChange((Packets.HoldingChange)packet);
                        break;

                    case Packets.PacketId.UseBed:
                        OnPacket_UseBed((Packets.UseBed)packet);
                        break;

                    case Packets.PacketId.Animation:
                        OnPacket_Animation((Packets.Animation)packet);
                        break;

                    case Packets.PacketId.EntityAction:
                        OnPacket_EntityAction((Packets.EntityAction)packet);
                        break;

                    case Packets.PacketId.NamedEntitySpawn:
                        OnPacket_NamedEntitySpawn((Packets.NamedEntitySpawn)packet);
                        break;

                    case Packets.PacketId.PickupSpawn:
                        OnPacket_PickupSpawn((Packets.PickupSpawn)packet);
                        break;

                    case Packets.PacketId.CollectItem:
                        OnPacket_CollectItem((Packets.CollectItem)packet);
                        break;

                    case Packets.PacketId.AddObjectVehicle:
                        OnPacket_AddObjectVehicle((Packets.AddObjectVehicle)packet);
                        break;

                    case Packets.PacketId.MobSpawn:
                        OnPacket_MobSpawn((Packets.MobSpawn)packet);
                        break;

                    case Packets.PacketId.EntityPainting:
                        OnPacket_EntityPainting((Packets.EntityPainting)packet);
                        break;

                    case Packets.PacketId.UNKNOWN_1B:
                        OnPacket_UNKNOWN_1B((Packets.UNKNOWN_1B)packet);
                        break;

                    case Packets.PacketId.EntityVelocity:
                        OnPacket_EntityVelocity((Packets.EntityVelocity)packet);
                        break;

                    case Packets.PacketId.DestroyEntity:
                        OnPacket_DestroyEntity((Packets.DestroyEntity)packet);
                        break;

                    case Packets.PacketId.Entity:
                        OnPacket_Entity((Packets.Entity)packet);
                        break;

                    case Packets.PacketId.EntityRelativeMove:
                        OnPacket_EntityRelativeMove((Packets.EntityRelativeMove)packet);
                        break;

                    case Packets.PacketId.EntityLook:
                        OnPacket_EntityLook((Packets.EntityLook)packet);
                        break;

                    case  Packets.PacketId.EntityLookAndRelativeMove:
                        OnPacket_EntityLookAndRelativeMove((Packets.EntityLookAndRelativeMove)packet);
                        break;

                    case Packets.PacketId.EntityTeleport:
                        OnPacket_EntityTeleport((Packets.EntityTeleport)packet);
                        break;

                    case Packets.PacketId.EntityStatus:
                        OnPacket_EntityStatus((Packets.EntityStatus)packet);
                        break;

                    case Packets.PacketId.AttachEntity:
                        OnPacket_AttachEntity((Packets.AttachEntity)packet);
                        break;

                    case Packets.PacketId.EntityMetadata:
                        OnPacket_EntityMetadata((Packets.EntityMetadata)packet);
                        break;

                    case Packets.PacketId.PreChunk:
                        OnPacket_PreChunk((Packets.PreChunk)packet);
                        break;

                    case Packets.PacketId.MapChunk:
                        OnPacket_MapChunk((Packets.MapChunk)packet);
                        break;

                    case Packets.PacketId.MultiBlockChange:
                        OnPacket_MultiBlockChange((Packets.MultiBlockChange)packet);
                        break;

                    case Packets.PacketId.BlockChange:
                        OnPacket_BlockChange((Packets.BlockChange)packet);
                        break;

                    case Packets.PacketId.PlayNoteBlock:
                        OnPacket_PlayNoteBlock((Packets.PlayNoteBlock)packet);
                        break;

                    case Packets.PacketId.Explosion:
                        OnPacket_Explosion((Packets.Explosion)packet);
                        break;

                    case Packets.PacketId.NewInvalidState:
                        OnPacket_NewInvalidState((Packets.NewInvalidState)packet);
                        break;

                    case Packets.PacketId.Thunderbolt:
                        OnPacket_Thunderbolt((Packets.Thunderbolt)packet);
                        break;

                    case Packets.PacketId.OpenWindow:
                        OnPacket_OpenWindow((Packets.OpenWindow)packet);
                        break;

                    case Packets.PacketId.CloseWindow:
                        OnPacket_CloseWindow((Packets.CloseWindow)packet);
                        break;

                    case Packets.PacketId.WindowClick:
                        OnPacket_WindowClick((Packets.WindowClick)packet);
                        break;

                    case Packets.PacketId.SetSlot:
                        OnPacket_SetSlot((Packets.SetSlot)packet);
                        break;

                    case Packets.PacketId.WindowItems:
                        OnPacket_WindowItems((Packets.WindowItems)packet);
                        break;

                    case Packets.PacketId.UpdateProgressBar:
                        OnPacket_UpdateProgressBar((Packets.UpdateProgressBar)packet);
                        break;

                    case Packets.PacketId.Transaction:
                        OnPacket_Transaction((Packets.Transaction)packet);
                        break;

                    case Packets.PacketId.UpdateSign:
                        OnPacket_UpdateSign((Packets.UpdateSign)packet);
                        break;

                    case Packets.PacketId.IncrementStatistic:
                        OnPacket_IncrementStatistic((Packets.IncrementStatistic)packet);
                        break;

                    case Packets.PacketId.DisconnectKick:
                        OnPacket_DisconnectKick((Packets.DisconnectKick)packet);
                        break;

                    default:
                        string message = "";
                        if (Enum.IsDefined(typeof(Packets.PacketId), packetId))
                        {
                            message = "Sambuca encountered unimplemented packet 0x" + packetId.ToString("X2") + " " + ((Packets.PacketId)packetId).ToString();
                        }
                        else
                        {
                            message = "Sambuca encountered unrecognised packet 0x" + packetId.ToString("X2");
                        }
                        SendPacket(new Packets.DisconnectKick(message));
                        Console.WriteLine(message);
                        connection.Close();     // DEBUG OPTION
                        break;
                    }
                }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            }
        }