UO-Dev Arama


Yazar: Bilinmiyor
Tarih: 26-08-2009 13:26


Paylaş : Paylaş

Kod:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using Server;
using Server.Network;

namespace Server.Accounting
{
public class AccountAttackLimiter
{
public static bool Enabled = true;

public static void Initialize()
{
if ( !Enabled )
return;

PacketHandlers.RegisterThrottler( 0x80, new ThrottlePacketCallback( Throttle_Callback ) );
PacketHandlers.RegisterThrottler( 0x91, new ThrottlePacketCallback( Throttle_Callback ) );
PacketHandlers.RegisterThrottler( 0xCF, new ThrottlePacketCallback( Throttle_Callback ) );
}

public static bool Throttle_Callback( NetState ns )
{
InvalidAccountAccessLog accessLog = FindAccessLog( ns );

if ( accessLog == null )
return true;

return ( DateTime.Now >= (accessLog.LastAccessTime + ComputeThrottle( accessLog.Counts )) );
}

private static List<InvalidAccountAccessLog> m_List = new List<InvalidAccountAccessLog>();

public static InvalidAccountAccessLog FindAccessLog( NetState ns )
{
if ( ns == null )
return null;

IPAddress ipAddress = ns.Address;

for ( int i = 0; i < m_List.Count; ++i )
{
InvalidAccountAccessLog accessLog = m_List[i];

if ( accessLog.HasExpired )
m_List.RemoveAt( i-- );
else if ( accessLog.Address.Equals( ipAddress ) )
return accessLog;
}

return null;
}

public static void RegisterInvalidAccess( NetState ns )
{
if ( ns == null || !Enabled )
return;

InvalidAccountAccessLog accessLog = FindAccessLog( ns );

if ( accessLog == null )
m_List.Add( accessLog = new InvalidAccountAccessLog( ns.Address ) );

accessLog.Counts += 1;
accessLog.RefreshAccessTime();

if ( accessLog.Counts >= 3 ) {
try {
using ( StreamWriter op = new StreamWriter( "throttle.log", true ) ) {
op.WriteLine(
"{0}\t{1}\t{2}",
DateTime.Now,
ns,
accessLog.Counts
);
}
}
catch {
}
}
}

public static TimeSpan ComputeThrottle( int counts )
{
if ( counts >= 15 )
return TimeSpan.FromMinutes( 5.0 );

if ( counts >= 10 )
return TimeSpan.FromMinutes( 1.0 );

if ( counts >= 5 )
return TimeSpan.FromSeconds( 20.0 );

if ( counts >= 3 )
return TimeSpan.FromSeconds( 10.0 );

if ( counts >= 1 )
return TimeSpan.FromSeconds( 2.0 );

return TimeSpan.Zero;
}
}

public class InvalidAccountAccessLog
{
private IPAddress m_Address;
private DateTime m_LastAccessTime;
private int m_Counts;

public IPAddress Address
{
get{ return m_Address; }
set{ m_Address = value; }
}

public DateTime LastAccessTime
{
get{ return m_LastAccessTime; }
set{ m_LastAccessTime = value; }
}

public bool HasExpired
{
get{ return ( DateTime.Now >= ( m_LastAccessTime + TimeSpan.FromHours( 1.0 ) ) ); }
}

public int Counts
{
get{ return m_Counts; }
set{ m_Counts = value; }
}

public void RefreshAccessTime()
{
m_LastAccessTime = DateTime.Now;
}

public InvalidAccountAccessLog( IPAddress address )
{
m_Address = address;
RefreshAccessTime();
}
}
}



Yorumlar

Henüz yorum yapılmamıştır.

Oylamalar

Oylama :
Üyelerin oylama ortalaması (10 dışında) : Henüz Oylanmamış   
Oylar: 0

Benzer Sayfalar

SayfalarYorumlarGönderenTarih
Account Master v1.0.10yazoo01-04-2012
Sorter Account Sistemi0Sorter23-07-2011
Account Remove0aldarson27-06-2010
Rexos Account Sistemi0Rexos18-06-2010
56b Account Sistemi0Afronola01-03-2010


Keywords:

ultima online, RunUO, ultima online download, sphere scripting, role play, uo grafik, second age ultima, uo loop, macroman, pvp server, server kurulumu, sphere, multool, ml mulls, 56b 55r 55i, htmlgumps, client 4x, client edit, sphere release, osi, rp server, sunucular, ghost mouse, inside uo, kingdom reborn, stygian abyss, uo nasıl oynanır, mondain's legacy, age of shadows, world build, grandmaster, ultima online pvp, player dosyaları, ultima online indir, frp game, RunUO 1.0.0, razor, uo rice, hue editör, skill tools, ultima online patch, axis, world build, verdata, verdata patcher, map editör, gump editör, mul patcher, aos mulls, scriptler, anim edit, anim publish, hues mul, hosting vps, event dialog, account sistemi, skill gain, static yapımı,