Beispiel #1
0
void oid_add(const char* name, guint oid_len, guint32 *subids) {
	g_assert(subids && *subids <= 2);
	if (oid_len) {
		D(3,("\tOid (from subids): %s %s ",name?name:"NULL", oid_subid2string(subids,oid_len)));
		add_oid(name,OID_KIND_UNKNOWN,NULL,NULL,oid_len,subids);
	} else {
		D(1,("Failed to add Oid: %s (from subids)",name?name:"NULL"));
	}
}
Beispiel #2
0
extern void oid_add_from_encoded(const char* name, const guint8 *oid, gint oid_len) {
	guint32* subids;
	guint subids_len = oid_encoded2subid(oid, oid_len, &subids);

	if (subids_len) {
		D(3,("\tOid (from encoded): %s %s ",name, oid_subid2string(subids,subids_len)));
		add_oid(name,OID_KIND_UNKNOWN,NULL,NULL,subids_len,subids);
	} else {
		D(1,("Failed to add Oid: %s [%d]%s ",name?name:"NULL", oid_len,bytestring_to_str(oid, oid_len, ':')));
	}
}
Beispiel #3
0
void oid_add_from_string(const char* name, const gchar *oid_str) {
	guint32* subids;
	guint oid_len = oid_string2subid(oid_str, &subids);

	if (oid_len) {
		D(3,("\tOid (from string): %s %s ",name?name:"NULL", oid_subid2string(subids,oid_len)));
		add_oid(name,OID_KIND_UNKNOWN,NULL,NULL,oid_len,subids);
	} else {
		D(1,("Failed to add Oid: %s %s ",name?name:"NULL", oid_str?oid_str:NULL));
	}
}
Beispiel #4
0
extern void oid_add_from_encoded(const char* name, const guint8 *oid, gint oid_len) {
	guint32* subids = NULL;
	guint subids_len = oid_encoded2subid(NULL, oid, oid_len, &subids);

	if (subids_len) {
		gchar* sub = oid_subid2string(NULL, subids,subids_len);
		D(3,("\tOid (from encoded): %s %s ",name, sub));
		add_oid(name,OID_KIND_UNKNOWN,NULL,NULL,subids_len,subids);
		wmem_free(NULL, sub);
	} else {
		gchar* bytestr = bytestring_to_str(NULL, oid, oid_len, ':');
		D(1,("Failed to add Oid: %s [%d]%s ",name?name:"NULL", oid_len, bytestr));
		wmem_free(NULL, bytestr);
	}
	wmem_free(NULL, subids);
}
Beispiel #5
0
void add_oidstr(const char* oidstr, const char* name)
   {
   add_oid(OID(oidstr), name);
   }
Beispiel #6
0
int main()
{
	time(&startup_time);
	int sock;
	socklen_t addr_len;
	int bytes_read;
	char recv_data[1024];
	struct sockaddr_in server_addr , client_addr;

    oid_db = create_oid_db();

    add_oid(oid_db, (unsigned char *) "1.3.6.1.2.1.1.1.0", PRIMV_OCTSTR, description);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.2.1.1.3.0", PRIMV_TIMTICK, &timeticks);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.1.1.0", PRIMV_OCTSTR, MasterName);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.1.2.0", PRIMV_OCTSTR, MasterLocation);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.1.3.0", PRIMV_INT, &NumberOfAgents);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.1.1.0", PRIMV_OCTSTR, PID);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.1.2.0", PRIMV_OCTSTR, HW);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.1.3.0", PRIMV_OCTSTR, SW);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.1.4.0", PRIMV_OCTSTR, SN);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.1.5.0", PRIMV_OCTSTR, ID);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.1.6.0", PRIMV_INT, &UB);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.2.1.0", PRIMV_INT, &POW);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.2.2.0", PRIMV_INT, &WORK);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.2.3.0", PRIMV_INT, &FREQ);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.2.4.0", PRIMV_INT, &VRMS);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.2.5.0", PRIMV_INT, &IRMS);
    add_oid(oid_db, (unsigned char *) "1.3.6.1.4.1.99.2.1.2.6.0", PRIMV_INT, &LOAD);

    print_oid_db(oid_db);

	if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
	{
	    perror("Socket");
	    exit(1);
	}

	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(161); 
	server_addr.sin_addr.s_addr = INADDR_ANY;
	bzero(&(server_addr.sin_zero),8);

	if (bind(sock,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1)
	{
	    perror("Bind");
	    exit(1);
	}
	addr_len = sizeof(struct sockaddr);
	printf("\nWaiting for SNMP-clients on port 161");
	fflush(stdout);

    while (1)
    {
        bytes_read = recvfrom(sock, recv_data, 1024, 0, (struct sockaddr *) &client_addr, &addr_len);
	recv_data[bytes_read] = '\0';

        printf("\n(%s , %d)\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
	printf("\n");

        struct snmp_message_rx *snmp_msg = create_snmp_message_rx((unsigned char *) &recv_data[0]);

	if(snmp_msg!=NULL)
	{
	    disp_snmp_message_rx(snmp_msg);
	    struct snmp_pdu_rx* snmp_pdu=create_snmp_pdu_rx(snmp_msg->snmp_pdu);

	    if(snmp_pdu!=NULL)
	    {
		printf("\n");
		disp_snmp_pdu_rx(snmp_pdu);
                struct varbind_list_rx *varbind_list = create_varbind_list_rx(snmp_pdu->varbindings);

		printf("\n");
		disp_varbind_list_rx(varbind_list);


		unsigned int a=5; //testing
                struct varbind *varbind = create_varbind(varbind_list->varbind_list[0]->oid, PRIMV_INT, &a);

		printf("\n");
		disp_varbind(varbind);

                process_varbind_list(varbind_list, snmp_pdu->snmp_pdu_type);

		printf("\n");
		disp_varbind_list_rx(varbind_list);

                /* Response */
                struct varbind_list_tx *varbind_list_to_send = create_varbind_list_tx(varbind_list);
                struct snmp_pdu_tx *snmp_pdu_tx = create_snmp_pdu_tx(PDU_GET_RESP, snmp_pdu->request_id, 0x00,0x00, varbind_list_to_send);
		printf("\n");

                struct snmp_message_tx *snmp_msg_tx = create_snmp_message_tx(snmp_msg->community,snmp_pdu_tx);
                sendPacket(client_addr.sin_addr, ntohs(client_addr.sin_port), sock,snmp_msg_tx);
		clr_snmp_message_tx(snmp_msg_tx);
		clr_snmp_pdu_tx(snmp_pdu_tx);
		clr_varbind_list_tx(varbind_list_to_send);
		clr_varbind(varbind);
		clr_varbind_list_rx(varbind_list);
		clr_snmp_pdu_rx(snmp_pdu);

	    } // if snmp_pdu!=NULL
	    clr_snmp_message_rx(snmp_msg);

	} // if snmp_msg!=NULL
	fflush(stdout);

    } // While

return 0;
}