Что нового

[Автоматизация] Работа с MS telnet

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Итак. Как можно работать с этой зверушкой Telnet? :blink:
Мне собственно нужно подключиться к моему модему. Уже в Telnet он спрашивает пароль, после ввода пароля можно вводить команды. Команду мне нужно отправить только одну :smile:
Код:
poe drop poe0

Может у кого есть функция для работы с ней? :whistle:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
мб как и со многими коммандными утилитами винды? скрытое cmd-окно, а там telnet? ;D
 

amel27

Продвинутый
Сообщения
146
Репутация
55
Medic84 сказал(а):
Итак. Как можно работать с этой зверушкой Telnet?

Вариант 1. использовать PuTTY - в отличие от TELNET, поддерживает автоматизацию
Вариант 2. наваять UDF-враппер API ф-ций для ExtraPuTTY DLL
Вариант 3. Автоматизация TELNET через CMD-окно (пост на OSZone).
 
Автор
Medic84

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Вариант 1 подходит больше всего :ok:
 

beve

Осваивающий
Сообщения
104
Репутация
31
Я вот примерно так делаю перезагрузку своего модема - Callisto 821+ (по этотому же принципу, только параметры другие, делаю смену ip адресса без перезагрузки модема:smile:
Код:
MsgBox(64,"",_RestartModem())

Func _RestartModem()
Local  $msg, $recv
Local $errorkod=-1
Local $ConnectedSocket = -1
Local $router_IP="192.168.1.1"
Local $port=23
Local $RouterLogin="qe1dg7bm"; логин к роутеру
Local $RouterPass="qa6yo9km"; пароль к роутеру
TCPStartup()

$ConnectedSocket = TCPConnect($router_IP , $port )
If $ConnectedSocket = -1 Then 
    $errorkod= "0"
    Return $errorkod
EndIf
; Message Loop
;==========
While 1
Sleep(50)        
;
$recv = TCPRecv( $ConnectedSocket, 2048)
If @error Then 
   $errorkod= "2"
    ExitLoop
    EndIf
; 
If $recv <> "" Then
Switch $recv
    Case  StringInStr($recv,"Login failed")>0 
        $errorkod= "6"
        ExitLoop
    Case StringRight($recv,7)= "Login: "
        TCPSend( $ConnectedSocket , $RouterLogin & @CRLF)
        If @ERROR Then 
           $errorkod= "3"
           ExitLoop
        EndIf
     Case StringRight($recv, 10)="Password: " 
        TCPSend( $ConnectedSocket , $RouterPass & @CRLF)
        If @ERROR Then 
           $errorkod= "4"
           ExitLoop
        EndIf
    Case StringInStr($recv,"Login successful")>0
        TCPSend( $ConnectedSocket , "system restart" & @CRLF)
         If @ERROR Then 
           $errorkod= "5"
           ExitLoop
        EndIf
    Case StringLeft($recv,1)=="s"; так как роутер перезагружается, то на моей машине возвращается только первая буква от сообщения что модем удачно пошел в перезагрузку...
        TCPSend( $ConnectedSocket , "user logout" & @CRLF)
           $errorkod= "Модем перезагружается"
           ExitLoop
    Case  StringInStr($recv,"Logging out")>0
         $errorkod= "Модем перезагружается"
        ExitLoop
EndSwitch 
EndIf
$recv=''
WEnd
; End Message Loop
;============
If $ConnectedSocket <> - 1 Then TCPCloseSocket($ConnectedSocket)
TCPShutdown()
Return $errorkod
EndFunc ;_RestartModem
 
Автор
Medic84

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А проверять что модем возвращает только научным методом проверки MSgBox'ом?
 

beve

Осваивающий
Сообщения
104
Репутация
31
А проверять что модем возвращает только научным методом проверки MSgBox'ом?
Я на этапе отладки делал так: создал в окне елемент Edit, и каждый раз, когда значение в переменной $recv изменялось , то есть после If $recv <> "" Then это значение добавлялось (в конец) в поле edit. Таким образом можно сделать свое окно аналогичное программе "telnet" + добавить поле ввода, кнопку Отправить...что у меня раньше и было, пока я не удостоверился, что сбоев не наблюдается и все визуальное убрал и сделал Case-s для автоматической работы...
 
Верх