阅读:2614回复:8
WINSNMP支持广播命令吗?
用WINSNMP或SNMP MANAGER API SEND 广播请求后(AGENT为255。255。255。255),用抓包工具发现有多个机器返回了PDU,但WINSNMP、SNMP MANAGER API无相应的函数(只能得到第一个PDU),各位有何良策?
|
|
沙发#
发布于:2002-06-19 15:00
请问您用什么抓包工具?
|
|
|
板凳#
发布于:2003-03-24 14:56
楼顶的 解决问题了吗?
我现在也碰到同样的问题,恳请赐教啊 谢了 |
|
地板#
发布于:2003-03-24 17:37
不支持广播!!
winsnmp是基于会话的! |
|
|
地下室#
发布于:2003-03-25 10:51
我说呢,一直没弄懂会话是什么意思。
对了,那我如何通过NMS来发现本网段上的可管理设备呢?有什么好的方法吗? |
|
5楼#
发布于:2003-03-25 13:58
你可以这样解决:
SOCKADDR_IN in; SOCKADDR_IN to; int len=0; int fromlen; SOCKADDR_IN from; BOOL op=TRUE; Socket=socket(AF_INET,SOCK_DGRAM,0); in.sin_family =AF_INET; in.sin_addr .S_un .S_addr =INADDR_ANY; bind(Socket,(LPSOCKADDR)&in,sizeof(in)); setsockopt(Socket,SOL_SOCKET,SO_BROADCAST,(char*)&op,sizeof(op)); to.sin_family =AF_INET; to.sin_addr .S_un .S_addr =inet_addr(this->m_strBroadIPAddr .GetBuffer (0)); to.sin_port =htons(161); //数据编码 BYTE bArr[]={ 0x30,0x26,0x02,0x01,0x00,0x04,0x06,0x70,0x75,0x62,0x6C,0x69, 0x63,0xA0,0x19,0x02,0x01,0x02,0x02,0x01,0x00,0x02,0x01,0x00, 0x30,0x0E,0x30,0x0C,0x06,0x08,0x2B,0x06, 0x01,0x02,0x01,0x01, 0x07,0x00,0x05,0x00 }; sendto(Socket,(char*)bArr,sizeof(bArr),0,(LPSOCKADDR)&to,sizeof(SOCKADDR)); fd_set mask; struct timeval *ptimeout; struct timeval timeout = {1, 0}; timeout.tv_sec =5;//5秒 timeout.tv_usec = 0; FD_ZERO(&mask); FD_SET(Socket,&mask); ptimeout = &timeout; int Err; BYTE lpBuffer[100]; memset(lpBuffer,0,100); fromlen=sizeof(SOCKADDR); BOOL bStop=FALSE; CString ipaddr; this->m_DeviceOfCount=0; for(;;) {//for len=0; switch(select(0,&mask,(fd_set *)0,(fd_set *)0,ptimeout)) { case SOCKET_ERROR: Err=WSAGetLastError (); break; case 0: bStop=TRUE; break; default: if(!(FD_ISSET(Socket,&mask))) { break; } len=recvfrom(Socket,(char*)lpBuffer,100,0,(LPSOCKADDR)&from,&fromlen); PUCHAR pucIpAddr; pucIpAddr = (PUCHAR)&from.sin_addr .S_un.S_addr; ipaddr.Format(\"%d.%d.%d.%d\",pucIpAddr[0],pucIpAddr[1],pucIpAddr[2],pucIpAddr[3]); this->m_DeviceIp [this->m_DeviceOfCount ].IPAddress .Format (\"%s\",ipaddr); this->m_DeviceIp [this->m_DeviceOfCount ].ServiceType =lpBuffer[40]; }//for |
|
|
6楼#
发布于:2003-03-25 14:01
自己编写数据编码,访问mib库的服务信息,然后接收回复的所有包文,从中找到目的ip地址,然后在用winsnmp会话的方式一个一个的访问!
这是偶用了1个星期想出来的!给钱! |
|
|
7楼#
发布于:2003-03-25 16:05
哈哈,还有谁能比WYWWWL更热心的呢!
谢谢了 |
|
8楼#
发布于:2003-05-22 15:34
我找到一个更好的办法
利用WINSNMP的SESSION来构造SNMP包, 然后自己写SOCKET的通信,发送,接收数据包 最后再利用WINSNMP的SESSION来解包. 一切OK,可以实现广播数据的提取, |
|