2017-07-25 1 views
0

L'idée de mon socket est de recevoir et d'envoyer des paquets SNMP - GetRequest/GetResponse. Cependant, la prise déjà recevoir des paquets SNMPComment envoyer un paquet SNMP via UDP

... 
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); 
... 

Maintenant, je veux répondre à la demande d'un SNMP paquet qui est représente sous forme de chaîne. Remarque: La réponse contient un GetResponse-PDU (a2).

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

La valeur de retour ou r est 4 et est certainement mal parce que ma réponse est plus grande que SNMP paquet packet 4. Pourquoi, parce que c'est un pointeur ?. En outre, la réponse SNMP-Packet packet n'est pas envoyée en tant que paquet SNMP, elle est différente de packet et n'est pas interprétée comme un paquet SNMP dans Wireshark. Il ressemble à ça:

enter image description here

Comment puis-je envoyer un SNMP paquet valide?

+1

Si vous travaillez sous Linux, vous pouvez utiliser 'libsnmp-dev' une bibliothèque SNMP. Vous pouvez utiliser les API de cette bibliothèque pour créer un paquet SNMP. Mais vous devez savoir comment l'utiliser. – Gaurav

+0

Oui, je travaille sur Linux, merci pour l'indice. – Sam

+0

@GauravPathak Savez-vous où je peux trouver les sources ou une documentation de 'libsnmp-dev'? – Sam

Répondre

0

Votre problème est la valeur strlen (paquet), qui est 4 en raison de l'octet 00. strlen est destiné à être utilisé avec des chaînes ASCII, pas des chaînes binaires.