PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Программирование на PureBasic » Работа с модемом "D-Link DSL-2500U" с помощью протокола "telnet"


Работа с модемом "D-Link DSL-2500U" с помощью протокола "telnet"

Сообщений 1 страница 8 из 8

1

Многие модемы можно настраивать с помощью утилиты "Telnet.exe" (или подобной), входящей в состав операционной системы Windows.
Протокол обмена информацией, используемый этой утилитой, довольно простой.
При работе с модемом, достаточно лишь создать интернет-клиента, который будет подключатся к серверу (в нашем случае это модем) через 23 порт.
Как это сделать покажу на примере этого кода

Код:
InitNetwork() ; Инициализация библиотеки функций, работающей и инетом и локальной сетью

Procedure.s SendModemData(Connect, Command.s) ; Процедура, передающая команду модему и получающая от него ответ
Protected Result.s="", Count=0
 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>=40
ProcedureReturn Result
EndProcedure



Connect=OpenNetworkConnection("192.168.1.1", 23) ; Установка связи с модемом D-Link DSL-2500U
If Connect
  Delay(50)
  SendModemData(Connect, "admin") ; Логин доступа к модему
  SendModemData(Connect, "admin") ; Пароль доступа к модему
  Delay(400)
  SendModemData(Connect, "reboot") ; Перезагрузка модема
  Delay(1000)
  CloseNetworkConnection(Connect) ; Разрыв связи с модемом
Else
  MessageRequester("", "Нет связи с модемом")
EndIf

Эта программа создаёт интернет-клиента (функция OpenNetworkConnection) и устанавливает связь с модемом используя его IP адрес 192.168.1.1 и 23 порт.
Затем, модему передаются логин и пароль доступа к его настройкам.
После чего, модем перезагружается с помощью команды reboot.

Данный код является кроссплатформенным, работающим на всех платформах, которые поддерживает PureBasic (Windows, Linux, MacOS X и т. д.).

0

2

А можно ли так работать с обычными модемами?
Например создать соединение двух Dial-Up модемов и передать по ним файл?

0

3

Эта программа расчитана на работу с ADSL модемами.

Если соединить 2 Dial-Up модема через телефонную линию, то теоритически с их помощью можно передать файл с одного компьютера на другой.

0

4

Меня интересует как с помощью телнета или подобного взять информацию о подключенных к роутеру DSL-2640U/BRU/C компьютерах через командную строку для периодического мониторинга. Верно это отображается на страничке
http://192.168.1.1/arpview.cmd
веб интерфейса. Команды типа net view или arp -a через ком строку часто ошибаются, так как к роутеру подключены компы разных рабочих групп.

0

5

Думаю что об этом лучше спросить  на оф. форуме D-Link http://forum.dlink.ru/viewforum.php?f=6 … 83bded272e

0

6

Устал , не получается.
Разобрался как подсоединится.
Удалить профиль.
А создать профиль - выдает ошибку ( иногда создает не рабочий профиль, а в основном пишет в редакторе error )
И справка не помогает..

Код:
log.s=""
pas.s=""
vpi=1 
vci=32

Enumeration 
 #Window_0 
 #console_2 
 #Font_console_2 
EndEnumeration

InitNetwork()
Global Connect

Procedure.s SendModemData(Connect, Command.s) ; Процедура, передающая команду модему и получающая от него ответ
 Result_SendModemData.s=""
 Count=0
 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_SendModemData=Result_SendModemData+In
        EndIf
   EndIf
   Count+1
 Until Count>=80
ProcedureReturn Result_SendModemData
EndProcedure

Procedure Modem_Open(IP_Address.s, Login.s, Password.s)
Protected Result=0
; >0 - Всё ОК. Результат это идентификатор связи
;  0 - Нет связи с модемом
; -1 - модем не ответил
; -2 - Неправильный логин или пароль

  Connect=OpenNetworkConnection(IP_Address, 23) ; Установка связи с модемом
 
   AddGadgetItem(#console_2,-1, "IP адрес модема:  "+IP_Address.s+Chr(10)+Chr(10))
  
  If Connect=0
    AddGadgetItem(#console_2,-1, "Подключение потерпело неудачу"+Chr(10)+"--------------------------------------------"+Chr(10)+Chr(10))
  EndIf
  
  If Connect
    Result=Connect
    Delay(100)
    
    res.s=SendModemData(Connect, Login) ; Логин доступа к модему
    res=Mid(res, 22)+"admin"
    ;res=ReplaceString(res,Chr(10), Chr(10)+Chr(10),0)
    AddGadgetItem(#console_2,-1,res)
    SendModemData(Connect, Password) ; Пароль доступа к модему
 
    Delay(400)
    Out.s=SendModemData(Connect, "ping")
    AddGadgetItem(#console_2,-1, Chr(10)+Chr(10)+Out)

    If Out=""
      CloseNetworkConnection(Connect)
      AddGadgetItem(#console_2,-1, "модем не ответил"+Chr(10)+"--------------------------------------------"+Chr(10)+Chr(10))
      Result=-1
    ElseIf FindString(LCase(Out),"login",1) Or FindString(LCase(Out),"password",1)
      AddGadgetItem(#console_2,-1, "Неправильный логин или пароль"+Chr(10)+"--------------------------------------------"+Chr(10)+Chr(10))
      CloseNetworkConnection(Connect)
      Result=-2
    EndIf
 
  EndIf
 ;------------прокручивание редактора------------------------------------
    Range.CHARRANGE 
    Range\cpMin = -1 
    Range\cpMax = -1
  SendMessage_(GadgetID(#console_2),#EM_EXSETSEL,0,Range) 
  
ProcedureReturn Result
EndProcedure

Procedure Profile_Info(xx)
 IP.s=GetGadgetText(3)
 Connect=Modem_Open(IP, "admin", "admin")
 
    If Connect<>0
     Otvet.s=SendModemData(Connect,"wan show")
     AddGadgetItem(#console_2,-1,Chr(10)+"*********************************************************************************************************************************"+Chr(10)+Otvet.s+Chr(10)+"*********************************************************************************************************************************"+Chr(10))
    EndIf
  DisableGadget(7,0)
  DisableGadget(5,0)
  DisableGadget(4,0)
EndProcedure

Procedure WAN_Add_Router_Inet(Connect, port, vpi, vci, Login.s, Pas.s)
  Protected PVC.s, Command.s, Otvet.s

  
; Создание профиля формата "Роутер" для сети Интернет. При успешном создании профиля, результат 1, в протичном случае - 0
  PVC=Str(port)+"."+Str(vpi)+"."+Str(vci)

  Delay(400)
  Command="wan config "+PVC+" --protocol pppoe --username "+Login+" --password "+Pas+" --pppipextension enable"+Chr(13)+Chr(10) 
  Otvet=SendModemData(Connect, Command)
  Delay(400)
  AddGadgetItem(#console_2,-1,Chr(10)+"*********************************************************************************************************************************"+Chr(10)+Otvet.s+Chr(10)+"*********************************************************************************************************************************"+Chr(10))
  
  
   Command.s="save"
   Otvet.s=SendModemData(Connect, Command)
   AddGadgetItem(#console_2,-1,Chr(10)+"*********************"+Chr(10)+Otvet.s)
          

         
   ;Command.s="reboot"+Chr(13)+Chr(10)
   ;Otvet.s=SendModemData(Connect, Command)
   ;AddGadgetItem(#console_2,-1,Chr(10)+Otvet.s+Chr(10)+"*********************"+Chr(10))
   ;------------прокручивание редактора------------------------------------
    Range.CHARRANGE 
    Range\cpMin = -1 
    Range\cpMax = -1
  SendMessage_(GadgetID(#console_2),#EM_EXSETSEL,0,Range) 
  
ProcedureReturn 1
EndProcedure


If OpenWindow(#Window_0,0,0, 606, 440, "Modem Connection", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  
  EditorGadget(#console_2, 3, 60, 600, 370) 
   SetGadgetFont(#console_2, LoadFont(#Font_console_2, "Lucida Console", 8, #PB_Font_HighQuality)) 
   SetGadgetColor(#console_2, #PB_Gadget_FrontColor, $40FF00)
   SetGadgetColor(#console_2, #PB_Gadget_BackColor, $0) 
   
  ButtonGadget(8, 10, 10, 150, 25, "Проверить соединение") 
  IPAddressGadget(3, 180, 12, 110, 20)
  SetGadgetState(3,MakeIPAddress(192,168,1,1)) 
  
  ButtonGadget(7, 310, 10, 70, 25, "Удалить"):DisableGadget(7,1)
  ButtonGadget(5, 400, 10, 70, 25, "Создать"):DisableGadget(5,1) 
  ButtonGadget(4, 490, 10, 70, 25, "Справка"):DisableGadget(4,1) 
EndIf 


 
 
 
  Repeat 
  Event =  WaitWindowEvent() 
  Window = EventWindow() 
  Gadget = EventGadget()
    Select Event
      Case #PB_Event_CloseWindow
       If Connect<>0
         CloseNetworkConnection(Connect)
        EndIf
       Break
     Case #PB_Event_Gadget
      Select EventGadget()
       Case 8
        If Connect<>0
         CloseNetworkConnection(Connect)
        EndIf
         Thread=CreateThread(@Profile_Info(),0)
       Case 7 ;  удалить
         
        If Connect<>0
           
          PVC.s="0.1.32"
          Command.s="wan delete "+PVC ; удалить 
          Otvet.s=SendModemData(Connect,Command)
          AddGadgetItem(#console_2,-1,Chr(10)+"*********************"+Chr(10)+Otvet.s)
          
          
          Command.s="save"
          Otvet.s=SendModemData(Connect, Command)
          AddGadgetItem(#console_2,-1,Chr(10)+"*********************"+Chr(10)+Otvet.s)
          

         
         ;Command.s="reboot"+Chr(13)+Chr(10)
         ;Otvet.s=SendModemData(Connect, Command)
         ;AddGadgetItem(#console_2,-1,Chr(10)+Otvet.s+Chr(10)+"*********************"+Chr(10))
          ;------------прокручивание редактора------------------------------------
           Range.CHARRANGE 
           Range\cpMin = -1 
           Range\cpMax = -1
           SendMessage_(GadgetID(#console_2),#EM_EXSETSEL,0,Range) 
       EndIf
     Case 5 ; создать профиль
      If Connect<>0 
       WAN_Add_Router_Inet(Connect, 0, vpi, vci, log, pas)
      EndIf 
     Case 4   ; помощь
      If Connect<>0 
        Command.s="wan --help"
        Otvet.s=SendModemData(Connect, Command)
        AddGadgetItem(#console_2,-1,Chr(10)+"*********************"+Chr(10)+Otvet.s)
           Range.CHARRANGE 
           Range\cpMin = -1 
           Range\cpMax = -1
           SendMessage_(GadgetID(#console_2),#EM_EXSETSEL,0,Range) 
      EndIf
    EndSelect  
   EndSelect 
  ForEver

Наверное надо оставить до лучших времен.

0

7

как задать скорость канала между модемом и тв-приставкой через телнет

0

8

Этот модем не поддерживает изменение скорости по LAN портам.

0


Вы здесь » PureBasic - форум » Программирование на PureBasic » Работа с модемом "D-Link DSL-2500U" с помощью протокола "telnet"