2017-07-25 216 views
0

我的套接字的想法是接收和发送SNMP数据包 - GetRequest/GetResponse。但是,套接字已经接收到SNMP数据包如何通过UDP发送SNMP数据包

... 
unsigned char buf[8192]; 
... 
for (;;) { 
    // Receive snmp message from snmp manager 
    recv_len = recvfrom(my_socket, buf, BUFSIZE, 0, (struct sockaddr 
*)&remote_addr, &addr_len); 
... 

现在我想通过一个表示为字符串的SNMP-Packet来回答请求。注意:响应包含GetResponse-PDUa2)。

unsigned char * packet = "302902010004067075626c6963a21c..."; 
int r = sendto(my_socket, packet, strlen(packet), 0, (struct sockaddr *)&remote_addr, addr_len); 

返回值或r4,绝对是错误的,因为我的回应SNMP包packet是大于4,为什么,因为它是一个指针?

此外,响应SNMP-Packet packet不作为SNMP-Packet发送,它与packet相比看起来不同,并且不会被解释为Wireshark中的SNMP-Packet。它看起来像:

enter image description here

我怎么能发送一个有效的SNMP的包?

+1

如果你在Linux上工作,你可以使用'libsnmp-dev'的一个SNMP库。您可以使用该库的API创建SNMP数据包。 但您需要了解如何使用它。 – Gaurav

+0

是的,我在Linux上工作,感谢提示。 – Sam

+0

@GauravPathak你知道我在哪里可以找到libsnmp-dev的源代码或文档吗? – Sam

回答

0

你的问题是strlen(分组)值,由于00字节,这是4。 strlen旨在用于ASCII字符串,而不是二进制字符串。