如何通过 UDP 发送 SNMP 数据包

How to send a SNMP-Packet via UDP

我的套接字的想法是接收和发送 SNMP 数据包 - GetRequest/GetResponse。但是,套接字已经收到 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 数据包来回答请求。注意:响应包含 GetResponse-PDU (a2).

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

return 值或 r4 并且肯定是错误的,因为我响应的 SNMP 数据包 packet 大于 4。为什么,因为它是一个指针?。

此外,响应 SNMP 数据包 packet 未作为 SNMP 数据包发送,它看起来与 packet 不同,并且在 Wireshark 中未被解释为 SNMP 数据包。看起来像这样:

如何发送有效的 SNMP 数据包?

您的问题是 strlen(packet) 值,由于 00 字节而为 4。 strlen 用于 ASCII 字符串,而不是二进制字符串。