2003.04.09 (水) 16:50:59 <u*j*2*6*> 判別しまちがうかもしれないのでまだBanとかはしません
2003.04.09 (水) 16:51:37 <u*j*2*6*> ユーザー窓の、WinMX??とかが表示されるところに、ソフト名がでます
2003.04.09 (水) 17:07:53 <u*j*2*6*> Napchan,2get,Utatane,XNap,MX2.x,MX3.xに対応
2003.04.09 (水) 17:08:01 <u*j*2*6*> ほかのクライアントをみまちがえたり、共有0のユーザーを判別できなかったりします
2003.05.28 (水) 11:07:42 <heavy> WinMX v2.6としてpingに対しpongを返すと駄目みたいです。
2003.05.28 (水) 18:15:23 <u*j*2*6*> (゚ー゚)(。_。)(゚-゚)(。_。)ウンウン、MX2.6はpongしてこないですね
shuusei24159:クライアントの自動判別(report by 2ndreal,saint,heavy_baby,Shin)
diff --dos -ur 24158/console.pas 24159/console.pas --- 24158/console.pas Sat Mar 22 23:12:24 2003 +++ 24159/console.pas Wed Apr 09 16:25:04 2003 @@ -554,11 +554,24 @@ str:=str+GetLangI(LNG_LIST_WINMXH); end else - if (TLocalUser(user^.local).softwareID<>softWinMXNormal) and (TLocalUser(user^.local).softwareID<>softWinMXJap) and (not (locPingable in TLocalUser(user^.local).localstate)) and ((current_time-20000)>TLocalUser(user^.local).last_seen) then + {if (TLocalUser(user^.local).softwareID<>softWinMXNormal) and (TLocalUser(user^.local).softwareID<>softWinMXJap) and (not (locPingable in TLocalUser(user^.local).localstate)) and ((current_time-20000)>TLocalUser(user^.local).last_seen) then begin if str<>'' then str:=str+', '; str:=str+GetLangI(LNG_LIST_NOPONG); - end; + end;} + if str<>'' then str:=str+', '; + if locPingable in TLocalUser(user^.local).localstate then + begin + if loc326 in TLocalUser(user^.local).detector then str:=str+'2get' + else if loc10300 in TLocalUser(user^.local).detector then str:=str+'XNap'; + //else if not (loc208 in TLocalUser(user^.local).detector) then str:=str+'XNap??'; + end + else if loc326 in TLocalUser(user^.local).detector then str:=str+'MX2.x' + else if loc110 in TLocalUser(user^.local).detector then str:=str+'Napchan' + else if loc208 in TLocalUser(user^.local).detector then str:=str+'Utatane' + else if locMD5Zeros in TLocalUser(user^.local).detector then str:=str+'Utatane' + else if locMD5NonZero in TLocalUser(user^.local).detector then str:=str+'MX3.x' + else str:=str+'MX3.x??' end; item.SubItems.Add(str); //item.SubItems.Add(IntToStr(TLocalUser(user^.local).shared_blocked)); diff --dos -ur 24158/constants.pas 24159/constants.pas --- 24158/constants.pas Sat Mar 29 11:06:12 2003 +++ 24159/constants.pas Wed Apr 09 14:58:56 2003 @@ -27,8 +27,8 @@ SLAVANAP_VERSION = '2.4.1'; SLAVANAP_BUILD = '108'; SLAVANAP_BUILD_DATE = '24 January 2003'; - SLAVANAP_SHUUSEI = '58'; - SLAVANAP_SHUUSEI_DATE = '29 March 2003'; + SLAVANAP_SHUUSEI = '59'; + SLAVANAP_SHUUSEI_DATE = '9 April 2003'; SLAVANAP_VERSION_SHORT = SLAVANAP_TITLE+' '+SLAVANAP_VERSION; SLAVANAP_FULL = SLAVANAP_TITLE+' '+SLAVANAP_VERSION+ ' (build '+SLAVANAP_BUILD+ diff --dos -ur 24158/handler.pas 24159/handler.pas --- 24158/handler.pas Sat Mar 29 13:11:34 2003 +++ 24159/handler.pas Wed Apr 09 16:16:44 2003 @@ -1718,6 +1718,9 @@ if query<>queryNormal then exit; if not isLogged then exit; if not CheckParams(1) then exit; + if gcmd.id=MSG_CLIENT_ADD_HOTLIST_SEQ then + if GetTickCount-local.last_seen<30000 then + local.detector:=local.detector+[loc208]; tmp_pos:=251; case gcmd.id of MSG_CLIENT_ADD_HOTLIST, @@ -1793,6 +1796,8 @@ local.Exec(MSG_SERVER_NOT_IGNORED,gcmd.cmd); end; MSG_CLIENT_CLEAR_IGNORE: begin + if GetTickCount-local.last_seen<30000 then + local.detector:=local.detector+[loc326]; i:=local.ignored.Count; StrHash_Clear(local.ignored); local.Exec(gcmd.id,IntToStr(i)); @@ -2497,6 +2502,10 @@ Error(GetLangT(LNG_INVALIDARGS),true); exit; end; + if (dir='') and not valid_dir then local.detector:=local.detector+[loc100]; + if hlist.Strings[1]='0' then local.detector:=local.detector+[locMD5Zero] + else if hlist.Strings[1]='00000000000000000000000000000000' then local.detector:=local.detector+[locMD5Zeros] + else local.detector:=local.detector+[locMD5NonZero]; tmp_pos:=12262; if autoban_incomplete and (Pos('__INCOMPLETE___',hlist.Strings[0])<>0) then begin @@ -2668,6 +2677,7 @@ CheckWinMX(local); exit; end; + local.detector:=local.detector+[loc870]; tmp_pos:=302; dir:=hlist.Strings[0]; hlist.Delete(0); @@ -2701,6 +2711,10 @@ if query<>queryNormal then exit; //if user^.level=napUserLeech then exit; if not CheckParams(4) then exit; + local.detector:=local.detector+[loc10300]; + if hlist.Strings[1]='0' then local.detector:=local.detector+[locMD5Zero] + else if hlist.Strings[1]='00000000000000000000000000000000' then local.detector:=local.detector+[locMD5Zeros] + else local.detector:=local.detector+[locMD5NonZero]; tmp_pos:=12262; if autoban_incomplete and (Pos('__INCOMPLETE___',hlist.Strings[0])<>0) then begin @@ -2824,6 +2838,7 @@ tmp_pos:=320; if not isLocal then exit; if not isLogged then exit; + if GetTickCount-local.last_seen<30000 then local.detector:=local.detector+[loc110]; if local.shared=nil then exit; if user^.shared=0 then if not nocount_text then exit @@ -6677,6 +6692,7 @@ tmp_pos:=670; if not isLogged then exit; if not CheckParams(1) then exit; + if isLocal and (GetTickCount-local.last_seen<30000) then local.detector:=local.detector+[loc640]; if user^.level=napUserLeech then begin Exec(user,MSG_SERVER_BROWSE_DIRECT_ERR,hlist.Strings[0]+' "'+GetLangT(LNG_BROWSELEECH)+'"'); diff --dos -ur 24158/localusers.pas 24159/localusers.pas --- 24158/localusers.pas Fri Mar 14 12:03:36 2003 +++ 24159/localusers.pas Wed Apr 09 14:45:10 2003 @@ -28,6 +28,8 @@ type TLocalUserState = set of (locSwapBytes, locNeedsUpdate, locWriteOnly, locFloodWarning, locPingable); + TLocalUserDetector = set of (loc326, loc110, loc640, loc208, + loc100, loc870, loc10300, locMD5Zero, locMD5NonZero, locMD5Zeros); TLocalUser = class(TObject) data : POnlineUser; socket : HSocket; @@ -66,6 +68,7 @@ blocked_toosmall, blocked_tooshortmp3, blocked_other : Word; //blocked_otherはブロックワードによるブロックを含まない + detector : TLocalUserDetector; constructor Create; destructor Destroy; override; function logged: Boolean; @@ -132,6 +135,7 @@ blocked_toosmall :=0; blocked_tooshortmp3:=0; blocked_other :=0; + detector:=[]; {$IFDEF USERS_DOUBLE_QUEUE} StrHash_Reset(out_list2); {$ENDIF} @@ -210,6 +214,7 @@ blocked_toosmall :=0; blocked_tooshortmp3:=0; blocked_other :=0; + detector:=[]; {$IFDEF USERS_DOUBLE_QUEUE} StrHash_Clear(out_list2); {$ENDIF}