Вопрос такой, может конечно немного не в ту ветку, но думаю это возможно решить с помощью перечисленных в ней языков - надеюсь на это. Вобщем хочу сделать автореконект для своего модема. Успешно реконектить получаеться когда захожу на модем через командную строку на телнет (telnet 192.168.1.1) и далее выдает приглашение на ввод логина и пароля. Можно было сделать батник, но вот незнаю как с него ввести туда этот логин и пароль. Весь вопрос в том как можно зайти и выполнить там нужные комманды автоматом.
вот код на ruby, я свой так переконекчиваю Code: #!/usr/bin/ruby require 'net/telnet' def rechange_ip() telnet=Net::Telnet::new("Host" => "192.168.1.1", "Timeout" => 10,"Prompt" => /[$%#>] \z/n) telnet.login("admin", "admin") begin telnet.cmd("reboot") telnet.close rescue => e puts e end end rechange_ip
Запускаю скрипт, видно что к телнету подключилось и ввело логин, пароль возможно тоже, но он не отображаеться и далее идет таймаут 10 сек и выключаеться, а сами команды почемуто не передаються.
Все! Огромное спасибо lukmus! Сработал такой вариант: PHP: require 'net/telnet' uname = "admin" pwd = "admin" begin tn = Net::Telnet.new({"Host" => "192.168.1.1"}) { |str| print str } tn.login(uname,pwd) { |str| print str } rescue print "The username or password is incorrect. \nPlease try again ...\n\n" print "\nEnter user name : " uname = STDIN print "\nEnter password : " pwd = STDIN pwd = STDIN retry ensure tn.cmd("echo 3 > /proc/var/fyi/wan/ppp_0_1_32_1/wanup") { |str| print str } sleep 10 tn.cmd("echo 1 > /proc/var/fyi/wan/ppp_0_1_32_1/wanup") { |str| print str } tn.close() end почемуто именно с двойным вводом пароля
как делються вещи на делфях: Code: unit Unit1; interface uses Windows, Messages, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Spin, SysUtils, Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdTelnet; type TTfrmTelnetDemo = class(TForm) Memo1: TRichEdit; edtServer: TEdit; lblServer: TLabel; spnedtPort: TSpinEdit; lblPort: TLabel; btnConnect: TButton; btnDisconnect: TButton; sbrStatus: TStatusBar; Label1: TLabel; IdTelnetDemo: TIdTelnet; procedure btnConnectClick(Sender: TObject); procedure btnDisconnectClick(Sender: TObject); procedure Memo1KeyPress(Sender: TObject; var Key: Char); procedure IdTelnetDemoConnected(Sender: TObject); procedure IdTelnetDemoDataAvailable(Sender: TIdTelnet; const Buffer: string); private { Private declarations } public { Public declarations } end; var TfrmTelnetDemo: TTfrmTelnetDemo; implementation {$R *.dfm} procedure TTfrmTelnetDemo.btnConnectClick(Sender: TObject); begin IDTelnetDemo.Host := edtServer.Text; IDTelnetDemo.port := spnedtPort.Value; IdTelnetDemo.Connect; end; procedure TTfrmTelnetDemo.btnDisconnectClick(Sender: TObject); begin IdTelnetDemo.Disconnect; end; procedure TTfrmTelnetDemo.IdTelnetDemoConnected(Sender: TObject); begin sbrStatus.SimpleText := 'Connected'; end; procedure TTfrmTelnetDemo.IdTelnetDemoDataAvailable(Sender: TIdTelnet; const Buffer: string); {This routine comes directly from the ICS TNDEMO code. Thanks to Francois Piette It updates the memo control when we get data} const CR = #13; LF = #10; var Start, Stop : Integer; begin if Memo1.Lines.Count = 0 then Memo1.Lines.Add(''); Start := 1; Stop := Pos(CR, Buffer); if Stop = 0 then Stop := Length(Buffer) + 1; while Start <= Length(Buffer) do begin Memo1.Lines.Strings[Memo1.Lines.Count - 1] := Memo1.Lines.Strings[Memo1.Lines.Count - 1] + Copy(Buffer, Start, Stop - Start); if Buffer[Stop] = CR then begin Memo1.Lines.Add(''); {$IFNDEF Linux} SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1); {$ENDIF} end; Start := Stop + 1; if Start > Length(Buffer) then Break; if Buffer[Start] = LF then Start := Start + 1; Stop := Start; while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do Stop := Stop + 1; end; end; procedure TTfrmTelnetDemo.Memo1KeyPress(Sender: TObject; var Key: Char); begin {we simply send the key stroke to the server. It may echo it back to us} if IdTelnetDemo.Connected then IdTelnetDemo.SendCh(Key); Key := #0; end; end. Тут конечно не происходит перезагрузка, но не составить труда переделать под свои нужды...