Работа с сетью (программная перезагрузка модема)

  • Автор темы MODERN
  • Дата начала
MODERN
Участник
Сообщения
756
Реакции
130
Данный пример показывает, как можно перезагрузить модем марки D-Link.

С помощью подобной штуки я долго троллил админов в местном интернет-кафе :)

Указание.

На форме расположите компоненты IdHTTPClient (находится на вкладке IndyClients), IdCookieManager иIdAntiFreeze (на вкладке IndyMisc), а также два контрола Edit и две кнопки.

Один из Edit-ов переименуем в Username, второй - в Password. По нажатию Button1 мы залогиниваемся на странице конфигурации модема, по нажатию второй кнопки - перезагружаем его. По умолчанию почти во всех модемах пароль и логин - слово "admin". Вместо 192.168.1.1 можно подставить адрес удаленного компьютера (IP), если он вам известен, однако такое развлечение может повлечь санкции со стороны провайдера - не стоит экспериментировать и искать приключения на свою попку.

Код:
Unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdCookieManager, IdAntiFreezeBase, IdAntiFreeze,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,IdUri;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    IdCookieManager1: TIdCookieManager;
    Button1: TButton;
    username: TEdit;
    password: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  autorized:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
{Авторизация. Работает данный код только на модемах ADSL D-Link}
var
  postdata,urilist:tstringlist;
  URI:tiduri;
  temp:string;
  requeststr:string;
  login,passw:string;
begin
  login:=trim(username.Text);
  passw:=trim(password.Text);
  if (trim(login)='') or (trim(passw)='') then abort;
  autorized:=false;
  postdata:=tstringlist.Create;
  urilist:=tstringlist.Create;
  requeststr:='http://192.168.1.1/index.cgi';
  uri:=tiduri.Create(requeststr);
  try
    postdata.Add('v2=y');
    postdata.Add('rs_type=html');
    postdata.Add(format('A1=%s',[login]));
    postdata.Add(format('A2=%s',[password]));
    postdata.Add('auth=auth');
    urilist.Add('cookie_lang=rus');
    urilist.Add(format('client_login=%s',[login]));
    urilist.Add(format('client_password=%s',[passw]));
    try
      idhttp1.Get(requeststr);
    except
      idhttp1.Disconnect;
      caption:='Error';
    end;
    idhttp1.Request.Host:='192.168.1.1';
    idhttp1.Request.Referer:='http://192.168.1.1/';
    idhttp1.CookieManager.AddServerCookies(urilist,uri);
    try
      temp:=idhttp1.post(requeststr,postdata);
    except
      idhttp1.Disconnect;
      caption:='Error';
    end;
    if pos('type="password" maxlength="30"',temp)    begin
      autorized:=true;
      caption:='Success'
    end
    else
    caption:='Unautorized';
  finally
    urilist.Free;
    postdata.Free;
  end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  autorized:=false;
  with idhttp1 do
  begin
    handleredirects:=true;
    readtimeout:=10000;
    connectiontimeout:=10000;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //перезагрузка модема...
  if autorized then
  idhttp1.get('/index.cgi?res_cmd=6&res_buf=null&res_cmd_type=nbl&v2=y&rq=y');
end;

end.
 
Сверху