阅读:9752回复:57
为什么我用net-snmp-5.0.7扩展win32收不到自己的Trap ?
救命阿
各位大虾.还有版主同志,大家都辛苦了。 我现在用net-snmp-5.0.7再win32下面扩展,可是当我用MIB2c生成.c和,h文件以后,按照readme.win32的文档说明,进行了扩展,可是我重新用VC编译后并不能收到我自己定义的Trap信息, 这是为什么阿? 大家又没有好的方法阿?很集的阿! 帮我解决了这个问题我一定给他想要得分。 附件中我扩展win32的文档,大家可以看看,对你们再linux和win 32应该也有帮助的。 希望版主能帮我提前一下,辛苦了。 |
|
|
沙发#
发布于:2003-06-12 10:48
附件没有,不知道怎么回答你的问题。
用snmptrap是可以实现的,你的现象是怎么样的,贴上来 |
|
板凳#
发布于:2003-06-12 11:45
我是先用MIB2c生成了我自己定义的MIB对应的cheyene.c和cheyene.h
附件中文件如下: InocuLAN-Alarm-MIB.txt 自定义的MIB文件 cheyenne.c cheyenne.h 是该MIB用MIB2c生成的文件 下面是我具体的win32扩展步骤: 1、拷贝InocuLAN-Alarm-MIB.txt 到net-snmp-5.0.7\\mibs下。 2、将cheyenne.c cheyenne.h 文件拷贝到\\net-snmp-5.0.7\\agent\\mibgroup下。 3、修改net-snmp-5.0.7\\win32下面的config.h中的 /* default list of mibs to load */ #define DEFAULT_MIBS \"InocuLAN-Alarm-MIB;IP-MIB;IF-MIB;TCP-MIB;UDP-MIB;SNMPv2-MIB;RFC1213-MIB;UCD-SNMP-MIB;UCD-DEMO-MIB;SNMP-TARGET-MIB;SNMP-VIEW-BASED-ACM-MIB;SNMP-COMMUNITY-MIB;UCD-DLMOD-MIB;SNMP-FRAMEWORK-MIB;SNMP-MPD-MIB;SNMP-USER-BASED-SM-MIB;SNMP-NOTIFICATION-MIB;SNMPv2-TM\" 载开始的地方我加入了InocuLAN-Alarm-MIB。 4、用VC打开win32.dsw, 增加cheyenne.c cheyenne.h文件到netsnmpmibs工程中; 编辑’<sourcedir>\\win32\\mib_module_includes.h’文件,增加代码 #include “mibgroup/cheyenne.h”到我的mib_module_includes.h文件中; 编辑’<sourcedir>\\win32\\ mib_module_inits.h’文件,增加代码调用我的初始化函数 if (should_init(“cheyenne”)) init_cheyenne(); 重新编译netsnmpmibs和snmpd 工程文件,编译成功,我认为到此扩展完毕。 5、编译snmptrapd工程(接受Trap的模块),当我用vc单步调试的时候(snmptrapd_d.exe运行(不带任何参数)),当程序执行到 (main函数中)transport = netsnmp_tdomain_transport(cp, 1, \"udp\");代码的时候,返回的Transport有时候可能返回为NULL,则snmptrapd启动失败,报告错误(cann\'t open port 162: error 2\"no such file or directory\"),这种错误有时候会发生,我看了代码,认为可能是绑定162端口失败,有可能162被别的程序已经绑定。我的这种理解对么??? 当程序没有这种错误的时候,我能正常的执行到下面的代码。 count = select(numfds, &fdset, 0, 0, tvp); if (count > 0) { snmp_read(&fdset); } else switch (count) { case 0: snmp_timeout(); break; case -1: if (errno == EINTR) continue; snmp_log_perror(\"select\"); running = 0; break; default: fprintf(stderr, \"select returned %d\\n\", count); running = 0; } 当程序运行到count = select(numfds, &fdset, 0, 0, tvp);这一行时候,默认是等待5秒,看有没socket有trap包到来,在程序整个测试的过程中我开着另外的机器向调试机器发送TRAP包,可是不知道为什么,程序返回的count总是0,最后都是timeout,冰没有执行snmp_read,因而也没有进入snmp_input这个回调函数进行处理。 joinjin老兄,多谢你的帮忙,你以前扩展成功过win32的自定义MIB么,请你多多帮忙,我会在线等待 我的QQ:11822654,Mail:barryxu@ca-jc.com 不知道我这样描述你能否明白我的问题? |
|
|
地板#
发布于:2003-06-12 11:50
UP了一下我的doc文档,这次应该可以下载了巴!
|
|
|
地下室#
发布于:2003-06-12 13:14
1\\端口被占用的问题是很常见的,如果你在WINDOWS2000中开了SNMPTRAP,则无法使用这个端口作服务器了。只要先把这个服务关了就可以了。注意:不是SNMP那个服务。
|
|
5楼#
发布于:2003-06-12 13:20
net-snmp中win32下面有win32.dsw和win32sdk.dsw,我用的是win32.dsw,不知道这个问题会不会印象我扩展MIB,接受TRAP的实现????
对于win32.dsw中还有一些子工程我没有用到,但是我想知道各个工程都是干什么用的?你能告诉我剩下的那些没有填写的工程具体用来做什么的么? 我的问题有点多,希望不给你添很多麻烦!祝工作顺利! encode_keychange: libagent : libhelpers :编译生成help的lib文件 libsnmp : libsnmp_dll : netsnmpmibs : 加载MIB时编译生成lib文件 snmpbulkget : snmpbulkwalk : snmpd : snmpddelta : snmpdf : snmpget :Fetch an SNMP object snmpgetnext :Fetch next SNMP object snmpnetstat :send snmp GET requests to a network entity snmpset :SET an SNMP object snmpstatus : snmptable : snmptest : 用法: snmptest -v 1 [-q] hostname community [objectID] snmptranslate: snmptrap :发送Trap到一个网络实体(我可以用这个程序给我开发的机器发送我定义的MIB对应的Trap么?) snmptrapd :接收trap, 写入日志 snmpusm :send snmp SET requests to a network entity to change the usm user database,其中包括 1、get engineID dynamicly. 2、read passwords from prompts 3、customize responses with user names, etc. snmpvacm :发送一个 snmp SET requests到一个网络实体改变vacm数据库信息; snmpwalk :取得一个代理的所有SNMP OID信息; |
|
6楼#
发布于:2003-06-12 13:24
2.其实在NETSNMP中有PRINT_MIB函数,你可以用他把你建立的TREE打印出来,这样你就可以看到你的mib文件是否被正确地挂到tree上了。如果已经存在,则扩展是正确的。
3.SNMPTRAP的种类比较少,会根据你定义的类型进行比较,通过trap_description(type)来解释收到TRAP号码。不过,现在你还没到这里,呵呵! 4.由于文件太多,我也有点忘了,看看是否这样你就可以解决你现在碰到的问题,不行的话,我再钻研一下。 |
|
7楼#
发布于:2003-06-12 13:26
端口占用的问题我已经解决了。
多谢。 自定义trap接收不到的问题现在比较紧迫,其他都可以以后再说! 非常感谢你的帮助! |
|
8楼#
发布于:2003-06-12 13:33
你其它的TRAP收的到吗?比如交换机的端口插拔(热启动)等
|
|
9楼#
发布于:2003-06-12 13:36
PRINT_MIB函数---谢谢你,这下我可以自己判断是否成功扩展上去。Very good,这个函数可以帮我很大的忙。
trap_description(type)来解释收到TRAP号码,我现在已经编写好代码到加入到snmp_input中只要snmp_read函数以执行,回调就会由系统自动调用,在我添加的代码里面我会去判断pdu->command pdu->traptype 是不是我要接受的TRAP,还有我会判断pdu->enterprise 看看自定义的OID是不是我MIB中定义的1.3.6.1.4.1.46.879 ,我这样处理就应该到你说的那一步了吧。 我会按照你的提示去尝试一下,然后告诉你结果。 真心的感谢您的帮忙。祝你工作顺利,身体健康,Money多多,嘻嘻! |
|
10楼#
发布于:2003-06-12 13:40
其他的Trap,我没有交换机的测试环境,所以我也不知道能否收到,
你能告诉我一个简单的测试方法,看看trap能否受到。 我这里又一个trapreceiver的win32软件(破解完的),原先我用这个软件来测试接收我发出的Trap的。 你能否告诉我怎么样才能在net-snmp win32下进行测试其他的trap是否能收到? |
|
11楼#
发布于:2003-06-12 14:49
用一台计算机试一下,如果安装了SNMP,可以设置发送到那里和COMMUNITY,然后,开关一下就可以了,不过,这个方法好像比较烦。
|
|
12楼#
发布于:2003-06-12 15:25
你看了我上面MIB扩展的过程, 你觉得又没有什么问题?
我用print_mib已经把我的MIB存放到文件中,见附件。 mibtree.txt 我看了一些里面的OID,在enterprise里面没有我要加入的 InocuLAN-Alarm-MIB模块,不知道我哪里出错了? 难道是我扩展MIB错误,可是我是按照程序readme来做的阿。 现在有点迷糊了。 |
|
|
13楼#
发布于:2003-06-12 15:50
你用的readme让我看看,我有点不太明白怎么会不行,
记得只要把MIB靠到MIBS下就可以了,程序在INIT的时候自己会读的,你可以跟踪一下啊! 另外,你现在是作AGENT,如果使用snmpwalk浏览,如果正确,不管服务器端怎么样,都可以正确地显示AGENT端的内容。挂MIB是为了在收到回应后,可以根据TREE上的结构显示解释的结果,例如接口类型,如果返回值是63,有1213mib的话,打印出来就是CSMDCD,如果没有,也会打印出63。 |
|
14楼#
发布于:2003-06-12 15:58
我在netsnmpmibs工程中加入了cheyenne.c cheyenne.h中以后,重新编译该工程没有问题生成了netsnmpmibs_d.lib 。
--------------------Configuration: netsnmpmibs - Win32 Debug-------------------- netsnmpmibs_d.lib - 0 error(s), 0 warning(s) 之后我重新编译snmpd工程,出现下面地错误,这是为什么阿? --------------------Configuration: snmpd - Win32 Debug-------------------- Linking... LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification netsnmpmibs_d.lib(errormib.obj) : error LNK2001: unresolved external symbol _errno ../bin/snmpd_d.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. snmpd_d.exe - 2 error(s), 1 warning(s) 我就是因为这个才不能成功扩展MIB,所以也就收不到TRAP信息了。 这个错误是为什么阿?我明明已经编译成功了netsnmpmibs_d.lib 了阿???? |
|
15楼#
发布于:2003-06-12 16:00
你的MIB文件对吗,我觉得不大对,但是我忘了规则,你可以对比一下RFC的mib文件,看看有没有问题
|
|
16楼#
发布于:2003-06-12 16:03
net-snmp-5.0.7下面的
README.win32 用ultraedit可以打开。 |
|
|
17楼#
发布于:2003-06-12 16:06
我的MIB文件没有问题的,这个文件原来被别人加入到SNMP Manager中,而且Manager端还能收到trap信息。
|
|
18楼#
发布于:2003-06-12 16:09
我想应该用SNMP.LIB
你能不能告诉我你做什么,打算怎么实现(理想的情况下)! 今天比较空,可以帮你想想 |
|
19楼#
发布于:2003-06-12 16:20
你把RFC1065-SMI。txt发给我,我帮你调试一下,看看是否是挂不上去
|
|
上一页
下一页