- 论坛徽章:
- 0
|
本人在学校公共机房,一台装有linux的pc机,想从该主机访问该子网的路由器的路由信息。(snmp)
在Linux上运行一个简单程序,该程序调用MIB库的信息
弱问下 本机上上没装net snmp,能行吗?
该程序运行后,没反应,用tcpdump抓包,有包发送,这是什么情况
《网上转载》
# include 〈stdio.h〉
# include 〈sys/types.h〉
# include 〈sys/socket.h〉
# include 〈netinet/in.h〉
# include 〈netdb.h〉
# define snmp_port 161 /* SNMP UDP 端口号*/
# define destaddress “192. 168. 1.16” /* 访问目标机的IP 地址*/
struct sockaddr_in dest;
struct hostent *hp;
int sockfd;
register int i, n;
int fromlen;
int packsize= 43;
u_char
sendpack [100 ]= {0x30, 0x37, 2, 1, 0, 4, 6, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63,0xa0, 0x26, 2, 4,0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 0x30, 0x1c,
0x30,0x0c, 6, 8, 0x2b, 6, 1, 2, 1, 1, 1, 0, 5, 0};/* get_ request 报文编码*/
u_char recvpack [150]; /* 收到get_ response 报文编码*/
main( )
{
if ((hp=gethostbyname(destaddress))== 0)
{
printf (“unknown host”) ;
exit (1) ;
}
dest.sin_family= AF_INET;
dest.sin_port= htons(snmp_port) ;
memcpy((char*)&dest.sin_addr, (char*)hp->h_addr, hp->h_length) ;
if ((sockfd=socket(AF_INET, SOCK_ DGRAM , 17)) {
printf (“can`t create udp socket”) ;
exit (1) ;
}
/* 以上生成udp 套接字*/
i= sendto (sockfd, sendpack, packsize, 0, (struct sockaddr* )&dest, sizeof (dest)) ;
if(i{
printf (“sendto error”) ;
exit(1);
}
if (i!=packsize)
{
printf(“wrote %d bytes, return= %d”, packsize, i) ;
exit (1)
}
/* 发送udp 报文*/
puts (“receiving now ……”) ;
fromlen= sizeof(dest) ;
if ((n= recvfrom (sockfd, recvpack, sizeof ( recvpack) , 0, (struct sockaddr
*)&dest,&fromlen) ) {
printf (“recv from error!”) ;
exit (1) ;
}
/* 接收udp 报文*/
for ( i= 0; iprintf (“%X”,recvpack) ;
close(sockfd) ;
} |
|