关于封IP的原理和方法,小发一贴~
序此方法适用于1299,1310等版本,2.0的我没有见过,如果2.0中没有封ip的功能,那么此方法应该也适用于2.0的数据库。
正文
1299和1310版本的库中存在一个存储过程:PROC_INSERT_CURRENTUSER,作用是用户登陆后,将人物写入在线表CURRENTUSER,客户端传给这个存储的参数中有一个就是登陆者的IP,因此要封用户的IP,就要从这里入手。而其它存储如account_login,account_logout等没有发现有传入IP的地方,所以也只有挑这个了。
CREATE PROCEDURE PROC_INSERT_CURRENTUSER
@AccountID varchar(50),
@CharID varchar(50),
@ServerNo int,
@ServerIP varchar(50),
@ClientIP varchar(50),
@nret smallint output
AS
INSERT INTO CURRENTUSER ( nServerNo, strServerIP, strAccountID, strCharID, strClientIP )Values(@ServerNo, @ServerIP, @AccountID, @CharID, @ClientIP )
set @nret=1
GO
这就是这个存储最原始的情况,如果我们将这个nret=0,那么用户就无法登陆了,因此方法很简单!我们接着看。
建立一个表,用于存我们封过的ip,比如叫S_IpBan,结构很简单,ip varchar(15)基本就可以以了,但是我们可以记录一下其它信息,比如封的原因,时间等,因此建表如下:
CREATE TABLE . (
IDENTITY (1, 1) NOT NULL ,
(15) COLLATE Chinese_PRC_CI_AS NULL ,
(255) COLLATE Chinese_PRC_CI_AS NULL ,
NULL
) ON
GO
接下来我们改存储PROC_INSERT_CURRENTUSER,如下:
CREATE PROCEDURE PROC_INSERT_CURRENTUSER
@AccountID varchar(50),
@CharID varchar(50),
@ServerNo int,
@ServerIP varchar(50),
@ClientIP varchar(50),
@nret smallint output
AS
Declare @iban int,@ip varchar(21)
select @ip=ip from S_IpBan where ip=ltrim(rtrim(@ClientIP))
if @@ROWCOUNT =0
begin
INSERT INTO CURRENTUSER ( nServerNo, strServerIP, strAccountID, strCharID, strClientIP )Values(@ServerNo, @ServerIP, @AccountID, @CharID, @ClientIP )
set @nret=1
return
end
else
begin
set @nret=0
return
end
GO
保存后,即生效,至此基本完成。
操作方法
要封一个ip,即先将该ip记入S_IpBan表,比如123.123.123.132,即可,然后该ip上的用户到了选择人物处就中断,从而达到封ip的办法。
扩展功能
有些时间,我们为了调试方便,不想让玩家登陆,但只想让自己进入,这个即把上面的原理倒过来就可以了。我们来看操作:
把自己的ip写入s_ipban表,然后把 PROC_INSERT_CURRENTUSER中的if @@ROWCOUNT =0改成if @@ROWCOUNT>0即可。
尾声
其实,封ip的方法很多牛人都能研究出来,也不是什么高深的东西,只要找到入口,自然会有办法。大家热爱骑士的,可是有很多人不愿意分享自己研究出来的东西,没办法。我记得有一句话怎么说来的?中国人喜欢单干,而西方人讲究团队,所以西方的事物发展比中国快。
有愿意讨论的,可以发邮件至[email protected]。 不错的方法,谢谢分享 精彩。太精彩了。。。。
狂顶!!!!!!!!!!! ADSL 动态的IP~~~~
m111100 发表于 2009-6-19 03:06 http://www.kofans.cn/bbs/static/image/common/back.gif
动态IP,这个没有办法的,不过上面的方法可以稍加改动,封IP段,比如121.11.*.*,不过这样很危险,本来SF就没多少人玩,你还封IP段,一封就是一个地区,呵呵。 sdfewrtew 狂顶,无私的楼主 謝謝樓主分享~~~
页:
[1]