powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / SNMP & BCB6.. ужос !!!
25 сообщений из 25, страница 1 из 1
SNMP & BCB6.. ужос !!!
    #33883394
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет Олл!!! Хелп ми!!!
Вот ниже код. Третий день мучаюсь. Неработает..ааа. После запуска вылетает с ошибкой "Access violation at address ... Read of address 0000000A"?
Компилятор Builder6. ОС Win XP SP2. Почему то всегда AnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 00 32 1A 00 32 20 00 64 00 и определяется это как Octet String), а AnyVal->asnValue.string.stream равно "". Хотя asnType определяет правильно (Octet String)... Да, девайс поддерживает только SNMP V1.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
#include "mgmtapi.h"
#include <stdio.h>

...

LPSNMP_MGR_SESSION hSes=SnmpMgrOpen("192.*.*.*","public", 1000 , 5 );

if(!hSes)
 {
  MessageBox(NULL,"Error SnmpMgrOpen","",MB_OK);
  return;
 }

 AnsiString Oid = ".1.3.6.1.4.1.5758.1.30.1";
 AsnObjectIdentifier AsnOid;
 if(!SnmpMgrStrToOid (Oid.c_str(), &AsnOid)) return;

 AsnInteger errStat =  0 ;
 AsnInteger errIdx =  0 ;

 SnmpVarBindList BindList;
 BindList.list = NULL;
 BindList.len =  1 ;

 BindList.list =
    (SnmpVarBind *)SNMP_malloc( sizeof(SnmpVarBind) * (BindList.len));

 BindList.list[ 0 ].value.asnType = ASN_NULL;

 SnmpUtilOidFree(&BindList.list[ 0 ].name);
 if(!SnmpUtilOidCpy(&BindList.list[ 0 ].name, &AsnOid)) return;

if(!SnmpMgrRequest(hSes,SNMP_PDU_GET,&BindList,&errStat,&errIdx))
{
 char Buf[ 255 ]; 
 DWORD Err=GetLastError();
 sprintf(Buf,"SnmpMgrRequest(): %d",Err);
 MessageBox(NULL,Buf,"Error",MB_OK);
 SnmpMgrClose(hSes);
 return;
}
        AsnObjectSyntax *AnyVal = &BindList.list[ 0 ].value;

	UINT Len =  0 ;
	BYTE *puData =  0 ;
	char *pString = NULL;

             Len = AnyVal->asnValue.string.length +  1 ;
             puData = AnyVal->asnValue.string.stream;
	pString = (char *) SnmpUtilMemAlloc(Len +  1 );
	
            if(pString != NULL)
	{
	  if (AnyVal->asnValue.arbitrary.length)
	 {
  	   strncpy(pString, (const char*)puData, Len -  1 ); // ??? тут вылетает!
     	   pString[Len] = '\0';
	 }
	}
SnmpMgrClose(hSes);
...
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33884408
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
#include <string.h> ?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33884500
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitrii K.#include <string.h> ?

и как это может помочь?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33884511
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуфыч Dmitrii K.#include <string.h> ?

и как это может помочь?
Были казусы, когда без инклуда компилилось нормально, но работало криво... правда дело было давно... так... смутные воспоминания...

Так подключен string.h или нет?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33884517
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пальцем в небо (не знаком я с этим):

Может надо как-то по другому обращаться к строке в AnyVal->asnValue. Тем более, что она определяется как-то загадочно .

Почему?

При чтении из puData обнаруживается, что она указывает куда-то не туда. Следовательно, AnyVal->asnValue.string.stream скорее всего не инициализировано. Это подтверждает и то, что длина не правельно возвращается.

Возможно:
1. вызвать какую-то функцию, что преобразования строки внутри AnyVal->asnValue.
2. читать строку с другого поля этой структуры.
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33884571
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitrii K. Гуфыч Dmitrii K.#include <string.h> ?

и как это может помочь?
Были казусы, когда без инклуда компилилось нормально, но работало криво... правда дело было давно... так... смутные воспоминания...

Так подключен string.h или нет?

ради инетереса поставил. тоже самое ((
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33885898
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkhПальцем в небо (не знаком я с этим):

Может надо как-то по другому обращаться к строке в AnyVal->asnValue. Тем более, что она определяется как-то загадочно .

Почему?

При чтении из puData обнаруживается, что она указывает куда-то не туда. Следовательно, AnyVal->asnValue.string.stream скорее всего не инициализировано. Это подтверждает и то, что длина не правельно возвращается.

Возможно:
1. вызвать какую-то функцию, что преобразования строки внутри AnyVal->asnValue.
2. читать строку с другого поля этой структуры.

да вроде все нормально. не в этом дело. дебагером посматрел получше. эти данные в структуре BindList (..string.length = 1 и тд) уже после SnmpMgrRequest(...).. вот такие дела. прям незнаю што и делать или куды копать.
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33886236
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 00 32 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33886435
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 00 32 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?

ну и что? длина почему равна 1 то сразу после выполнения запроса? должна быть равна 10..
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33886519
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуфыч maXmo ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 0032 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
ну и что? длина почему равна 1 то сразу после выполнения запроса? должна быть равна 10..У тебя второй байт в пакете нулевой. Вон я его тебе выделил красненьким :) И строка у тебя всего лишь из одного символа с кодом 19 получается...
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33887764
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не паскаль :)
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33888795
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой вообще тип у AnyVal->asnValue.string ?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33889067
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneА какой вообще тип у AnyVal->asnValue.string ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
typedef struct {
    BYTE asnType;
    union {
        AsnInteger32            number;     // ASN_INTEGER
                                            // ASN_INTEGER32
        AsnUnsigned32           unsigned32; // ASN_UNSIGNED32
        AsnCounter64            counter64;  // ASN_COUNTER64
        AsnOctetString          string;     // ASN_OCTETSTRING
        AsnBits                 bits;       // ASN_BITS
        AsnObjectIdentifier     object;     // ASN_OBJECTIDENTIFIER
        AsnSequence             sequence;   // ASN_SEQUENCE
        AsnIPAddress            address;    // ASN_IPADDRESS
        AsnCounter32            counter;    // ASN_COUNTER32
        AsnGauge32              gauge;      // ASN_GAUGE32
        AsnTimeticks            ticks;      // ASN_TIMETICKS
        AsnOpaque               arbitrary;  // ASN_OPAQUE
    } asnValue;
} AsnAny;

И

typedef struct {
    BYTE * stream;
    UINT   length;
    BOOL   dynamic;
} AsnOctetString;

И

typedef unsigned char       BYTE;
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33889526
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Гуфыч maXmo ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 0032 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
ну и что? длина почему равна 1 то сразу после выполнения запроса? должна быть равна 10..У тебя второй байт в пакете нулевой. Вон я его тебе выделил красненьким :) И строка у тебя всего лишь из одного символа с кодом 19 получается...

попробовал с 19 0A 32 18 0F 32 25 0C 64 00. тот же самый результат..
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33889858
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что дебагер думает по этому поводу?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33891755
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
снифером глянул пакеты. после запроса от железки идет все правильно..
а вот структура BindList после
SnmpMgrRequest(hSes,SNMP_PDU_GET,&BindList,&errStat,&errIdx)
заполняется фигней.
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33891844
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
BindList.list =
    (SnmpVarBind *)SNMP_malloc( sizeof(SnmpVarBind) * (BindList.len));

 BindList.list[ 0 ].value.asnType = ASN_NULL;

 SnmpUtilOidFree(&BindList.list[ 0 ].name);
 if(!SnmpUtilOidCpy(&BindList.list[ 0 ].name, &AsnOid)) return;
А зачем здесь SnmpUtilOidFree(&BindList.list[0].name) ?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33892051
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barlone
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
BindList.list =
    (SnmpVarBind *)SNMP_malloc( sizeof(SnmpVarBind) * (BindList.len));

 BindList.list[ 0 ].value.asnType = ASN_NULL;

 SnmpUtilOidFree(&BindList.list[ 0 ].name);
 if(!SnmpUtilOidCpy(&BindList.list[ 0 ].name, &AsnOid)) return;
А зачем здесь SnmpUtilOidFree(&BindList.list[0].name) ?

да вощемто ненужно. это так. паника..
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33892238
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это мы heap покоцали.
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33892408
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уфф. Проблема решена. Все гораздо проще оказалось. Нада было выравнивание в памяти изменить на Double word. То то структура снмп-ишная не заполнялась..
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33892541
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где же вы такой mgmtapi.h взяли ? Во всех заголовочных файлах обычно #pragma pack с нужным выравниванием стоит.
PS А особождение невыделеной памяти все таки черевато...
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33892852
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneГде же вы такой mgmtapi.h взяли ? Во всех заголовочных файлах обычно #pragma pack с нужным выравниванием стоит.
PS А особождение невыделеной памяти все таки черевато...

дауж. вот не стоит :)) помучило меня это..
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33896989
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Гуфыч maXmo ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 0032 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
ну и что? длина почему равна 1 то сразу после выполнения запроса? должна быть равна 10..У тебя второй байт в пакете нулевой. Вон я его тебе выделил красненьким :) И строка у тебя всего лишь из одного символа с кодом 19 получается...

а кстати, если такая ситуация как ее обойти, чтобы прочесть следующие байты?
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33897033
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуфыч White Owl Гуфыч maXmo ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 0032 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
ну и что? длина почему равна 1 то сразу после выполнения запроса? должна быть равна 10..У тебя второй байт в пакете нулевой. Вон я его тебе выделил красненьким :) И строка у тебя всего лишь из одного символа с кодом 19 получается...

а кстати, если такая ситуация как ее обойти, чтобы прочесть следующие байты?
memmove/memcpy вместо strncpy
...
Рейтинг: 0 / 0
SNMP & BCB6.. ужос !!!
    #33897192
Гуфыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitrii K. Гуфыч White Owl Гуфыч maXmo ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 0032 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
ну и что? длина почему равна 1 то сразу после выполнения запроса? должна быть равна 10..У тебя второй байт в пакете нулевой. Вон я его тебе выделил красненьким :) И строка у тебя всего лишь из одного символа с кодом 19 получается...

а кстати, если такая ситуация как ее обойти, чтобы прочесть следующие байты?
memmove/memcpy вместо strncpy

спасиба! правда сам уже допер
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / SNMP & BCB6.. ужос !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]