Ticket #2937: telnet.au3

File telnet.au3, 4.9 KB (added by antoine@…, on Nov 14, 2014 at 9:49:41 AM)

Server Telnet AutoIT for Test

Line 
1#include <Constants.au3>
2
3;; SETTINGS HERE, CHANGE THESE
4Global Const $sAdminPass = "manadar" ;; Admin password. Change this please.
5;; END OF SETTINGS, STOP CHANGING!!
6
7;; TCP Variables
8Dim $sMaxConnections = 10
9Dim $hSocket[$sMaxConnections], $sBuffer[$sMaxConnections], $iAuth[$sMaxConnections], $hCommand[$sMaxConnections], $bIgnoreCommand[$sMaxConnections]
10
11;; TCP Options
12Dim $sIPAddress = @IPAddress1, $nPort = 5000
13
14TCPStartup()
15
16$sMainSocket = TCPListen($sIPAddress, $nPort, 5)
17If @error Then
18 Switch @error
19 Case 1
20 _FatalError("The listening address was incorrect (Possibly another server was already running): " & $sIPAddress)
21 Case 2
22 _FatalError("The listening port was incorrect (Possibly another server was already running): " & $nPort)
23 Case Else
24 _FatalError("Unable to set up a listening server on " & $sIPAddress & ":" & $nPort)
25 EndSwitch
26EndIf
27
28While 1
29 ;; Accept new incoming clients, and ask them to authorise.
30 $sNewSocket = TCPAccept($sMainSocket)
31 If $sNewSocket > -1 Then
32 For $x = 0 To UBound($hSocket) - 1
33 If Not $hSocket[$x] Then
34 $hSocket[$x] = $sNewSocket
35 $iAuth[$x] = 0
36 ;TCPSend($hSocket[$x], $sWelcomeMessage & @CRLF & @CRLF)
37 TCPSend($hSocket[$x], "Please enter the administrator password" & @CRLF & ">")
38 ExitLoop
39 EndIf
40 Next
41 EndIf
42
43 ;; Loop through existing connections, check if they sent us any data
44 For $x = 0 To UBound($hSocket) - 1
45 If $hSocket[$x] Then
46
47 ;; Handle incoming data
48 $sData = TCPRecv($hSocket[$x], 100)
49 $sBuffer[$x] &= $sData
50 If @error Then
51 MsgBox(0,"test",@error)
52 TCPCloseSocket($hSocket[$x])
53 $hSocket[$x] = ""
54 $sBuffer[$x] = ""
55 $iAuth[$x] = 0
56 ProcessClose($hCommand[$x])
57 ElseIf Asc($sData) = 0x8 Then ;backspace received
58 $len = StringLen($sBuffer[$x])
59 $sBuffer[$x] = StringTrimRight($sBuffer[$x], 2) ; trim the buffer
60 If $len = 1 Then
61 TCPSend($hSocket[$x], ">")
62 Else
63 TCPSend($hSocket[$x], " " & Chr(0x8))
64 EndIf
65 EndIf
66
67 ;; Handle data, in case data is complete: ended with newline
68 If StringInStr($sBuffer[$x], @CRLF) Then
69 $sBuffer[$x] = StringTrimRight($sBuffer[$x], 2)
70 If StringLen($sBuffer[$x]) = 0 Then
71 $sBuffer[$x] = " " ; You cannot send "nothing" over TCP (no packet is sent), thus I replace it with something non obstrusive
72 EndIf
73
74 ;; Check if user is authorised
75 If $iAuth[$x] == 0 Then
76 ;; Not authorised, user is typing password
77 If ($sBuffer[$x] == $sAdminPass) Then
78 $iAuth[$x] = 1
79 $hCommand[$x] = Run("cmd", @ScriptDir, @SW_HIDE, $STDIN_CHILD + $STDERR_CHILD + $STDOUT_CHILD)
80 TCPSend($hSocket[$x], "Administrator authorisation granted." & @CRLF & @CRLF)
81 ConsoleWrite($x & " logged in with admin password." & @CRLF)
82 Else
83 TCPSend($hSocket[$x], "Access denied." & @CRLF & ">")
84 EndIf
85 Else
86 If $sBuffer[$x] <> "" Then ; stop making output if user starts typing, then punch him in the face or something for fucking it up
87 ConsoleWrite($sBuffer[$x] & @CRLF)
88 StdinWrite($hCommand[$x], $sBuffer[$x] & @CRLF)
89 $bIgnoreCommand[$x] = True
90 EndIf
91 EndIf
92 $sBuffer[$x] = ""
93 EndIf
94
95 If $iAuth[$x] Then ; no @CRLF in buffer, but user is authed for output
96 $line = StdoutRead($hCommand[$x])
97 If $line <> "" Then
98 If $bIgnoreCommand[$x] Then
99 $line = StringTrimLeft($line, StringInStr($line, @LF)+1)
100 $bIgnoreCommand[$x] = False
101 EndIf
102 ConsoleWrite($line & @CRLF)
103 TCPSend($hSocket[$x], $line)
104 EndIf
105 EndIf
106 EndIf
107 Next
108WEnd
109
110Func MessageBroadcast($sMsg)
111 For $n = 0 To UBound($hSocket) - 1
112 If $hSocket[$n] AND $iAuth[$n] == 1 Then
113 TCPSend($hSocket[$n], $sMsg)
114 EndIf
115 Next
116EndFunc ;==>MessageBroadcast
117
118Func _FatalError($msg)
119 ConsoleWrite(@CRLF & "! " & $msg & @CRLF)
120 ;MsgBox(0, $sAppName & $nVersion, "A fatal error has occured and " & $sAppName & " has to be closed with the error message: " & @CRLF & $msg)
121 Exit
122EndFunc