Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / SNMP & BCB6.. ужос !!! / 25 сообщений из 25, страница 1 из 1
27.07.2006, 19:22
    #33883394
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Привет Олл!!! Хелп ми!!!
Вот ниже код. Третий день мучаюсь. Неработает..ааа. После запуска вылетает с ошибкой "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
28.07.2006, 10:49
    #33884408
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
#include <string.h> ?
...
Рейтинг: 0 / 0
28.07.2006, 11:10
    #33884500
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Dmitrii K.#include <string.h> ?

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

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

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

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

Почему?

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

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

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

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

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

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

Почему?

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

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

да вроде все нормально. не в этом дело. дебагером посматрел получше. эти данные в структуре BindList (..string.length = 1 и тд) уже после SnmpMgrRequest(...).. вот такие дела. прям незнаю што и делать или куды копать.
...
Рейтинг: 0 / 0
28.07.2006, 18:17
    #33886236
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
ГуфычAnyVal->asnValue.string.length равно 1 (хотя там десять байт которые в проге SNMPc Server 5.1 выглядят так - 19 00 32 1A 00 32 20 00 64 00 и определяется это как Octet String)а что, нулевой байт - это не символ конца строки?
...
Рейтинг: 0 / 0
28.07.2006, 20:41
    #33886435
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
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
28.07.2006, 22:26
    #33886519
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Гуфыч 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
30.07.2006, 19:28
    #33887764
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
это не паскаль :)
...
Рейтинг: 0 / 0
31.07.2006, 12:25
    #33888795
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
А какой вообще тип у AnyVal->asnValue.string ?
...
Рейтинг: 0 / 0
31.07.2006, 13:39
    #33889067
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
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
31.07.2006, 15:46
    #33889526
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
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
31.07.2006, 17:06
    #33889858
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
а что дебагер думает по этому поводу?
...
Рейтинг: 0 / 0
01.08.2006, 13:31
    #33891755
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
снифером глянул пакеты. после запроса от железки идет все правильно..
а вот структура BindList после
SnmpMgrRequest(hSes,SNMP_PDU_GET,&BindList,&errStat,&errIdx)
заполняется фигней.
...
Рейтинг: 0 / 0
01.08.2006, 13:51
    #33891844
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Код: 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
01.08.2006, 14:36
    #33892051
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
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
01.08.2006, 15:14
    #33892238
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Не, это мы heap покоцали.
...
Рейтинг: 0 / 0
01.08.2006, 15:51
    #33892408
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Уфф. Проблема решена. Все гораздо проще оказалось. Нада было выравнивание в памяти изменить на Double word. То то структура снмп-ишная не заполнялась..
...
Рейтинг: 0 / 0
01.08.2006, 16:27
    #33892541
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Где же вы такой mgmtapi.h взяли ? Во всех заголовочных файлах обычно #pragma pack с нужным выравниванием стоит.
PS А особождение невыделеной памяти все таки черевато...
...
Рейтинг: 0 / 0
01.08.2006, 17:55
    #33892852
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
BarloneГде же вы такой mgmtapi.h взяли ? Во всех заголовочных файлах обычно #pragma pack с нужным выравниванием стоит.
PS А особождение невыделеной памяти все таки черевато...

дауж. вот не стоит :)) помучило меня это..
...
Рейтинг: 0 / 0
03.08.2006, 13:06
    #33896989
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
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
03.08.2006, 13:19
    #33897033
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
Гуфыч 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
03.08.2006, 13:55
    #33897192
Гуфыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SNMP & BCB6.. ужос !!!
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
Форумы / C++ [игнор отключен] [закрыт для гостей] / SNMP & BCB6.. ужос !!! / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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