2017-07-25 118 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字符串,而不是二進制字符串。