none
Сложный community name для опроса SNMP устройств RRS feed

  • Вопрос

  • Добрый день, господа!

    Имеется менеджмент пак для SNMP устройств.
    В менеджмент паке есть скрипты, которые опрашивают устройства и получают некоторые данные.
    Как известно, в SCOM-е имена сообществ (community name) хранятся в кодировке Base64, поэтому в скриптах используется следующий код для преобразования имен сообществ:

    community = Base64ToBSTR(oArgs(3))
    'где oArgs(3) - передаваемое в скрипт имя сообщества

    'непосредсвенно сама функция преобразования
    Function Base64ToBSTR(strBase64)
        Dim Byte1, Byte2, Byte3, Byte4
        Dim Data
        Dim iterator
        Const CharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

        For iterator = 0 To Len(strBase64) - 1 Step 4
            Byte1 = InStr(CharMap, Mid(strBase64, iterator + 1, 1)) - 1
            Byte2 = InStr(CharMap, Mid(strBase64, iterator + 2, 1)) - 1
            Byte3 = InStr(CharMap, Mid(strBase64, iterator + 3, 1)) - 1
            Byte4 = InStr(CharMap, Mid(strBase64, iterator + 4, 1)) - 1          
          
            Data = Data & ChrB(Byte1 * 4 + Byte2 \ 16)
          
            If Byte3 >= 0 Then
                Data = Data & ChrB((Byte2 And 15) * 16 + Byte3 \ 4)
            Else
                Data = Data & ChrB((iterator * 3 \ 4 + 1) = (Byte2 And 15) * 16)
            End If

            If Byte4 >= 0 Then
                Data = Data & ChrB((Byte3 And 3) * 64 + Byte4)
            End If
        Next
        Base64ToBSTR = Data
    End Function

    И он прекрасно работает если опрос производится непосредственно именем сообщества, к примеру "public".
    Но есть необоходимость опроса с измененным именем в формате public@1 (public@3 и т.п.) и в данном случае возникает проблема, потому что если использовать строки вида

    community2 = community & "@" & "1"

    то на выходе получается каша типа public и естественно скрипт устройство опросить не может.
    Т.е. к декодированному community name нельзя добавить никакую произвольную строку.

    Подскажите, как выйти из этого положения?

    PS: примечательно, что если данные ставить перед именем сообщества, то всё нормально, т.е. сommunity2 = "test" & community даст на выходе testpublic, но сommunity2 = community & "test"  уже выдаёт public
    • Изменено Brers 26 августа 2009 г. 7:53
    26 августа 2009 г. 7:47

Ответы