Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <File.au3>
- #include <Array.au3>
- Global Const $nWelcomeMessage = "Telnet root thing v1" & @CRLF & "Type HELP to see a list of the available commands."
- Dim $sBeta = True ; change this to false in release
- Dim $sSocket[10], $sBuffer[10], $sPath[10]
- Dim $nRoot = @HomeDrive
- For $x = 0 to UBound($sPath)-1
- $sPath[$x] = $nRoot
- Next
- TCPStartup()
- $sMainSocket = TCPListen(@IPAddress1,23,5)
- While 1
- $sNewSocket = TCPAccept($sMainSocket)
- If $sNewSocket > -1 Then
- For $x = 0 to UBound($sSocket)-1
- If Not $sSocket[$x] Then
- $sSocket[$x] = $sNewSocket
- TCPSend($sSocket[$x],$nWelcomeMessage)
- TCPSend($sSocket[$x], @CRLF & @CRLF & $sPath[$x] & ">")
- ExitLoop
- EndIf
- Next
- EndIf
- For $x = 0 to UBound($sSocket)-1
- If $sSocket[$x] Then
- $sData = TCPRecv($sSocket[$x],100)
- $sBuffer[$x] &= $sData
- If @error Then
- TCPCloseSocket($sSocket[$x])
- $sSocket[$x] = ""
- If $sBeta Then Exit
- ElseIf Asc($sData) = 0x8 Then ;backspace received
- $len = StringLen($sBuffer[$x])
- $sBuffer[$x] = StringTrimRight($sBuffer[$x],2) ; trim the buffer
- If $len = 1 Then
- TCPSend($sSocket[$x],">")
- Else
- TCPSend($sSocket[$x]," " & Chr(0x8))
- EndIf
- EndIf
- If StringInStr($sBuffer[$x],@CRLF) Then
- $sCommand = StringTrimRight($sBuffer[$x],2)
- $sAnswer = ProcessCommand($sCommand)
- If @error = 1 Then
- TCPCloseSocket($sSocket[$x])
- $sSocket[$x] = ""
- If $sBeta Then Exit
- EndIf
- TCPSend($sSocket[$x],@CRLF & $sAnswer)
- TCPSend($sSocket[$x], @CRLF & $sPath[$x] & ">")
- $sBuffer[$x] = ""
- EndIf
- EndIf
- Next
- WEnd
- Func ProcessCommand($fCommand)
- Local $fAnswer
- $fParam = StringSplit($fCommand," ")
- Switch $fParam[1]
- Case "HELP"
- $fAnswer = "Command" & @TAB & "Description" & @CRLF & _
- "HELP" & @TAB & "Lists all the available commands." & @CRLF & _
- "AYT" & @TAB & "Standard ""Are you there"" command."
- Case "AYT"
- $fAnswer = "I am here."
- Case "DIR"
- $fAnswer = "FILENAME TYPE" & @CRLF & @CRLF
- $fDir = _FileListToArray($sPath[$x],"*",2)
- $fFile = _FileListToArray($sPath[$x],"*",1)
- For $i = 0 to UBound($fDir)-1
- $len = StringLen($fDir[$i])
- For $j = 30 to $len Step -1
- $fDir[$i] &= " "
- Next
- Next
- For $i = 0 to UBound($fFile)-1
- $len = StringLen($fFile[$i])
- For $j = 30 to $len Step -1
- $fFile[$i] &= " "
- Next
- Next
- _ArrayDelete($fFile,0)
- _ArrayDelete($fDir,0)
- If UBound($fDir) <> 0 Then
- $fAnswer &= _ArrayToString($fDir,"<DIR>" & @CRLF) & "<DIR>" & @CRLF
- EndIf
- If UBound($fFile) <> 0 Then
- $fAnswer &= _ArrayToString($fFile,"<FILE>" & @CRLF) & "<FILE>" & @CRLF
- EndIf
- If $fAnswer = "FILENAME TYPE" & @CRLF & @CRLF Then
- $fAnswer = "FILENAME TYPE" & @CRLF & "No files or directories." & @CRLF
- EndIf
- Case "CD"
- If $fParam[0] > 1 Then
- Switch $fParam[2]
- Case ".."
- $sPath[$x] = StringLeft($sPath[$x], StringInStr($sPath[$x],"\",0,-1) -1)
- Case "\"
- $sPath[$x] = StringLeft($sPath[$x],2)
- Case Else
- $sSearch = FileFindFirstFile($sPath[$x] & "\" & $fParam[2])
- If $sSearch = -1 Then
- $fAnswer = "Cannot find file or directory."
- Else
- While 1
- $sFile = FileFindNextFile($sSearch)
- If @error Then
- $fAnswer = "Cannot find file or directory."
- ExitLoop
- EndIf
- If StringInStr(FileGetAttrib($sPath[$x] & "\" & $sFile),"D") Then
- $sPath[$x] &= "\" & $sFile
- ExitLoop
- EndIf
- WEnd
- EndIf
- EndSwitch
- EndIf
- Case "EXIT"
- Return SetError(1,0,1)
- Case Else
- If $fParam[1] <> "" Then
- ShellExecute($fParam[1], "", $sPath[$x])
- If @error Then
- $fAnswer = "'" & $fCommand & "' is not recognized as an internal or external command," & @CRLF & _
- "operable program or batch file."
- EndIf
- EndIf
- EndSwitch
- Return $fAnswer
- EndFunc
Add Comment
Please, Sign In to add comment