Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как автоматом войти в телнет? (https://forum.antichat.xyz/showthread.php?t=201498)

monz 04.05.2010 03:07

Как автоматом войти в телнет?
 
Вопрос такой, может конечно немного не в ту ветку, но думаю это возможно решить с помощью перечисленных в ней языков - надеюсь на это.
Вобщем хочу сделать автореконект для своего модема.
Успешно реконектить получаеться когда захожу на модем через командную строку на телнет (telnet 192.168.1.1) и далее выдает приглашение на ввод логина и пароля. Можно было сделать батник, но вот незнаю как с него ввести туда этот логин и пароль. Весь вопрос в том как можно зайти и выполнить там нужные комманды автоматом.

lukmus 04.05.2010 03:43

вот код на ruby, я свой так переконекчиваю
Код:

#!/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


monz 04.05.2010 13:38

Запускаю скрипт, видно что к телнету подключилось и ввело логин, пароль возможно тоже, но он не отображаеться и далее идет таймаут 10 сек и выключаеться, а сами команды почемуто не передаються.

monz 04.05.2010 16:50

Все! Огромное спасибо 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 

почемуто именно с двойным вводом пароля

BukTop. 16.05.2010 21:59

как делються вещи на делфях:
Код:

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.

Тут конечно не происходит перезагрузка, но не составить труда переделать под свои нужды...


Время: 05:59