zzhehai
驱动牛犊
驱动牛犊
  • 注册日期2002-04-22
  • 最后登录2002-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2614回复:8

WINSNMP支持广播命令吗?

楼主#
更多 发布于:2002-04-30 10:10
用WINSNMP或SNMP MANAGER API SEND 广播请求后(AGENT为255。255。255。255),用抓包工具发现有多个机器返回了PDU,但WINSNMP、SNMP MANAGER API无相应的函数(只能得到第一个PDU),各位有何良策?
HaHaG
驱动牛犊
驱动牛犊
  • 注册日期2002-06-19
  • 最后登录2002-06-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-19 15:00
请问您用什么抓包工具?
不老不老
yellowfinger
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2003-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-24 14:56
楼顶的 解决问题了吗?
我现在也碰到同样的问题,恳请赐教啊 谢了
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-03-24 17:37
不支持广播!!

winsnmp是基于会话的!
琢磨悟真知
yellowfinger
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2003-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-25 10:51
我说呢,一直没弄懂会话是什么意思。
对了,那我如何通过NMS来发现本网段上的可管理设备呢?有什么好的方法吗?
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
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
琢磨悟真知
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-03-25 14:01
自己编写数据编码,访问mib库的服务信息,然后接收回复的所有包文,从中找到目的ip地址,然后在用winsnmp会话的方式一个一个的访问!


这是偶用了1个星期想出来的!给钱!
琢磨悟真知
yellowfinger
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2003-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-25 16:05
哈哈,还有谁能比WYWWWL更热心的呢!
谢谢了
yellowfinger
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2003-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-22 15:34
我找到一个更好的办法
利用WINSNMP的SESSION来构造SNMP包,
然后自己写SOCKET的通信,发送,接收数据包

最后再利用WINSNMP的SESSION来解包.

一切OK,可以实现广播数据的提取,
游客

返回顶部