Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Компьютерное железо
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 19:17   #31
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Вот пример, соединяющийся с модемом, передающий логин и пароль и отправляющий команду ping

Код:
InitNetwork()

Procedure.s SendModemData(Connect, Command.s)
Protected Result.s="", Count=0, x
 Command=Command+Chr(13)+Chr(10)
 SendNetworkData(Connect, @Command, Len(Command))
 Repeat
   Delay(20)
   If NetworkClientEvent(Connect)=#PB_NetworkEvent_Data
      *mem=AllocateMemory(10000)
        If *mem
          ReceiveNetworkData(Connect,*mem,10000)
          In.s=PeekS(*mem)
          FreeMemory(*mem)
          Result=Result+In
        EndIf
   EndIf
   Count+1
 Until Count>=20
ProcedureReturn Result
EndProcedure


Procedure ModemConnect(IP_Address.s, Login.s, Password.s)

Connect=OpenNetworkConnection(IP_Address, 23)
If Connect

  Delay(50)
  SendModemData(Connect, Login)
  SendModemData(Connect, Password)
  x.s=SendModemData(Connect, "ping")
  
  If FindString(LCase(x),"login",1) Or FindString(LCase(x),"password",1)
    MessageRequester("", "Неправильный логин или пароль!", #MB_OK|#MB_ICONERROR)
  Else
    MessageRequester("Команда ping", x)
  EndIf
  
  CloseNetworkConnection(Connect)
  
Else
  MessageRequester("", "Нет связи с модемом", #MB_OK|#MB_ICONERROR)
EndIf
EndProcedure

ModemConnect("192.168.1.1", "admin", "admin")
Скомпилированая прога в архиве
Вложения
Тип файла: rar ADSL.rar (3.8 Кб, 43 просмотров)

Последний раз редактировалось *PB*; 03.12.2009 в 19:46.
*PB* вне форума Ответить с цитированием
Старый 04.12.2009, 13:16   #32
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

*PB*? спасибо большое, но если честно, я пока еще до такого кода не дорос, мне не хватает мозгов, чтобы понять его.

У меня случилась другая беда, вчера вроде все нормально работало, не хватало только проверки правильности пароля, а сегодня сел ничего не пашет! Во беда! Начал писать все сначала начиная с книжки, которую посоветовал raxp
Цитата:
М.Фленов Программирование в Дельфи глазами хакера
Вот полный код
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdTelnet, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    IdTelnet1: TIdTelnet;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure IdTelnet1Connected(Sender: TObject);
    procedure IdTelnet1DataAvailable(Sender: TIdTelnet;
      const Buffer: String);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
IdTelnet1.Terminal:='VT100';
IDTelnet1.Host := '192.168.1.1';
IDTelnet1.port := 23;
IdTelnet1.Connect;
end;

procedure TForm1.IdTelnet1Connected(Sender: TObject);
begin
Memo1.Lines.Add('Êëèåíò ïîäêëþ÷åí!');
Memo1.Lines.Add ('Ìîæåòå âûïîëíÿòü êîìàíäû!');
Memo1.Lines.Add('') ;
end;

procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);

  var
str :string;
begin
if Length(Buffer)>0
  then begin
                str:=StringReplace(Buffer,#13#10#13,#13#10,[rfReplaceAll, rfIgnoreCase]);
                str:=StringReplace(str,#13#10#13#10#10#13,#13#10#13#10,[rfReplaceAll, rfIgnoreCase]);
                Memo1.Lines.Add(str);
           end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
IdTelnet1.SendCmd('admin');
sleep(100);
IdTelnet1.SendCmd('reboot');
end;

end.
Нажимаю button1, конектиться к модему, запрашивая логин, нажимаю button2, чтобы отправить логин и пароль, программа зависает наглухо, подскажите где я накосячил.
tarakan1983 вне форума Ответить с цитированием
Старый 04.12.2009, 13:34   #33
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Цитата:
но если честно, я пока еще до такого кода не дорос, мне не хватает мозгов, чтобы понять его.
А там всё довольно просто.
Функция OpenNetworkConnection создаёт инет-клиента, который коннектится с модемом используя IP 192.168.1.1 и 23 порт, по протоколу TCP.
Модем в данном случае является сервером.

В случае удачи, в переменной Connect будет идентификатор соединения.
Далее, трижды вызывается процедура SendModemData, в которой отправляется строка текста.
Эта процедура передаёт логин, пароль, и команду "ping" модему и пытается получить от него ответ.
Вот и всё.
Что собственно непонятно.

Последний раз редактировалось *PB*; 04.12.2009 в 17:54.
*PB* вне форума Ответить с цитированием
Старый 04.12.2009, 13:45   #34
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от *PB* Посмотреть сообщение
Что собственно непонятно.
см. аватар

*PB*, а это я так понимаю не код делфи?
tarakan1983 вне форума Ответить с цитированием
Старый 04.12.2009, 14:12   #35
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Цитата:
*PB*, а это я так понимаю не код делфи?
Нет, это не дельфи, а PureBasic.
*PB* вне форума Ответить с цитированием
Старый 04.12.2009, 17:56   #36
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Цитата:
нажимаю button2, чтобы отправить логин и пароль, программа зависает наглухо, подскажите где я накосячил
Отправляешь только логин, а пароль где?

Попробуй так
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
IdTelnet1.SendCmd('admin');
sleep(400);
IdTelnet1.SendCmd('admin');
sleep(400);
IdTelnet1.SendCmd('reboot');
end
*PB* вне форума Ответить с цитированием
Старый 04.12.2009, 18:05   #37
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от *PB* Посмотреть сообщение
Отправляешь только логин, а пароль где?

Попробуй так
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
IdTelnet1.SendCmd('admin');
sleep(400);
IdTelnet1.SendCmd('admin');
sleep(400);
IdTelnet1.SendCmd('reboot');
end
Login - admin, пароль - admin
команда .SendCmd отправляет в консоль 'admin' и предусматривает нажатие #13 затем опять 'admin'.
Пробовал, тоже самое. Отладчик показывает, что виснет на втором вводе 'admin'. Просто курсор там останавливается и все, никаких ошибок, ничего!
tarakan1983 вне форума Ответить с цитированием
Старый 04.12.2009, 18:11   #38
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Так что, компонент IdTelnet использует telnet.exe из винды?
*PB* вне форума Ответить с цитированием
Старый 04.12.2009, 18:13   #39
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Я так понял, что да, просто он консоль не отображает, я все вывожу в memo
tarakan1983 вне форума Ответить с цитированием
Старый 04.12.2009, 18:21   #40
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

А зачем в данном случае использовать телнет, если можно создать инет-клинета?
По крайней мере так всё работает - связь с модемом есть и он выполняет команды.
*PB* вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для управления ADSL модемом Blade Общие вопросы C/C++ 1 07.08.2009 23:16
Настройки приватности для пользователей Hobbit_88 БД в Delphi 10 27.05.2009 11:58
API для контроллера AC-link asv Win Api 2 08.11.2008 09:29
Прога для настройки! winXpSpeed Altera Софт 2 31.03.2008 23:20
Программа сохраняющая настройки громкости - нужна. rn3qlk Помощь студентам 8 01.02.2008 13:33