标题: [文本处理] 【已结】请教一段日志分析批处理程序 [打印本页]
作者: LongFei 时间: 2009-2-6 16:38 标题: 【已结】请教一段日志分析批处理程序
这是一段暗黑游戏日志记录,我只能过滤到这个状态,但很不清晰。
希望的效果是,第一个ID进入后,没有退出之前,还有哪些同IP地址的ID进入。
17:47 D2GSCBEnterGame *yeshou 67.166.37.67 ——————时间、进入游戏标志、ID、IP地址
17:47 D2GSCBEnterGame *jh 121.26.36.92
17:47 D2GSCBEnterGame *zx00147 120.0.116.133
17:47 D2GSCBEnterGame *cjymr3 125.37.196.222
17:47 D2GSCBEnterGame *yeshou4 67.166.37.67 ————————另一个ID进入,IP相同,应该为同一个人
17:47 D2GSCBLeaveGame *TS-25 leave
17:48 D2GSCBLeaveGame *sosll leave
17:48 D2GSCBLeaveGame *love_gege leave
17:48 D2GSCBLeaveGame *rui leave
17:48 D2GSCBLeaveGame *yeshou leave ———————第一个进入者退出
17:48 D2GSCBLeaveGame *zx00147 leave
17:48 D2GSCBEnterGame *TS-25 124.119.7.206
17:48 D2GSCBEnterGame *sosll 123.121.244.213
17:48 D2GSCBLeaveGame *eq leave
17:48 D2GSCBEnterGame *zx00147 120.0.116.133
17:48 D2GSCBEnterGame *jingran1 121.22.148.89
17:48 D2GSCBEnterGame *love_gege 122.142.175.247
17:48 D2GSCBEnterGame *eq 121.22.148.89
17:48 D2GSCBLeaveGame *jingran1 leave
17:48 D2GSCBEnterGame *wabc185 60.26.192.176
17:48 D2GSCBLeaveGame *yeshou4 leave ————————第二个进入ID退出
需要结果大致是这样:
IP地址作为命令行中的变量,搜索该IP的账号出入情况:
17:47 D2GSCBEnterGame *yeshou 67.166.37.67
17:47 D2GSCBEnterGame *yeshou4 67.166.37.67
17:48 D2GSCBLeaveGame *yeshou leave
17:48 D2GSCBLeaveGame *yeshou4 leave
不知道批处理能不能实现,先谢谢各位了。
作者: defanive 时间: 2009-2-6 17:36
用P当然可以,只不过速度慢了。。。
for读全部IP,然后分别用findstr查找一次。。。
作者: sidney 时间: 2009-2-6 18:03
这个应该可以。
The log file name is log.txt.- @echo off
- setlocal EnableDelayedExpansion
- set "ip=67.166.37.67"
- set "name=0"
- set "find=0"
- for /f "tokens=1,2,3,4" %%a in (log.txt) do (if "%%d"=="%ip%" (set /a name+=1 & set "!name!
- =%%c" & echo %%a %%b %%c %%d) else (set "na=%%c" & call :check & if "!find!"=="1" ( echo %%a
- %%b %%c %%d)) & set "find=0" )
-
- :check
- for /l %%i in (1,1,%name%) do (if "!%%i!"=="!na!" (set "find=1"))
复制代码
作者: pusofalse 时间: 2009-2-6 20:44
- @echo Off & setlocal EnableDelayedExpansion
- cd.>l.x & cd.>i.x & cd.>result.x
- For /f "tokens=1-4" %%a in ('sort log.txt') do (
- If "%%d" equ "leave" (set "txt=l.x") else (set "txt=i.x")
- echo %%d %%a %%c>>!txt!
- )
-
- For /f "tokens=1-3" %%a in (i.x) do (
- If "%%a" equ "!Addr!" (
- Call :Find !_%%a! %%b && (
- For /f "tokens=1-3" %%d in ('Findstr /I "\%%c$" l.x') do (echo %%~e D2GSCBLeaveGame %%~f %%~d)
- For /f "tokens=1-3" %%d in ("!_%%a!") do (echo %%e D2GSCBLeaveGame %%~f %%~d)
- Echo %%b D2GSCBLeaveGame %%c %%a
- )
- )
- set "_%%a=%%a %%b %%c"
- set "Addr=%%a"
- )>>result.x
- sort result.x & del result.x, l.x, i.x
- Pause>nul & Exit /b
-
- :Find
- For /f "tokens=1-3" %%a in ('findstr /i "\%3$" l.x') do (
- If "%%b" gtr "%2" (Echo %%b D2GSCBLeaveGame %%c %%a& Exit /b 0) else (Exit /b 1)
- )
复制代码
作者: LongFei 时间: 2009-2-6 20:57 标题: 回复 3楼 的帖子
非常感谢!
除了有点慢之外,结果非常理想!
这段程序,要好好学习,说真的,确实看不懂。佩服!
作者: LongFei 时间: 2009-2-8 11:15
感谢4楼版主老大,试了您的程序,好像您把进入和退出做了排序,进出分开了,这样就很难查出某人进出的时间段内,其他的相同ID是不是也进入了游戏。
也感谢3楼的前辈,日志大概在3~9M之间,分析一个IP出来,现在需要1小时或者更长。能否再将其优化一下,提高下速度?
谢谢各位前辈了!
作者: zjs4814466 时间: 2009-2-8 12:32
把这个批处理放到游戏的那个地方???
作者: defanive 时间: 2009-2-8 12:52
批处理干高质量的活效率实在低。。。
我觉得快的方法应该是统计EnterGame里面相同IP出现的次数,大于2就说明有马甲呗。。。
作者: LongFei 时间: 2009-2-8 16:29 标题: 回复 8楼 的帖子
暗黑的一个玩家进游戏后,建立一个房间,杀一个固定的BOSS(掉落装备几率高),然后重新建立一个房间再杀这个BOSS。一些老手平均每2分钟建立一个房间是正常的。所以会频繁的出现D2GSCBEnterGame D2GSCBLeaveGame .
但有人会使用外挂,暗黑里是属于作弊行为。作弊账号本身,不是仓库,连带账号才是仓库。所以,要查连带账号。
查外挂根据另外一些日志记录特征和游戏中确认等方法,一旦追踪到某个账号有外挂,就要沿着IP地址继续追查。
追查的思路是,如果外挂账号和另一个账号,再同时间、同IP地址进入游戏,就可以确定这个作弊者的另一个账号。以此类推,查出更多的连带账号。
作者: namejm 时间: 2009-2-8 18:05
先不说代码,说说思路:既然是通过进出时间和IP来判断,那么,可以把原始数据重新排序:第一列存放时间,第二列存放IP,第三列存放ID,第四列存放进出游戏的标志(第一二列的存放顺序不能随意颠倒,这是关键,第三四列的数据就无所谓了),保存到新文件new1中,然后,用sort重排这份新文件,得到第二份新文件new2,这样,相同时间、相同IP的数据全部存放到相邻的行中,再用批处理来做就很简单了。
生成new1文件,可以用批处理来做,但是速度比较慢,推荐使用excel来处理:把原始数据导入excel中,然后,通过鼠标的拖曳,可以很容易地交换两列数据。
生成new2文件,用excel来处理比批处理更高效,推荐使用excel。
作者: defanive 时间: 2009-2-8 19:44
不说批处理先,同一个IP在同一个房间里面有多个号,不代表是同一个人的,假如是局域网、无线网呢?这样判定作弊不太好,再说现在带号练级、双开的现象又不是没有,只要是网游就会有的。。。
作者: defanive 时间: 2009-2-8 19:53
最后提供一个效率最高最快的思路。。。
利用Findstr的/n功能查找IP,得到进入游戏的行及其行号,然后读出游戏名,再用Findstr查找退出游戏的行及其行号,如果两个退出游戏的行号之间有多个进入游戏的行号说名是作弊。。。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |