Guest User

Untitled

a guest
Jan 22nd, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 4.80 KB | None | 0 0
  1. #region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_UseUpx=n
  3. #AutoIt3Wrapper_UseX64=n
  4. #AutoIt3Wrapper_Change2CUI=y
  5. #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
  6. #cs
  7.     INI Structure:
  8.  
  9.     AccountCounter -> Accounts = Anzahl
  10.     IDAccount -> ID = "Accountname"
  11.     AccountID -> "Accountname" = ID
  12.     IDPassword -> ID = Password
  13.  
  14.  
  15.     Packets:
  16.     Login       ->  Login:Benutzername:Passwort
  17.     Register    ->  Register:Benutzername:Passwort
  18.  
  19. #ce
  20.  
  21.  
  22. TCPStartup()
  23. DirCreate(@ScriptDir & "\Database\")
  24. $DatabaseDir = @ScriptDir & "\Database\Datenbank.ini"
  25. If Not FileExists($DatabaseDir) Then IniWrite($DatabaseDir, "AccountCounter", "Accounts", 0)
  26.  
  27. $Mainsocket = TCPListen("127.0.0.1", 2121, 100) ;IP Adresse ändern für  !!!!
  28.  
  29. ConsoleWrite("Starting SynSoft Loginserver..." & @CRLF)
  30. ConsoleWrite("Database Test..." & @CRLF)
  31. ConsoleWrite(IniRead($DatabaseDir, "AccountCounter", "Accounts", 0) & " registered Accounts found..." & @CRLF)
  32. ConsoleWrite(@CRLF&@CRLF&@CRLF)
  33.  
  34.  
  35. While 1
  36.  
  37.     $NewSocket = TCPAccept($Mainsocket)
  38.  
  39.     If $NewSocket >= 0 Then
  40.         Do
  41.             $Recv = TCPRecv($NewSocket, 2048) ;Bei gleichzeitigen anfragen von clients sollte ein array verwendet werden
  42.         Until $Recv <> ""
  43.         $RecvSplitted = StringSplit($Recv,":")
  44.         If $RecvSplitted[1] = "Login" Then
  45.             If _TestAccount($RecvSplitted[2], $RecvSplitted[3]) = 1 Then
  46.                 TCPSend($NewSocket, "True")
  47.  
  48.                 ConsoleWrite("["& @HOUR&":"& @MIN&":"& @SEC&"] Successfull Login with Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) &  @CRLF)
  49.  
  50.             ElseIf _TestAccount($RecvSplitted[2], $RecvSplitted[3]) <> 1 Then
  51.                 TCPSend($NewSocket, "False")
  52.  
  53.                 ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Failed Login attempt with Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) &  @CRLF)
  54.  
  55.             EndIf
  56.         ElseIf $RecvSplitted[1] = "Register" Then
  57.             If _TestAccountTimes($RecvSplitted[2]) <> -2 Then
  58.                     If $RecvSplitted[3] <> "" Then
  59.                     _AddAccount($RecvSplitted[2],$RecvSplitted[3])
  60.                     ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Succesfull Registration of Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) &  @CRLF)
  61.                     TCPSend($NewSocket,"True")
  62.                     ElseIf $RecvSplitted[3] = "" Then
  63.                     ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Failed Registration of Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) &  @CRLF)
  64.                     TCPSend($NewSocket,"False")
  65.                     EndIf
  66.  
  67.             ElseIf _TestAccountTimes($RecvSplitted[2]) = -2 Then
  68.                 ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Failed Registration of Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) &  @CRLF)
  69.                 TCPSend($NewSocket,"False")
  70.             EndIf
  71.         EndIf
  72.     EndIf
  73.  
  74.  
  75.  
  76. WEnd
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85. Func _AddAccount($AccountName, $AccountPasswort)
  86.     Local $AccAnzahl = IniRead($DatabaseDir, "AccountCounter", "Accounts", "ERROR") ;Anzahl von Accounts laden
  87.     If $AccAnzahl = "ERROR" Then
  88.         MsgBox(0, "Error", "Datenbankfehler - Accountanzahl nicht ladbar" ;Überprüfen ob -1 Funktioniert hat
  89.         Return 0
  90.     EndIf
  91.  
  92.     IniWrite($DatabaseDir, "AccountCounter", "Accounts", $AccAnzahl + 1)
  93.     IniWrite($DatabaseDir, "IDAccount", $AccAnzahl + 1, $AccountName)
  94.     IniWrite($DatabaseDir, "AccountID", $AccountName, $AccAnzahl + 1)
  95.     IniWrite($DatabaseDir, "IDPassword", $AccAnzahl + 1, $AccountPasswort)
  96.  
  97.     If $AccAnzahl + 1 = IniRead($DatabaseDir, "AccountID", $AccountName, 0) Then Return 1
  98.  
  99. EndFunc   ;==>_AddAccount
  100.  
  101. Func _TestAccount($AccountName, $AccountPasswort)
  102.     Local $AccAnzahl = IniRead($DatabaseDir, "AccountCounter", "Accounts", "ERROR") ;Anzahl von Accounts laden
  103.  
  104.     For $i = $AccAnzahl To 0 Step -1
  105.         Local $AccLoop = IniRead($DatabaseDir, "IDAccount", $i, "Error")
  106.  
  107.         If $AccLoop = $AccountName Then
  108.         ExitLoop
  109.     EndIf
  110. Next
  111.  
  112.     If IniRead($DatabaseDir, "IDPassword", $i, "Error") = $AccountPasswort Then
  113.         Return 1
  114.     ElseIf IniRead($DatabaseDir, "IDPassword", $i, "Error") <> $AccountPasswort Then
  115.         Return 0
  116.     EndIf
  117. EndFunc   ;==>_TestAccount
  118.  
  119.  
  120. Func _SocketToIP($SHOCKET)
  121.     Local $sockaddr, $aRet
  122.  
  123.     $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
  124.  
  125.     $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
  126.             "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
  127.     If Not @error And $aRet[0] = 0 Then
  128.         $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
  129.         If Not @error Then $aRet = $aRet[0]
  130.     Else
  131.         $aRet = 0
  132.     EndIf
  133.  
  134.     $sockaddr = 0
  135.  
  136.     Return $aRet
  137. EndFunc   ;==>_SocketToIP
  138.  
  139.  
  140. Func _TestAccountTimes($AccountName)
  141.     Local $AccAnzahl = IniRead($DatabaseDir, "AccountCounter", "Accounts", "ERROR") ;Anzahl von Accounts laden
  142.  
  143.     For $i = $AccAnzahl To 0 Step -1
  144.         Local $AccLoop = IniRead($DatabaseDir, "IDAccount", $i, "Error")
  145.  
  146.  
  147.         If $AccLoop = $AccountName Then
  148.             Return -2
  149.             ExitLoop
  150.         EndIf
  151.     Next
  152.  
  153. EndFunc   ;==>_TestAccountTimes
Add Comment
Please, Sign In to add comment