如何通过 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 值或 r
是 4
并且肯定是错误的,因为我响应的 SNMP 数据包 packet
大于 4。为什么,因为它是一个指针?。
此外,响应 SNMP 数据包 packet
未作为 SNMP 数据包发送,它看起来与 packet
不同,并且在 Wireshark 中未被解释为 SNMP 数据包。看起来像这样:
如何发送有效的 SNMP 数据包?
您的问题是 strlen(packet) 值,由于 00 字节而为 4。
strlen 用于 ASCII 字符串,而不是二进制字符串。
我的套接字的想法是接收和发送 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 值或 r
是 4
并且肯定是错误的,因为我响应的 SNMP 数据包 packet
大于 4。为什么,因为它是一个指针?。
此外,响应 SNMP 数据包 packet
未作为 SNMP 数据包发送,它看起来与 packet
不同,并且在 Wireshark 中未被解释为 SNMP 数据包。看起来像这样:
如何发送有效的 SNMP 数据包?
您的问题是 strlen(packet) 值,由于 00 字节而为 4。 strlen 用于 ASCII 字符串,而不是二进制字符串。