Как на CW10 работать с SNMP ? (или вообще с сетью)

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
SuperMax
Посетитель
Сообщения: 47
Зарегистрирован: 25 Август 2015, 3:22
Поблагодарили: 2 раза

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение SuperMax »

Коллеги!

сейчас встала задача быстро написать виндовое приложение работающее с железками по SNMP
тк я давно не "кларионил" (в начале 90х много писал на Кларионе 2.1; потом немного писал на CW5/6) то определенно не в курсе новинок, а время поджимает.
подскажите куда копать/где что читать ?
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение Admin »

Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
SuperMax
Посетитель
Сообщения: 47
Зарегистрирован: 25 Август 2015, 3:22
Поблагодарили: 2 раза

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение SuperMax »

спасибо!
совсем забыл - поддержка winapi еще же в 2.0 появилась
остается вспомнить как это делать ;-)
Аватара пользователя
morkovin
Ветеран
Сообщения: 909
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение morkovin »

WBR, morkovin
vd-vuf
Бывалый
Сообщения: 61
Зарегистрирован: 12 Декабрь 2008, 12:09
Откуда: Верхний Уфалей
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение vd-vuf »

Во вложении шаблон с сырцами.
Писал для себя комментариев там нет.
Чистого примера использования у меня нет а с приложениями в купе еще куча шаблонов.
Если поможет, могу какую нидь вырезку из сырцов показать.
Вложения
snmp.zip
(8.86 КБ) 149 скачиваний
SuperMax
Посетитель
Сообщения: 47
Зарегистрирован: 25 Август 2015, 3:22
Поблагодарили: 2 раза

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение SuperMax »

vd-vuf писал(а):Во вложении шаблон с сырцами.
Писал для себя комментариев там нет.
Чистого примера использования у меня нет а с приложениями в купе еще куча шаблонов.
Если поможет, могу какую нидь вырезку из сырцов показать.
Круто! огромное спасибо! буду разбираться
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение Admin »

SuperMax писал(а):Круто! огромное спасибо! буду разбираться
Сюда же, почитать http://www.k-max.name/linux/snmp-protocol/
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
vd-vuf
Бывалый
Сообщения: 61
Зарегистрирован: 12 Декабрь 2008, 12:09
Откуда: Верхний Уфалей
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение vd-vuf »

Нашел более менее прозрачный код.
Что бы не сбить с толку, код здесь как есть, только кое где добавил комментарии

Код: Выделить всё

ReqSNMPSystem        PROCEDURE  (STRING IP,  LONG SWID, LONG MODID, STRING Comm) ! Declare Procedure
Window WINDOW('WGetSNMP'),AT(,,131,60),FONT('MS Sans Serif',8,,FONT:regular),IMM,SYSTEM,GRAY,DOUBLE,MDI
       BUTTON('&OK'),AT(53,43,35,14),USE(?OkButton),LEFT,DEFAULT
     END

SNMPRequestOids             SNMPRequestOidsType ! Рабочая Очередь, использую для однотипности кода, 
                                        ! конкретно здесь она заполняется из объявленных переменных

MIBsysDescr     STRING('.1.3.6.1.2.1.1.1')
MIBsysUpTime    STRING('.1.3.6.1.2.1.1.3')
MIBsysContact   STRING('.1.3.6.1.2.1.1.4')
MIBsysName      STRING('.1.3.6.1.2.1.1.5')
MIBsysLocation  STRING('.1.3.6.1.2.1.1.6')


LocResults        QUEUE	! Очередь для обмена инфой с классом GetSNMPClass
Id_Descr            LONG
ResultQueue         &SNMPResultQueueType
                  END
SNMP              GetSNMPClass ! Объявляем класс

SWI_ID            LONG
Loc:Count         LONG
LocIdx            LONG
FilesOpened     BYTE(0)

  CODE
  OPEN(Window)
  DISPLAY
  DO OpenFiles

  !Заполняем рабочую очередь
  FREE(SNMPRequestOids)
  SNMPRequestOids.Id    = 1
  SNMPRequestOids.Cnv   = 1
  SNMPRequestOids.NameOID = 'sysDescr'
  SNMPRequestOids.Oid   = MIBsysDescr
  ADD(SNMPRequestOids)
  SNMPRequestOids.Id    = 2
  SNMPRequestOids.Cnv   = 1
  SNMPRequestOids.NameOID = 'sysName'
  SNMPRequestOids.Oid   = MIBsysName
  ADD(SNMPRequestOids)
  SNMPRequestOids.Id    = 3
  SNMPRequestOids.Cnv   = 1
  SNMPRequestOids.NameOID = 'sysContact'
  SNMPRequestOids.Oid   = MIBsysContact
  ADD(SNMPRequestOids)
  SNMPRequestOids.Id    = 4
  SNMPRequestOids.Cnv   = 1
  SNMPRequestOids.NameOID = 'sysLocation'
  SNMPRequestOids.Oid   = MIBsysLocation
  ADD(SNMPRequestOids)
  SNMPRequestOids.Id    = 5
  SNMPRequestOids.Cnv   = 5
  SNMPRequestOids.NameOID = 'sysUpTime'
  SNMPRequestOids.Oid   = MIBsysUpTime
  ADD(SNMPRequestOids)

  SWI_ID = SWID

  ACCEPT
    CASE EVENT()
    OF EVENT:OpenWindow
      SNMP.Init(IP,comm)  ! Инициализация класса, подаем ему IP адрес и Community, обычно оно = 'public' 
      ! Заполняем очередь для обмена с SNMP, хранения полученного результата и походу запрашиваем инфу с SNMP
      LOOP Loc:Count = 1 TO RECORDS(SNMPRequestOids)
        GET(SNMPRequestOids,Loc:Count)
        LocResults.Id_Descr = SNMPRequestOids.Id
        LocResults.ResultQueue &= NEW(SNMPResultQueueType)
        ADD(LocResults)
        SNMP.Run(SNMPRequestOids.Cnv, SNMPRequestOids.NameOID, SNMPRequestOids.Oid, LocResults.ResultQueue)
      END
      SNMP.Kill ! прощаемся с классом
      BREAK
    END
  END
  FREE(SNMPRequestOids)
  ! Здесь у меня полученный результат записывается в таблицу и в лог файл, и по ходу очищается очередь
  SWI:ID = SWI_ID
  GET(Switch,SWI:BY_ID)
  IF NOT ERRORCODE()
    CLEAR(SWI:SystemInfo)
    LOOP i# = 1 TO RECORDS(LocResults)
      LocResults.Id_Descr = i#
      GET(LocResults,LocResults.Id_Descr)
      IF NOT ERRORCODE()
        LOOP LocIdx = 1 TO RECORDS(LocResults.ResultQueue)
          GET(LocResults.ResultQueue,1)
          IF NOT(LocResults.ResultQueue.Value &= NULL)
            IF i# = 5          
              SWI:SystemUpTime = '||' & LocResults.ResultQueue.Value
              SaveLog('RS', IP & ' ' & SWI:SystemUpTime)
              DISPOSE(LocResults.ResultQueue.Value)
            ELSE
              SWI:SystemInfo = CLIP(SWI:SystemInfo) & '||' & LocResults.ResultQueue.Value
              SaveLog('RS', IP & ' ' & SWI:SystemInfo)
              DISPOSE(LocResults.ResultQueue.Value)
            END
          END
          IF NOT(LocResults.ResultQueue.Oid &= NULL)
            DISPOSE(LocResults.ResultQueue.Oid)
          END
          DELETE(LocResults.ResultQueue)
        END
        FREE(LocResults.ResultQueue)
        DISPOSE(LocResults.ResultQueue)
        DELETE(LocResults)
      END
    END
    PUT(Switch)
    IF ERRORCODE()
       SaveLog('RS', IP & ' ERROR ' & ERROR())
    END  
    SaveLog('RS', IP & ' --- ' & SWI:SystemInfo)

    PUT(Switch)
  END
  DO CloseFiles
  CLOSE(Window)

!--------------------------------------
OpenFiles  ROUTINE
  Access:Switch.Open                                       ! Open File referenced in 'Other Files' so need to inform its FileManager
  Access:Switch.UseFile                                    ! Use File referenced in 'Other Files' so need to inform its FileManager
  FilesOpened = True
!--------------------------------------
CloseFiles ROUTINE
  IF FilesOpened THEN
     Access:Switch.Close
     FilesOpened = False
  END
SuperMax
Посетитель
Сообщения: 47
Зарегистрирован: 25 Август 2015, 3:22
Поблагодарили: 2 раза

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение SuperMax »

vd-vuf писал(а):Во вложении шаблон с сырцами.
Писал для себя комментариев там нет.
Чистого примера использования у меня нет а с приложениями в купе еще куча шаблонов.
Если поможет, могу какую нидь вырезку из сырцов показать.
Попробовал подключить - просит SNMP.DLL

SNMP.DLL was not copied to the target directory because it could not be found via redirection lookup - C:\Clarion10\bin\SoftVelocity.Build.Clarion.targets:72,3

я зарегистрировал класс, подключил его в глобальных и попробовал собрать тестовое приложение
я что-то не так сделал ?

[я пока вспоминаю что и где - сидел компилировал свои старые программы смотрел как что устроено и соответственно могу ошибиться]
vd-vuf
Бывалый
Сообщения: 61
Зарегистрирован: 12 Декабрь 2008, 12:09
Откуда: Верхний Уфалей
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение vd-vuf »

SuperMax писал(а): SNMP.DLL was not copied to the target directory because it could not be found via redirection lookup - C:\Clarion10\bin\SoftVelocity.Build.Clarion.targets:72,3
Это не ошибка, Клаша предупреждает (Warning) что не нашла файл в своем хозяйстве.
В snmp.lib ссылки на другие системные dll, то есть в винде они есть, копировать их ни куда не нужно.
Коль приложение откомпилилось то должно работать без проблем.
(snmp.dll как таковой у меня тоже нет :))

P.S. snmp.lib сборная солянка, сделана с помощью LibMaker из нескольких dll
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение Admin »

ищите у себя
Snmpapi.dll
Mgmtapi.dll
и т.д.

Где находятся функции можно проверить на MSDN
Внизу написана DLL
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение Admin »

Компильнул в 10-ке. Все работает как бы и запускается.
Проблема с якобы отсутствующей SNMP.DLL в старом шаблоне. Не заточен он под C10
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
vd-vuf
Бывалый
Сообщения: 61
Зарегистрирован: 12 Декабрь 2008, 12:09
Откуда: Верхний Уфалей
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение vd-vuf »

здесь под руками желательно иметь консольное средство для работы с snmp - snmpwalk
в юниксе оно обычно есть по умолчанию, для винды можно найти в интернете.
потому что если из проги нет результата, то для начала проверить через snmpwalk
и проверять OID'ы при работе с конкретным железом проще.
(snmpwalk -v1 -c public 10.10.0.1 .1.3.6.1.2.1.1.1)
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение Admin »

vd-vuf писал(а):(snmpwalk -v1 -c public 10.10.0.1 .1.3.6.1.2.1.1.1)
Интересная тема. Только вот дома непонятно для чего :)

Код: Выделить всё

MacBook-Air-mixer:~ mixer$ snmpwalk -v1 -c public 192.168.1.8 .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux DiskStation 2.6.32.12 #5592 Wed Aug 19 13:37:12 CST 2015 armv5tel

MacBook-Air-mixer:~ mixer$ snmpwalk -v1 -c public 192.168.1.8 .1.3.6.1.2.1.1.3
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (33899665) 3 days, 22:09:56.65
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
SuperMax
Посетитель
Сообщения: 47
Зарегистрирован: 25 Август 2015, 3:22
Поблагодарили: 2 раза

Как на CW10 работать с SNMP ? (или вообще с сетью)

Сообщение SuperMax »

С SNMP разобрался - пример запустил. все отлично работает (использую ф-ю SNMP.Get). Огромное спасибо !
остается реализовать SNMP.SET ;-)

с самим SNMP у меня опыт работы есть - я написал собственный стек TCP/IP с модулями NTP/DHCP/SNMP итд под микроконтроллеры AVR на СИ.
если интересно - результат http://maxiol.ru/

В копилку информации по SNMP добавлю (сайт не мой) http://logic-bratsk.ru/brlug/snmp_my/index.htm - мало ли кто-то полезет внутрь этого протокола, ибо на низком уровне он достаточно "хитрый"
Если будут вопросы по внутренностям SNMP - велкам.
Ответить