Что нового

[Сеть, интернет] Автоматизация telnet

G.FREEMAN

Новичок
Сообщения
13
Репутация
0
Привет всем :smile: Не могу придумать, как реализовать такую идею:
1. Форма
1.1 Вводим необходимое количество IP адресов
1.2 Вводим логин/пароль учетки
1.3 Вводим административный пароль
1.4 Вводим необходимые команды, которые надо массово набирать по вышеуказанным IP адресам.
2. Нажимаем запуск, софтина коннектится по адресам, что были указаны ранее, вводит учетку, пароль, потом вводит административный пароль и начинает работать с девайсом. Вот у меня ничего в голову не приходит, в плане реализации, кроме как send :( С переменными как работать пока не изучал, autoit знаю на примитивном уровне. Реализовал только полный примитив, то что надо он делает, но хотелось бы какой то GUI прикрутить минимальный..
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
G.FREEMAN
все было бы проще, если MS Telnet отдавал свой стандартный поток, но нет. поэтому вижу единственный путь скрытое окно консоли и там передавать все команды через
Код:
Opt('WinTitleMatchMode', 2)
ControlSend('telnet', '', '', 'your command')
 
Автор
G

G.FREEMAN

Новичок
Сообщения
13
Репутация
0
Я то пошел по-простому пути :smile:
Код:
Run("cmd.exe")
Sleep(1000)
Send("telnet 10.7.1.1")
Send("{ENTER}")
Sleep(1000)
Send("имя_учетки")
Send("{ENTER}")
Send("пароль")
Send("{ENTER}")
Send("команда_входа_в_привилегированный_режим")
Send("{ENTER}")
Send("пароль_суперюзер")
Send("{ENTER}")
;Далее команды пока не станет совсем хорошо :)

Просто вопрос, возможно ли сделать хоть какой нибудь message box, где можно будет ввести несколько ip адресов, учетку и пароль к ней, пароль суперпользователя и это привязать потом переменными... Не хотелось бы в коде хранить учетные данные
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
G.FREEMAN
Код:
$someparam = InputBox('Some title', 'Some text')
 
Автор
G

G.FREEMAN

Новичок
Сообщения
13
Репутация
0
Kaster сказал(а):
G.FREEMAN
Код:
$someparam = InputBox('Some title', 'Some text')
Спасибо, буду пробовать!


Добавлено:
Сообщение автоматически объединено:

Получилось. Но как быть, когда надо зайти на 15 разных IP адресов, и ввести там одинаковые уч.данные и вообще, одинаковые команды ? Т.е. нужно изначально ввести те самые 15 (или более) адресов для работы...
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Для таких целей лучше подойдет Secure CRT - он умеет работать со скриптами на VB и perl, правда платный ;)
Ну есть у меня старая поделка одна - поковыряй на досуге =)
Код:
Opt("TrayIconDebug", 1)
Opt("TCPTimeout", 300)
Opt("GUICloseOnESC", 0)
Opt("GUIOnEventMode",1)

#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

$SW = GuiCreate("Connect", 235, 110, @DesktopWidth/2-125, @DesktopHeight/2-75, BitOR($WS_BORDER, $WS_POPUP))
$startIP = GuiCtrlCreateInput("", 15, 35, 200, 21)
$label_1 = GUICtrlCreateLabel("Enter IP-address:", 15, 10, 100, 20)
$connectbutton = GUICtrlCreateButton("Connect", 15, 65, 80, 30, $BS_DEFPUSHBUTTON + $BS_FLAT)
$quitbutton = GUICtrlCreateButton("Quit", 135, 65, 80, 30, $BS_FLAT)
$guidragcontrol = GUICtrlCreatePic("", 0, 0, 235, 110, -1, $GUI_WS_EX_PARENTDRAG)

$TW = GUICreate(" a small telnet (=", 1000, 600, @DesktopWidth/2-500, @DesktopHeight/2-300, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_SYSMENU))
GUISetIcon(@SystemDir & "\cmd.exe")
$input = GUICtrlCreateInput("", 5, 570, 990, 25, -1, $WS_EX_STATICEDGE)
GUICtrlSetFont($input, 16, 800, 0, "Courier New")
$output = GUICtrlCreateEdit("", 5, 5, 990, 560, BitOR($ES_AUTOHSCROLL, $ES_AUTOVSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL), $WS_EX_STATICEDGE)
GUICtrlSetFont($output, 16, 800, 0, "Courier New")
GUICtrlSetBkColor($output, 0xFFFFFF)
GUISetState(@SW_SHOW, $TW)
GUISetState(@SW_DISABLE, $TW)
GUISetState(@SW_SHOW, $SW)

GUISetOnEvent($GUI_EVENT_CLOSE, "QuitTW", $TW)
GUICtrlSetOnEvent($connectbutton, "Connect")
GUICtrlSetOnEvent($quitbutton, "QuitSW")

Func Connect()
	$ip = GUICtrlRead($startIP)
	$syntax = StringRegExp($ip, "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z)")
	If $syntax = 0 Then
		MsgBox(0x40000, "Syntax Error", "IP incorrect")
	Else
		GUISetState(@SW_ENABLE, $TW)
		GUISetState(@SW_HIDE, $SW)
		GUICtrlSetState($input, $GUI_FOCUS)
		TCPStartup()
		$socket = TCPConnect($ip, 23)
		Sleep(250)
		$stream = TCPRecv($socket, 100000)
		GUICtrlSetData($output, GUICtrlRead($output) & $stream)
;~ 		TCPSend($socket, "user" & @CRLF)
;~ 		Sleep(100)
;~ 		$stream = TCPRecv($socket, 100000)
;~ 		GUICtrlSetData($output, GUICtrlRead($output) & $stream)
;~ 		TCPSend($socket, "pass" & @CRLF)
;~ 		Sleep(100)
;~ 		$stream = TCPRecv($socket, 100000)
;~ 		GUICtrlSetData($output, GUICtrlRead($output) & $stream)
;~ 		TCPSend($socket, "command" & @CRLF)
;~ 		Sleep(100)
;~ 		$stream = TCPRecv($socket, 100000)
;~ 		GUICtrlSetData($output, GUICtrlRead($output) & $stream)
		TCPCloseSocket($socket)
		TCPShutdown()
		Sleep(3000)
		GUISetState(@SW_DISABLE, $TW)
		GUICtrlSetState($input, $GUI_FOCUS)
		GUICtrlSetData($input, "")
		GUICtrlSetData($output, "")
		GUISetState(@SW_SHOW, $SW)
	EndIf
EndFunc

Func QuitTW()
	GUISetState(@SW_DISABLE, $TW)
	$ask = MsgBox(0x40004, "Quit", "Leaving?")
	If $ask = 6 Then
		Exit
	Else
		GUISetState(@SW_ENABLE, $TW)
		GUISetState(@SW_RESTORE, $TW)
	EndIf
EndFunc

Func QuitSW()
	GUISetState(@SW_DISABLE, $SW)
	$ask = MsgBox(0x40004, "Quit", "Leaving?")
	If $ask = 6 Then
		Exit
	Else
		GUISetState(@SW_ENABLE, $SW)
		GUISetState(@SW_RESTORE, $SW)
	EndIf
EndFunc

While 1
	Sleep(500)
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
G.FREEMAN
если по топорному, то вставляешь эти самые 15 InputBox присвоив значение каждой в отдельную переменную. если совсем капельку модифицировать, то сделать это в цикле. ну а если еще дальше, то создать файл, оптимальнее всего ini, с отдельными секциями для IP и комманд и считывать оттуда все нужные ключи. и слать команды все же через ControlSend, он по надежности чуть выше чем просто Send, хотя тоже на ахти, но самое главное позволяет держать окно свернутым или скрытым.
читай справку на темы
Код:
IniRead
For To Next ;or
While WEnd
ControlSend
WinTitleMacthMode
 
Автор
G

G.FREEMAN

Новичок
Сообщения
13
Репутация
0
Kaster сказал(а):
G.FREEMAN
если по топорному, то вставляешь эти самые 15 InputBox присвоив значение каждой в отдельную переменную. если совсем капельку модифицировать, то сделать это в цикле.
Знал бы я еще, как это сделать :laugh:
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
G.FREEMAN
Можено сделать GUI (GUICreate) коно, в нем Edit (GUICtrlCreateEdit), в него ввести ip-ы, через Enter, например.
Считывание из Edit через (GUICtrlRead). Т.к. ip-ы в списке через новую строку, то разделить (StringSplit) по @LF. А далее в цикле (While) отправлять данные.

В справке есть примеры на все функции.
Дерзайте, пробуйте, показывайте. А тут уж подправят.
 
Верх