Страница 1 из 2
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 25 Август 2015, 16:10
SuperMax
Коллеги!
сейчас встала задача быстро написать виндовое приложение работающее с железками по SNMP
тк я давно не "кларионил" (в начале 90х много писал на Кларионе 2.1; потом немного писал на CW5/6) то определенно не в курсе новинок, а время поджимает.
подскажите куда копать/где что читать ?
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 25 Август 2015, 17:09
Admin
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 25 Август 2015, 17:57
SuperMax
спасибо!
совсем забыл - поддержка winapi еще же в 2.0 появилась
остается вспомнить как это делать

Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 25 Август 2015, 19:58
morkovin
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 26 Август 2015, 11:38
vd-vuf
Во вложении шаблон с сырцами.
Писал для себя комментариев там нет.
Чистого примера использования у меня нет а с приложениями в купе еще куча шаблонов.
Если поможет, могу какую нидь вырезку из сырцов показать.
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 26 Август 2015, 17:26
SuperMax
vd-vuf писал(а):Во вложении шаблон с сырцами.
Писал для себя комментариев там нет.
Чистого примера использования у меня нет а с приложениями в купе еще куча шаблонов.
Если поможет, могу какую нидь вырезку из сырцов показать.
Круто! огромное спасибо! буду разбираться
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 7:25
Admin
SuperMax писал(а):Круто! огромное спасибо! буду разбираться
Сюда же, почитать
http://www.k-max.name/linux/snmp-protocol/
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 7:50
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
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 12:55
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
я зарегистрировал класс, подключил его в глобальных и попробовал собрать тестовое приложение
я что-то не так сделал ?
[я пока вспоминаю что и где - сидел компилировал свои старые программы смотрел как что устроено и соответственно могу ошибиться]
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 13:44
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
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 14:12
Admin
ищите у себя
Snmpapi.dll
Mgmtapi.dll
и т.д.
Где находятся функции можно проверить на MSDN
Внизу написана DLL
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 14:23
Admin
Компильнул в 10-ке. Все работает как бы и запускается.
Проблема с якобы отсутствующей SNMP.DLL в старом шаблоне. Не заточен он под C10
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 15:50
vd-vuf
здесь под руками желательно иметь консольное средство для работы с snmp - snmpwalk
в юниксе оно обычно есть по умолчанию, для винды можно найти в интернете.
потому что если из проги нет результата, то для начала проверить через snmpwalk
и проверять OID'ы при работе с конкретным железом проще.
(snmpwalk -v1 -c public 10.10.0.1 .1.3.6.1.2.1.1.1)
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 27 Август 2015, 17:16
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
Как на CW10 работать с SNMP ? (или вообще с сетью)
Добавлено: 31 Август 2015, 6:05
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 - велкам.