
Jimtags
Members-
Posts
10 -
Joined
-
Last visited
Everything posted by Jimtags
-
Hello this is my first started thread, I guess I coded this TCPServer script with the help from this topics >Fast multi-client TCP Server >Multiple connection TCP server Ohh GOD wrong section.. my bad.. mod, please transfer this to Example section.. #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <TabConstants.au3> #include <GuiListView.au3> #include <GUIListBox.au3> #include <GuiMenu.au3> #include <String.au3> #include <Array.au3> #include <Crypt.au3> #include <File.au3> TCPStartup() ;Start the TCP function Opt("TCPTimeout", 0) ;We will make our own timeout Opt("GUIOnEventMode", 1) _Crypt_Startup() ;To optimized crypt function OnAutoItExitRegister("Close") ;Call Close() function when script exit #Region ;***User Setting*** Global $ServerBindToHost = IniRead("PXGWS.ini", "Server", "IP", "0.0.0.0") ;The IP will be used for TCP connections Global $ServerBindToPort = IniRead("PXGWS.ini", "NetLib", "Port", 15998) ;The Port will be used for TCP connections Global $PacketHeaderKey = BinaryToString("0x" & IniRead("PXGWS.ini", "Server", "HeaderXor", "FD2AC72E")) ;This is the packet header identifier Global $PacketSecretKey = BinaryToString("0x" & IniRead("PXGWS.ini", "Server", "PacketXor", "B8E9ACD5")) ;This is the packet data encryption/decryption key Global $PacketMaxSize = IniRead("PXGWS.ini", "NetLib", "MaxBufferSize", 2048) ;The packet data size to handle Global $MaxClients = IniRead("PXGWS.ini", "NetLib", "MaxUserNum", 999) ;Total of connections to handle Global $MaxTimeout = IniRead("PXGWS.ini", "NetLib", "ConnectTimeout", 65000) ;Maximum timeout of each connections Global $XTrapDir = IniRead("PXGWS.ini", "Server", "XTrapDir", "XTrap") ;XTrap folder Global $TimeFormat = IniRead("PXGWS.ini", "Server", "TimeFormat", 24) ;Time Format Global $CabalMain = IniRead("PXGWS.ini", "Generator", "CabalMain", "CabalMain.exe") Global $Parameter = IniRead("PXGWS.ini", "Generator", "Parameter", "husky") Global $PXLibHost = IniRead("PXGWS.ini", "Generator", "PXLibHost", "127.0.0.1") Global $CheckList = IniRead("PXGWS.ini", "Generator", "CheckList", "CabalOnline.ini") #EndRegion ;***User Setting*** #Region ;***Data Identifiers Global $REQ_DATA_SR = 100 ;Session request Global $REQ_DATA_HB = 101 ;Heartbeart request Global $REQ_DATA_XH = 102 ;XTrap Hash request Global $CS2_DATA_XH = 103 ;XTrap Hash data Global $S2C_DATA_ST = 200 ;Server Stopped Global $S2C_DATA_SR = 201 ;Server Restarted Global $S2C_DATA_SS = 202 ;Server Shutdown Global $S2C_DATA_KC = 203 ;Terminate selected client connection Global $S2C_DATA_KA = 204 ;Terminate all client connections Global $C2S_DATA_DA = 300 ;Detected Application Global $C2S_DATA_LO = 400 ;Client Logout #EndRegion ;***Data Identifiers #Region ;***Ignore if you don't know what you are doing*** Global $Listen = -1 ;The handle of TCPListen Global $Client[1][20] ;[index][Socket,IP,Time,Data,List] Global $Ws2_32 = DllOpen("Ws2_32.dll") ;Ws2_32.dll open handle Global $NTDLL = DllOpen("ntdll.dll") ;ntdll.dll open handle Global $Kernel32 = DllOpen("Kernel32.dll") ;kernel32.dll open handle Global $InitialTime, $PacketCache, $UserBanList Global $tmpList = FileRead("cl.tmp") #EndRegion ;***Ignore if you don't know what you are doing*** #Region ### START Koda GUI section ### Form=C:\Program Files (x86)\AutoIt3\SciTE\Koda\Forms\Form2.kxf Global $MAINGUI = GUICreate("PX2000 Game Watcher Server", 834, 384, 190, 113) Global $LOGS = GUICtrlCreateList("", 8, 280, 817, 97, BitOR($LBS_NOTIFY, $LBS_NOINTEGRALHEIGHT, $LBS_NODATA, $WS_VSCROLL, $WS_BORDER), 0) Global $TAB = GUICtrlCreateTab(8, 8, 817, 267, $TCS_FLATBUTTONS) Global $TAB1 = GUICtrlCreateTabItem("Monitor") Global $LIST = GUICtrlCreateListView("#|IP Address|Computer Name|Game Account|Status|LastUpdate", 19, 40, 649, 225) Global $Group1 = GUICtrlCreateGroup("Server ", 676, 35, 137, 49, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) Global $SVRSTART = GUICtrlCreateButton("Start", 684, 51, 57, 25, $BS_FLAT) Global $SVRSTOP = GUICtrlCreateButton("Stop", 748, 51, 57, 25, $BS_FLAT) Global $Group2 = GUICtrlCreateGroup(" Control ", 677, 88, 137, 49, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) Global $KICKONE = GUICtrlCreateButton("Kick One", 685, 104, 57, 25, $BS_FLAT) Global $KICKALL = GUICtrlCreateButton("Kick All", 749, 104, 57, 25, $BS_FLAT) Global $Group3 = GUICtrlCreateGroup(" Setting ", 677, 142, 137, 124, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER)) Global $IP = GUICtrlCreateInput($ServerBindToHost, 688, 160, 113, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER)) Global $PORT = GUICtrlCreateInput($ServerBindToPort, 688, 184, 56, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) Global $MAXCLIENT = GUICtrlCreateInput($MaxClients, 747, 184, 54, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) Global $MAXBUFFER = GUICtrlCreateInput($PacketMaxSize, 688, 208, 56, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) Global $TIMEOUT = GUICtrlCreateInput($MaxTimeout, 747, 208, 54, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) Global $SVRRELOAD = GUICtrlCreateButton("Apply and Restart", 688, 232, 113, 25, $BS_FLAT) Global $TabSheet2 = GUICtrlCreateTabItem("Generator") Global $Group4 = GUICtrlCreateGroup(" Param Generator ", 16, 34, 799, 231) Global $Label1 = GUICtrlCreateLabel("CabalMain:", 24, 59, 57, 17) Global $Input1 = GUICtrlCreateInput($CabalMain, 88, 56, 113, 21) GUICtrlSetTip(-1, "Your CabalMain.exe") Global $Label2 = GUICtrlCreateLabel("Parameter:", 208, 59, 55, 17) Global $Input2 = GUICtrlCreateInput($Parameter, 272, 56, 113, 21) GUICtrlSetTip(-1, "You CabalMain parameter") Global $Label3 = GUICtrlCreateLabel("Server IP:", 24, 83, 51, 17) Global $Input3 = GUICtrlCreateInput($ServerBindToHost, 88, 80, 113, 21) GUICtrlSetTip(-1, "PXGW Server IP") Global $Label4 = GUICtrlCreateLabel("Server Port:", 208, 83, 56, 17) Global $Input4 = GUICtrlCreateInput($ServerBindToPort, 272, 80, 113, 21) GUICtrlSetTip(-1, "PXGW Server Port") Global $Label5 = GUICtrlCreateLabel("Check List:", 392, 83, 57, 17) Global $Input5 = GUICtrlCreateInput($CheckList, 456, 80, 113, 21) GUICtrlSetTip(-1, "List of trainers") Global $Label6 = GUICtrlCreateLabel("URL: http://", 392, 59, 63, 17) Global $Input6 = GUICtrlCreateInput($PXLibHost, 456, 56, 113, 21) GUICtrlSetTip(-1, "URL to download PXLib32.dll and PXLib64.dll") Global $Edit1 = GUICtrlCreateEdit("", 24, 104, 361, 153, BitOR($ES_AUTOVSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL)) GUICtrlSetData(-1, "Your PXGWC parameter will show here.") Global $Button6 = GUICtrlCreateButton("Generate Parameter and Check List", 576, 80, 233, 20, $BS_FLAT) Global $Label7 = GUICtrlCreateLabel("/PXLib32.dll and PXLib64.dll", 574, 59, 139, 17) Global $Edit2 = GUICtrlCreateEdit("", 392, 104, 417, 153, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL)) GUICtrlSetData(-1, $tmpList) GUICtrlSetFont(-1, 9, 400, 0, "Lucida Console") GUICtrlSetTip(-1, "#MD5 Hashes of application you want PXGWC to detect it.") GUICtrlSetLimit($IP, 15) GUICtrlSetTip($IP, "Server IP Address") GUICtrlSetLimit($PORT, 5) GUICtrlSetTip($PORT, "Server Port Address") GUICtrlSetLimit($MAXCLIENT, 3) GUICtrlSetTip($MAXCLIENT, "Maximum client connections") GUICtrlSetLimit($MAXBUFFER, 4) GUICtrlSetTip($MAXBUFFER, "Max buffer to accept") GUICtrlSetLimit($TIMEOUT, 5) GUICtrlSetTip($TIMEOUT, "Maximum connection timeout") GUICtrlSendMsg($LIST, $LVM_SETCOLUMNWIDTH, 0, 35) GUICtrlSendMsg($LIST, $LVM_SETCOLUMNWIDTH, 1, 100) GUICtrlSendMsg($LIST, $LVM_SETCOLUMNWIDTH, 2, 120) GUICtrlSendMsg($LIST, $LVM_SETCOLUMNWIDTH, 3, 110) GUICtrlSendMsg($LIST, $LVM_SETCOLUMNWIDTH, 4, 175) GUICtrlSendMsg($LIST, $LVM_SETCOLUMNWIDTH, 5, 105) GUICtrlSendMsg($LOGS, $LVM_SETCOLUMNWIDTH, 0, 150) GUICtrlSendMsg($LOGS, $LVM_SETCOLUMNWIDTH, 1, 663) GUISetOnEvent($GUI_EVENT_CLOSE, "Close") GUICtrlSetOnEvent($SVRSTART, "_ServerListenStart") GUICtrlSetOnEvent($SVRSTOP, "_ServerListenStop") GUICtrlSetOnEvent($KICKONE, "_ConnectionKill") GUICtrlSetOnEvent($KICKALL, "_ConnectionKillAll") GUICtrlSetOnEvent($SVRRELOAD, "_ServerReload") GUICtrlSetOnEvent($Button6, "_Generate") GUICtrlSetState($SVRSTOP, $GUI_DISABLE) GUICtrlSetState($KICKONE, $GUI_DISABLE) GUICtrlSetState($KICKALL, $GUI_DISABLE) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### CheckSetting() _Main() Func _Main() $Client[0][0] = 0 AddLogView($LOGS, "PX2000 XTrap Auth Server", 0) AddLogView($LOGS, "Build Version " & StringTrimLeft(FileGetVersion(@AutoItExe), 4), 0) While 1 _CheckNewConnections() _CheckNewPackets() _CheckBadConnection() NSleep(1000, $NTDLL) WEnd EndFunc ;==>_Main Func _CheckNewConnections() Local $iSock = TCPAccept($Listen) If $iSock = -1 Then Return Local $iSize = UBound($Client, 1) If $iSize - 1 > $MaxClients And $MaxClients > 0 Then TCPCloseSocket($iSock) Return EndIf ReDim $Client[$iSize + 1][20] $Client[0][0] = $iSize $Client[$iSize][0] = $iSock $Client[$iSize][1] = SocketIP($iSock, $Ws2_32) $Client[$iSize][2] = TimerInit() $Client[$iSize][3] = "" ; Packet buffer $Client[$iSize][4] = "" ; Connection error buffer $Client[$iSize][5] = "" ; Identifier buffer $Client[$iSize][6] = "" ; Heartbeat count buffer $Client[$iSize][7] = "" ; Computer/Username buffer $Client[$iSize][8] = "" ; Unused buffer $Client[$iSize][9] = "" ; Unused buffer $Client[$iSize][10] = "" ; Unused buffer $Client[$iSize][11] = "" ; Unused buffer $Client[$iSize][12] = "" ; Unused buffer $Client[$iSize][13] = "" ; Unused buffer $Client[$iSize][14] = "" ; Unused buffer $Client[$iSize][15] = "" ; Unused buffer $Client[$iSize][16] = "" ; Unused buffer $Client[$iSize][17] = "" ; Unused buffer $Client[$iSize][18] = "" ; Unused buffer $Client[$iSize][19] = GUICtrlCreateListViewItem($iSize & "|" & $Client[$iSize][1] & "||N/A||" & $InitialTime, $LIST) EndFunc ;==>_CheckNewConnections Func _CheckBadConnection() If $Client[0][0] < 1 Then Return Local $iNewSize = 0 For $i = 1 To $Client[0][0] If $Client[$i][4] <> 1 Or Round(TimerDiff($Client[$i][2])) > $MaxTimeout Then TCPCloseSocket($Client[$i][0]) GUICtrlDelete($Client[$i][19]) $Client[$i][0] = "" $Client[$i][4] = "" $Client[$i][5] = "" $Client[$i][6] = "" $Client[$i][7] = "" $Client[$i][8] = "" $Client[$i][9] = "" $Client[$i][11] = "" $Client[$i][12] = "" $Client[$i][13] = "" $Client[$i][14] = "" $Client[$i][15] = "" $Client[$i][16] = "" $Client[$i][17] = "" $Client[$i][18] = "" ContinueLoop Else $iNewSize += 1 EndIf Next If $iNewSize < $Client[0][0] Then Local $iSize = UBound($Client, 2) - 1 Local $aTemp[$iNewSize + 1][$iSize + 1] Local $iCount = 1 For $i = 1 To $Client[0][0] If $Client[$i][0] = "" Then ContinueLoop For $j = 0 To $iSize $aTemp[$iCount][$j] = $Client[$i][$j] Next $iCount += 1 Next $aTemp[0][0] = $iNewSize $Client = $aTemp For $i = 1 To $Client[0][0] GUICtrlSetData($Client[$i][19], $i) Next EndIf EndFunc ;==>_CheckBadConnection Func _CheckNewPackets() If $Client[0][0] < 1 Then Return ;No connections then return to _Main() Local $RecvPacket For $i = 1 To $Client[0][0] $RecvPacket = TCPRecv($Client[$i][0], $PacketMaxSize, 1) ; Attempt to receive data If $RecvPacket <> "" Then If CheckHeader($RecvPacket) = 0 Then AddLogView($LOGS, "Unknown Client from IP [" & $Client[$i][1] & "]") $Client[$i][4] = -1 ; The packet don't have the spicified packet header, let's set this as invalid one Return Else $Client[$i][3] &= $RecvPacket ; Add it to the packet buffer. ConsoleWrite(">> New Packet from " & SocketIP($Client[$i][0]) & @CRLF & "+> " & $RecvPacket & @CRLF & @CRLF) ; Let us know we got a packet in scite. EndIf Local $RawPackets = $Client[$i][3] ; Transfer all the data we have to a new variable. Local $StripHeader = StripHeader($RawPackets) ; Removing the packet header Local $DecryptData = PacketDec($StripHeader, $PacketSecretKey) ; Decrypting the data If $DecryptData <> "" Then Local $Calculator = Dec(StringMid($DecryptData, 1, 8)) Local $PacketHash = StringMid($DecryptData, 9, $Calculator) ; Retrieving the packet hash Local $RequestType = Dec(StringMid($DecryptData, 9 + $Calculator, 8)) ; Retrieving the request type Local $RequestData = _HexToString(StringTrimLeft($DecryptData, 16 + $Calculator)) ; Retrieving the packet data $Client[$i][5] = $PacketHash ; Packet hash to avoid duplicated packet or packet resend $Client[$i][3] = StringTrimLeft($Client[$i][3], StringLen($RecvPacket)) ;We are done extracting the packet let's now empty the buffer ConsoleWrite(">> Full packet found!" & @CRLF) ConsoleWrite("+> Unpacked: " & $DecryptData & @CRLF) ConsoleWrite("+> Hash: " & $Client[$i][5] & @CRLF) ConsoleWrite("+> Type: " & $RequestType & @CRLF) ConsoleWrite("+> Data: " & $RequestData & @CRLF) ConsoleWrite("+> LeftOver: " & $Client[$i][3] & @CRLF) If StringInStr($PacketCache, $Client[$i][5]) <> 0 Then AddLogView($LOGS, "Received duplicated packet from User IP [" & $Client[$i][1] & "]. This is malicious action!") $Client[$i][4] = -1 ConsoleWrite(@CRLF) Return Else ConsoleWrite("+> PacketCache Current Size: " & StringLen($PacketCache) & @CRLF & @CRLF) If StringLen($PacketCache) > 2048 Then $PacketCache = "" $PacketCache &= $Client[$i][5] & @CRLF _ProcessFullPacket($RequestData, $RequestType, $i) EndIf Else $Client[$i][4] = -1 EndIf EndIf Next EndFunc ;==>_CheckNewPackets Func _ProcessFullPacket($PacketData, $PacketType, $sID) Local $i = $sID Switch $PacketType Case $REQ_DATA_SR $Client[$i][4] = 1 $Client[$i][7] = $PacketData GUICtrlSetData($Client[$i][19], "||" & $Client[$i][7] & "||Connection Established") AddLogView($LOGS, "Established connection from IP [" & $Client[$i][1] & "]") Case $REQ_DATA_HB Local $BeatCount = 1 $Client[$i][2] = TimerInit() $Client[$i][6] += $BeatCount GUICtrlSetData($Client[$i][19], "||" & $Client[$i][7] & "||Heartbeat Count " & $Client[$i][6] & "|" & Hour($PacketData, $TimeFormat)) AddLogView($LOGS, "Heartbeat is okey from IP [" & $Client[$i][1] & "]", 0) Case $REQ_DATA_XH If $PacketData <> XTrapHash() Then Local $Data = PacketEnc(Hex($CS2_DATA_XH) & _StringToHex(XTrapHash())) Local $Packet = $PacketHeaderKey & $Data TCPSend($Client[$i][0], BinaryToString($Packet)) GUICtrlSetData($Client[$i][19], "||||XTrap Check Error") AddLogView($LOGS, "Client " & $Client[$i][7] & " has different XTrap version from the server") $Client[$i][4] = -1 EndIf Case $C2S_DATA_DA AddLogView($LOGS, $PacketData & " is detected from client " & $Client[$i][7]) $Client[$i][4] = -1 Case $C2S_DATA_LO GUICtrlSetData($Client[$i][19], "||||User Logout|" & Hour($PacketData, $TimeFormat)) EndSwitch EndFunc ;==>_ProcessFullPacket Func Close() If $Client[0][0] >= 1 Then For $i = 1 To $Client[0][0] Sleep($Client[0][0] - $i) Local $Data = PacketEnc(Hex($S2C_DATA_SS) & _StringToHex("Server has been shutdown.")) Local $Packet = $PacketHeaderKey & $Data TCPSend($Client[$i][0], BinaryToString($Packet)) TCPCloseSocket($Client[$i][0]) Next EndIf DllClose($Ws2_32) DllClose($NTDLL) DllClose($Kernel32) TCPShutdown() _Crypt_Shutdown() $PacketCache = "" Exit EndFunc ;==>Close Func SocketIP($Sock, $hDLL = "Ws2_32.dll") Local $structName = DllStructCreate("short;ushort;uint;char[8]") Local $sRet = DllCall($hDLL, "int", "getpeername", "int", $Sock, "ptr", DllStructGetPtr($structName), "int*", DllStructGetSize($structName)) If Not @error Then $sRet = DllCall($hDLL, "str", "inet_ntoa", "int", DllStructGetData($structName, 3)) If Not @error Then Return $sRet[0] EndIf Return "0.0.0.0" EndFunc ;==>SocketIP Func NSleep($nSleep, $hDLL = "ntdll.dll") Local $hStruct = DllStructCreate("int64") DllStructSetData($hStruct, 1, -1 * ($nSleep * 10)) DllCall($hDLL, "dword", "ZwDelayExecution", "int", 0, "ptr", DllStructGetPtr($hStruct)) EndFunc ;==>NSleep Func PacketEnc($EncData, $EncKey = $PacketSecretKey) Local $EncOut0 = MD5Data(Random(11111111, 99999999, 1)) Local $EncOut1 = Random(111111, 999999, 1) & Hex(StringLen($EncOut0)) & $EncOut0 Local $EncOut2 = _Crypt_EncryptData($EncOut1 & $EncData, $EncKey, $CALG_AES_256) Return BinaryToString($EncOut2) EndFunc ;==>PacketEnc Func PacketDec($DecData, $DecKey = $PacketSecretKey) Local $DecOut1 = _Crypt_DecryptData($DecData, $DecKey, $CALG_AES_256) Local $DecOut2 = BinaryToString($DecOut1) Return StringTrimLeft($DecOut2, 6) EndFunc ;==>PacketDec Func CheckHeader($RawPacketData) Local $CheckHeader1 = StringTrimLeft($RawPacketData, 2) Local $CheckHeader2 = StringLen(StringTrimLeft(StringToBinary($PacketHeaderKey), 2)) Local $CheckHeader3 = StringMid($CheckHeader1, 1, $CheckHeader2) Local $CheckHeader4 = StringTrimLeft(StringToBinary($PacketHeaderKey), 2) If $CheckHeader3 = $CheckHeader4 Then Return 1 EndFunc ;==>CheckHeader Func StripHeader($RawPacketData) Local $StripHeader1 = StringTrimLeft($RawPacketData, 2) Local $StripHeader2 = StringLen(StringTrimLeft(StringToBinary($PacketHeaderKey), 2)) Local $StripHeader3 = StringTrimLeft($StripHeader1, $StripHeader2) Return BinaryToString("0x" & $StripHeader3) EndFunc ;==>StripHeader Func XTrapHash($iDir = $XTrapDir) Local $XTemp1 = MD5File($iDir & "\psapi.dll") Local $XTemp2 = MD5File($iDir & "\XDataFI0.Xtp") Local $XTemp3 = MD5File($iDir & "\XTrap.xt") Local $XTemp4 = MD5File($iDir & "\XTrapExt.dll") Local $XTemp5 = MD5File($iDir & "\XTrapVa.dll") Return MD5Data($XTemp1 & $XTemp2 & $XTemp3 & $XTemp4 & $XTemp5) EndFunc ;==>XTrapHash Func MD5File($iFile) Local $FileHash1 = _Crypt_HashFile($iFile, $CALG_MD5) Return StringTrimLeft($FileHash1, 2) EndFunc ;==>MD5File Func MD5Data($iStr) Local $DataHash1 = _Crypt_HashData($iStr, $CALG_MD5) Return StringTrimLeft($DataHash1, 2) EndFunc ;==>MD5Data Func _ServerListenStart() If $Listen <> -1 Then AddLogView($LOGS, "Socket already open") Return Else $Listen = TCPListen($ServerBindToHost, $ServerBindToPort, $MaxClients) If $Listen = -1 Then AddLogView($LOGS, "Unable to open socket") Return EndIf EndIf GUICtrlSetState($SVRSTART, $GUI_DISABLE) GUICtrlSetState($SVRSTOP, $GUI_ENABLE) GUICtrlSetState($KICKONE, $GUI_ENABLE) GUICtrlSetState($KICKALL, $GUI_ENABLE) AddLogView($LOGS, "Server started on " & $ServerBindToHost & ":" & $ServerBindToPort) EndFunc ;==>_ServerListenStart Func _ServerListenStop() If $Listen = -1 Then AddLogView($LOGS, "Socket already closed") Return EndIf For $i = 1 To $Client[0][0] Sleep($Client[0][0] - $i) Local $Data = PacketEnc(Hex($S2C_DATA_ST) & _StringToHex("Server has been stopped.")) Local $Packet = $PacketHeaderKey & $Data TCPSend($Client[$i][0], BinaryToString($Packet)) $Client[$i][4] = -1 Next GUICtrlSetState($SVRSTART, $GUI_ENABLE) GUICtrlSetState($SVRSTOP, $GUI_DISABLE) GUICtrlSetState($KICKONE, $GUI_DISABLE) GUICtrlSetState($KICKALL, $GUI_DISABLE) AddLogView($LOGS, "Server stopped, (" & $Client[0][0] & ") total clients has been disconnected") TCPCloseSocket($Listen) $Listen = -1 $PacketCache = "" EndFunc ;==>_ServerListenStop Func _ServerReload() GUICtrlSetState($SVRRELOAD, $GUI_DISABLE) GUICtrlSetData($SVRRELOAD, "Restarting...") GUICtrlSetState($SVRSTART, $GUI_ENABLE) GUICtrlSetState($SVRSTOP, $GUI_DISABLE) GUICtrlSetState($KICKONE, $GUI_DISABLE) GUICtrlSetState($KICKALL, $GUI_DISABLE) If Not $Listen = -1 Then If $Client[0][0] >= 1 Then For $i = 1 To $Client[0][0] Sleep($Client[0][0] - $i) Local $Data = PacketEnc(Hex($S2C_DATA_SR) & _StringToHex("Server has been restarted")) Local $Packet = $PacketHeaderKey & $Data TCPSend($Client[$i][0], BinaryToString($Packet)) $Client[$i][4] = -1 Next AddLogView($LOGS, "Server stopped for restart, (" & $Client[0][0] & ") total clients has been disconnected") EndIf EndIf TCPCloseSocket($Listen) $Listen = -1 $PacketCache = "" IniWrite("PXGWS.ini", "Server", "IP", GUICtrlRead($IP)) IniWrite("PXGWS.ini", "NetLib", "Port", GUICtrlRead($PORT)) IniWrite("PXGWS.ini", "NetLib", "MaxBufferSize", GUICtrlRead($MAXBUFFER)) IniWrite("PXGWS.ini", "NetLib", "MaxUserNum", GUICtrlRead($MAXCLIENT)) IniWrite("PXGWS.ini", "NetLib", "ConnectTimeout", GUICtrlRead($TIMEOUT)) $ServerBindToHost = GUICtrlRead($IP) $ServerBindToPort = GUICtrlRead($PORT) $PacketMaxSize = GUICtrlRead($MAXBUFFER) $MaxClients = GUICtrlRead($MAXCLIENT) $MaxTimeout = GUICtrlRead($TIMEOUT) TCPShutdown() TCPStartup() _ServerListenStart() GUICtrlSetData($SVRRELOAD, "Save/Restart") GUICtrlSetState($SVRRELOAD, $GUI_ENABLE) EndFunc ;==>_ServerReload Func _ConnectionKill() Local $Selected = GUICtrlRead(GUICtrlRead($LIST)) If Not $Selected <> "" Then AddLogView($LOGS, "Please select a connection to disconnect") Return EndIf Local $Data = PacketEnc(Hex($S2C_DATA_KC) & _StringToHex("You have been kicked from the server.")) Local $Packet = $PacketHeaderKey & $Data Local $x = StringSplit($Selected, "|", 1) Local $i = $x[1] TCPSend($Client[$i][0], BinaryToString($Packet)) AddLogView($LOGS, "Terminate client successful, client " & $Client[$i][7] & " has been disconnected") $Client[$i][4] = -1 EndFunc ;==>_ConnectionKill Func _ConnectionKillAll() If $Client[0][0] >= 1 Then For $i = 1 To $Client[0][0] If $Client[$i][0] > 0 Then Sleep($Client[0][0] - $i) Local $Data = PacketEnc(Hex($S2C_DATA_KA) & _StringToHex("All client's has been kicked from the server.")) Local $Packet = $PacketHeaderKey & $Data TCPSend($Client[$i][0], BinaryToString($Packet)) $Client[$i][4] = -1 EndIf Next Else AddLogView($LOGS, "No connections to close") Return EndIf $PacketCache = "" AddLogView($LOGS, "Terminate all client successful, (" & $Client[0][0] & ") total clients has been disconnected") EndFunc ;==>_ConnectionKillAll Func AddLogView($hListBox, $hListBoxMsg, $isLog = 1) If $isLog = 1 Then WriteLog($hListBoxMsg) _GUICtrlListBox_BeginUpdate($hListBox) _GUICtrlListBox_AddString($hListBox, "[" & @HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & "] > " & $hListBoxMsg) _GUICtrlListBox_SetTopIndex($hListBox, _GUICtrlListBox_GetListBoxInfo($hListBox) - 1) _GUICtrlListBox_UpdateHScroll($hListBox) _GUICtrlListBox_EndUpdate($hListBox) ElseIf $isLog = 0 Then _GUICtrlListBox_BeginUpdate($hListBox) _GUICtrlListBox_AddString($hListBox, "[" & @HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & "] > " & $hListBoxMsg) _GUICtrlListBox_SetTopIndex($hListBox, _GUICtrlListBox_GetListBoxInfo($hListBox) - 1) _GUICtrlListBox_UpdateHScroll($hListBox) _GUICtrlListBox_EndUpdate($hListBox) Else Return @error - 1 EndIf EndFunc ;==>AddLogView Func Hour($cTime, $iFormat = 24) Local $Time = StringSplit($cTime, "/") ConsoleWrite($Time & @CRLF) If Not $Time[0] = 7 Then Return @error - 1 Else If $iFormat = 24 Then Return $Time[4] & ":" & $Time[5] & ":" & $Time[6] & ":" & $Time[7] ElseIf $iFormat = 12 Then Local $HOUR Local $AMPM If $Time[4] >= 01 And $Time[4] <= 11 Then If StringMid($Time[4], 1, 1) = 0 Then $HOUR = StringTrimLeft($Time[4], 1) Else $HOUR = $Time[4] EndIf ElseIf $Time[4] = 00 Or $Time[4] = 12 Then $HOUR = 12 Else $HOUR = $Time[4] - 12 EndIf If $Time[4] = 00 Or $Time[4] >= 01 And $Time[4] <= 11 Then $AMPM = "AM" Else $AMPM = "PM" EndIf Return $HOUR & ":" & $Time[5] & ":" & $Time[6] & " " & $AMPM Else Return @error - 2 EndIf EndIf EndFunc ;==>Hour Func WriteLog($lMsg) FileWrite(@ScriptDir & "\" & @YEAR & @MON & @MDAY & "_FatalLog.txt", @YEAR & "-" & @MON & "-" & @MDAY & @TAB & @HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC & @TAB & $lMsg & @CRLF) EndFunc ;==>WriteLog Func CheckSetting() Local $XPath = _FileListToArray(@ScriptDir, $XTrapDir, 2) If StringInStr($PacketHeaderKey, "0x") <> 0 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Header xor must be in hex.") Exit ElseIf StringLen($PacketHeaderKey) <> 4 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Header xor must be 8 bytes long.") Exit ElseIf StringInStr($PacketSecretKey, "0x") <> 0 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Packet xor must be in hex.") Exit ElseIf StringLen($PacketSecretKey) <> 4 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Packet xor must be 8 bytes long.") Exit ElseIf $PacketMaxSize > 2048 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Error Code: " & 1004) Exit ElseIf $MaxClients >= 1000 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Error Code: " & 1005) Exit ElseIf $MaxTimeout < 65000 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Error Code: " & 1006) Exit ElseIf $XPath = 0 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Error Code: " & 1007) Exit ElseIf $TimeFormat <> 12 And $TimeFormat <> 24 Then GUIDelete($MAINGUI) MsgBox(16, "Error", "Error Code: " & 1008) Exit EndIf If $TimeFormat = 12 Then $InitialTime = "--:--:-- --" Else $InitialTime = "--:--:--:---" EndIf EndFunc ;==>CheckSetting Func PCrypt($1, $2, $3, $4, $5, $6) Local $CmdParam1 = _Crypt_EncryptData($1 & "|" & $2 & "|" & $3 & "|" & $4 & "|" & $5 & "|" & $6, $PacketSecretKey, $CALG_AES_256) Return StringTrimLeft($CmdParam1, 2) EndFunc ;==>PCrypt Func _Generate() Local $gTimer = TimerInit() Local $main = GUICtrlRead($Input1) Local $parm = GUICtrlRead($Input2) Local $hsts = GUICtrlRead($Input3) Local $prts = GUICtrlRead($Input4) Local $lsts = GUICtrlRead($Input5) Local $link = GUICtrlRead($Input6) Local $pOut = PCrypt($main, $parm, $hsts, $prts, $lsts, $link) GUICtrlSetData($Edit1, "-Usage" & @CRLF & "PXGWC.exe EncryptedParam" & @CRLF & @CRLF & "-EncryptedParam" & @CRLF & $pOut & @CRLF & @CRLF & "Example: PXGWC.exe " & $pOut) If FileExists(GUICtrlRead($Input5)) Then FileDelete(GUICtrlRead($Input5)) Local $iHash = MD5Data(GUICtrlRead($Edit2)) Local $eData = _Crypt_EncryptData($iHash & GUICtrlRead($Edit2), $PacketSecretKey, $CALG_RC4) FileDelete("cl.tmp") FileDelete($CheckList) FileWrite("cl.tmp", GUICtrlRead($Edit2)) FileWrite($lsts, BinaryToString($eData)) IniWrite("PXGWS.ini", "Generator", "CabalMain", $main) IniWrite("PXGWS.ini", "Generator", "Parameter", $parm) IniWrite("PXGWS.ini", "Generator", "PXLibHost", $link) IniWrite("PXGWS.ini", "Generator", "CheckList", $lsts) Local $fTimer = Round(TimerDiff($gTimer)) AddLogView($LOGS, "File created on " & @ScriptDir & "\" & $lsts) AddLogView($LOGS, "Generated in " & $fTimer & "ms.") EndFunc ;==>_Generate
-
But still usable.. anyway that's just a example for how to make the packet not static.. It can help someone maybe
-
Since I'm using this tcp server script.. Here's some good additional, A packet dynamic encryption Func PacketEnc($EncData,$EncKey) Local $EncOut1 = Random(111111,999999,1) Local $EncOut2 = _Crypt_EncryptData($EncOut1&$EncData, $EncKey, $CALG_AES_256) Return BinaryToString($EncOut2) EndFunc Func PacketDec($DecData,$DecKey) Local $DecOut1 = _Crypt_DecryptData($DecData, $DecKey, $CALG_AES_256) Local $DecOut2 = BinaryToString($DecOut1) Return StringTrimLeft($DecOut2, 6) EndFunc -edit: removed deprecated _StringEncrypt()
-
Hello I have some problems I can't get the logic on how to work on this filereadline. Here's my probs.. file1.txt 1<tab>1111<tab>NAME_TAG<tab>2222 file2.txt 1<tab>NAME_TAG<tab>The Name of Tag output.txt "1111","NAME_TAG","The Name of Tag",2222 I appreciate any help to this topic. Im not good in this kind of logic.
-
Thank you very much... Now I can proceed... I was stock here! ^.^v
-
I'm tired searching the forum but I don't see a good example.. What I want is to get the string in a sentence.. for example: "Your balance is '0'" How can I get the 0 in the sentence? This is my script. UDPStartup() $o_Socket = UDPOpen("192.168.1.11", 28960, 1) $ReadDvar = Chr(255)&Chr(255)&Chr(255)&Chr(255)&"rcon openwsvr1 dvardump dedicated" Sleep(1000) UDPSend($o_Socket, $ReadDvar) Sleep(1000) $o_Dump = UDPRecv($o_Socket, 6000) MsgBox(0, "", $o_Dump) UDPShutdown() The result of this is ÿÿÿÿprint =============================== DVAR DUMP ======================================== dedicated "dedicated LAN server" 1481 total dvars 1481 dvar indexes =============================== END DVAR DUMP ===================================== I only to get the 'dedicated LAN server' word.. I tried _ArrayDisplay but what I want is the string only. _ArrayDisplay has a window.. Any help people!... T_T
-
##for example i put the download links in a text file 7 lines of dload links .. (dlink.txt) $CL = _FileCountLines(dlink.txt) Dim $DownloadArray[$CL+1][3] ##below i dont have idea whats the syntax...or how to do it ; Setup the URL's to download - i'm using CutePDF 7 times to demonstrate $DownloadArray[1][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[2][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[3][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[4][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[5][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[6][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[7][0] = "http://www.cutepdf.com/download/CuteWriter.exe"
-
I found this code a while ago in this forum.. I want to ask about the code but seems I can't remember the thread and the author of this code.. This code gives an download example of a PROGRESSBAR WITH TOTAL PROGRESSBAR.. My Problem is How can I make the $DownloadArray[X][Y] readed from a file? Example a DLlink.ini line 1: http://www.cutepdf.com/download/CuteWriter.exe line 2: http://www.cutepdf.com/download/CuteWriter.exe line 3: http://www.cutepdf.com/download/CuteWriter.exe line 4: http://www.cutepdf.com/download/CuteWriter.exe line .... line etc... Thanks in advance... ================================================================================== #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <ProgressConstants.au3> Opt("TrayMenuMode", 1) $Form1 = GUICreate("Downloader", 400, 170, -1, -1) $pb_File = GUICtrlCreateProgress(30, 30, 300, 20, $PBS_SMOOTH) $lbl_FilePercent = GUICtrlCreateLabel("0 %", 335, 32, 35, 16, $SS_RIGHT) $pb_Overall = GUICtrlCreateProgress(30, 80, 300, 20, $PBS_SMOOTH) $lbl_OverallPercent = GUICtrlCreateLabel("0 %", 335, 82, 35, 16, $SS_RIGHT) $but_Download = GUICtrlCreateButton("Download", 160, 120, 80, 30) GUISetState(@SW_Show) While 1 $nMsg = GUIGetMsg() If $nMsg = $GUI_EVENT_CLOSE Then EXIT If $nMsg = $but_Download Then _Download() WEnd Func _Download() ; Disable the download button GUICtrlSetState($but_Download, $GUI_DISABLE) ; Reset total filesize to download $TotalToDownload = 0 Dim $DownloadArray[8][3] ; Setup the URL's to download - i'm using CutePDF 7 times to demonstrate $DownloadArray[1][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[2][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[3][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[4][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[5][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[6][0] = "http://www.cutepdf.com/download/CuteWriter.exe" $DownloadArray[7][0] = "http://www.cutepdf.com/download/CuteWriter.exe" For $i = 1 To UBound($DownloadArray)-1 ; Get the File size $FileSize = INetGetSize($DownloadArray[$i][0]) ; Current File Size $DownloadArray[$i][1] = $FileSize ; Cumulative Total $DownloadArray[$i][2] = $TotalToDownload ; Add the current file size to the total $TotalToDownload += $FileSize Next ; Do the Downloads For $i = 1 To UBound($DownloadArray)-1 ; Dow the download in the background $Download = INetGet($DownloadArray[$i][0], "C:\test" & $i & ".exe", 1, 1) ; Loop to update progress Do ; Get number of bytes read for current file $BytesDownloaded = INetGetInfo($Download, 0) ; Add this to the cumulative total $DownloadedSoFar = $DownloadArray[$i][2] + $BytesDownloaded ; Calculate the current file percentage $FileProgress = Floor(($BytesDownloaded / $DownloadArray[$i][1]) * 100) ; Calculate the overall percentage $OverallProgress = Floor(($DownloadedSoFar / $TotalToDownload) * 100) ; Update the Current FIle progress bar GUICtrlSetData($pb_File, $FileProgress) ; Only update the current file percent label if it has changed to avoid flickering If GUICtrlRead($lbl_FilePercent) <> $FileProgress & " %" Then GUICtrlSetData($lbl_FilePercent, $FileProgress & " %") ; Update the overall progress bar GUICtrlSetData($pb_Overall, $OverallProgress) ; Only update the overall file percent label if it has changed to avoid flickering If GUICtrlRead($lbl_OverallPercent) <> $OverallProgress & " %" Then GUICtrlSetData($lbl_OverallPercent, $OverallProgress & " %") ; Only update the title bar (overall) percent label if it has changed to avoid flickering If WinGetTitle($Form1, "") <> $OverallProgress & " % - Downloader" Then WinSetTitle($Form1, "", $OverallProgress & " % - Downloader") ; Continue loop until download is complete Until InetGetInfo($Download, 2) ; Set current file progress bar to 100% when complete GUICtrlSetData($pb_File, 100) ; Set current file percent label to 100% when complete GUICtrlSetData($lbl_FilePercent, "100 %") Next ; Set overall progress bar to 100% when complete GUICtrlSetData($pb_Overall, 100) ; Set overall percent label to 100% when complete GUICtrlSetData($lbl_OverallPercent, "100 %") ; Display message box to say all downloads complete MsgBox(64, "Downloader", "All downloads complete") ; Reset GUI WinSetTitle($Form1, "", "Downloader") GUICtrlSetData($pb_File, 0) GUICtrlSetData($lbl_FilePercent, "0 %") GUICtrlSetData($pb_Overall, 0) GUICtrlSetData($lbl_OverallPercent, "0 %") ; Enable the download button GUICtrlSetState($but_Download, $GUI_ENABLE) EndFunc
-
StringRegExp | or operator
Jimtags replied to Steveiwonder's topic in AutoIt General Help and Support
Owww... It really help... thanks a lot! -
StringRegExp | or operator
Jimtags replied to Steveiwonder's topic in AutoIt General Help and Support
Hello... I would like to ask regarding StringRegExp My question is.. is't possible to get the count of same letters of two variables? for example $var1 = "Jimmy" $var2 = "Maika" as you can see $var1 got 3 the same letters to $var2.. and $var2 got 2 the same letters to $var1 i want to get the count of the same letters on each variable ... just like the game FLAMES. --im waiting for any reply!.. Thanks