private void Connection_OnPacketReceived(SharpPcap.PosixTimeval timeval, TcpConnection connection, TcpFlow flow, TcpPacket tcpPacket) { if (tcpPacket.PayloadData.Length == 0) { return; } var data = (byte[])tcpPacket.PayloadData.Clone(); var direction = tcpPacket.SourcePort == Constants.GAME_PORT ? PacketDirection.ServerToClient : PacketDirection.ClientToServer; if (gameCrypt != null) { gameCrypt.Decrypt(data, direction); } var parsedPacket = ParsePacket(data, direction); if (parsedPacket == null) { return; } if (parsedPacket.GetType() == typeof(KeyPacket)) { gameCrypt = new GameCrypt(parsedPacket as KeyPacket); return; } }
void HandleFlowOnPacketReceived(SharpPcap.PosixTimeval timeval, TcpPacket tcp, TcpConnection connection, TcpFlow flow) { AddPacket(tcp); }
private void Connection_OnPacketReceived(SharpPcap.PosixTimeval timeval, TcpConnection connection, TcpFlow flow, TcpPacket tcp) { //incoming packets, first one is Init always if (tcp.SourcePort == Constants.LOGIN_PORT && Crypt.IsInitial) { TryInit(tcp); return; } // only after inited we can parse if (!Crypt.IsInitial) { ParsePacket(tcp); } }
private void Connection_OnConnectionClosed(SharpPcap.PosixTimeval timeval, TcpConnection connection, TcpPacket tcp, TcpConnection.CloseType closeType) { TcpConnection.OnPacketReceived -= Connection_OnPacketReceived; TcpConnection.OnConnectionClosed -= Connection_OnConnectionClosed; ClientHandler.RemoveGameClient(this); }
/// <summary> /// Statistics would be a great way of detecting DoS attacks - more efficient than looking at individual packet detection /// </summary> /// <param name="statsPacket"></param> /// <param name="lasTimeval"></param> /// <param name="sensorId"></param> public void ReportStatistics(SharpPcap.WinPcap.StatisticsModePacket statsPacket, SharpPcap.PosixTimeval lasTimeval, string sensorId) { throw new NotImplementedException(); }