2015-05-05 32 views
-3

發送V2陷阱NET SNMP我有以下配置:如何用c

  1. 陷阱OID = .1.3.6.1.4.1.78945.1.1.1.1.1
  2. 陷阱變量的OID = 1.3 .6.1.4.1.78945.1.1.2.1.0,變量類型=字符串
  3. 另一個陷阱變量oid = .1.3.6.1.4.1.78945.1.1.2.4.0,變量類型=整數。
  4. 陷阱監聽IP和端口= 192.168.4.10:1234

如何發送使用在Linux C或C++和NET-SNMP陷阱模塊?我需要一個示例代碼。 net-snmp站點的所有示例代碼都不適用於我。

我的示例代碼:

#include <net-snmp/net-snmp-config.h> 
#include <net-snmp/net-snmp-includes.h> 

oid    objid_id[] = { 1,3,6,1,4,1,78945,1,1,2,4,0}; 
oid    objid_name[] = { 1,3,6,1,4,1,78945,1,1,2,1,0}; 
oid   trap_oid[] = {1,3,6,1,4,1,78945,1,1,1,1,1}; 


int main() 
{ 
    netsnmp_session session, *ss; 
    netsnmp_pdu *pdu, *response; 

    char comm[] = "public"; 
    snmp_sess_init(&session); 
    session.version = SNMP_VERSION_2c; 
    session.community = comm; 
    session.community_len = strlen(session.community); 
    session.peername = "192.168.4.10:1234"; 
    ss = snmp_open(&session); 
    if (!ss) { 
     snmp_sess_perror("ack", &session); 
     exit(1); 
    } 

    pdu = snmp_pdu_create(SNMP_MSG_TRAP2); 
    pdu->community = comm; 
    pdu->community_len = strlen(comm); 
    pdu->enterprise = trap_oid; 
    pdu->enterprise_length = sizeof(trap_oid)/sizeof(oid); 
    pdu->trap_type = SNMP_TRAP_ENTERPRISESPECIFIC; 
    snmp_add_var(pdu, objid_name, sizeof(objid_name)/sizeof(oid), 's', "Test Name"); 
    snmp_add_var(pdu, objid_id, sizeof(objid_id)/sizeof(oid), 'i', "5468"); 

    send_trap_to_sess (ss, pdu); 
    snmp_close(ss); 
    return (0); 
} 

NET-SNMP中網站上的心跳通知的例子讓我感到困惑與在給聽者的細節?

預先感謝您。

+0

[net-snmp示例](http://www.net-snmp.org/dev/agent/examples html的)? – syntagma

+3

請問一個具體的問題,具體告訴我們具體哪個例子出了什麼問題。他們爲其他人工作。因此,如果我們向您發送示例代碼,它可能會(a)與那些官方樣本相同,並且(b)仍然不適合您。我們需要找出_why_就是這樣,當你沒有提供任何有關你的問題的信息時,我們就不能這麼做。 –

+0

我已經添加了我使用的示例代碼。它發送一個陷阱但沒有添加變量。我正在使用MIB瀏覽器接收陷阱 – user2914066

回答

1

它看起來像系統正常運行時間和陷阱oid被添加爲pdu中的第一個變量。

下面的代碼的伎倆:

#include <net-snmp/net-snmp-config.h> 
#include <net-snmp/net-snmp-includes.h> 

oid    objid_sysuptime[] = { 1, 3, 6, 1, 2, 1, 1, 3, 0 }; 
oid    objid_id[] = { 1,3,6,1,4,1,78945,1,1,2,4,0}; 
oid    objid_name[] = { 1,3,6,1,4,1,78945,1,1,2,1,0}; 
oid    trap_oid[] = {1,3,6,1,4,1,78945,1,1,1,1,1}; 


int main() 
{ 
    netsnmp_session session, *ss; 
    netsnmp_pdu *pdu, *response; 
    char *trap = NULL; 

    char comm[] = "public"; 
    snmp_sess_init(&session); 
    session.version = SNMP_VERSION_2c; 
    session.community = comm; 
    session.community_len = strlen(session.community); 
    session.peername = "192.168.4.10:1234"; 
    ss = snmp_open(&session); 
    if (!ss) { 
     snmp_sess_perror("ack", &session); 
     exit(1); 
    } 

    pdu = snmp_pdu_create(SNMP_MSG_TRAP2); 
    pdu->community = comm; 
    pdu->community_len = strlen(comm); 
    pdu->trap_type = SNMP_TRAP_ENTERPRISESPECIFIC; 

    long sysuptime; 
    char csysuptime [20]; 
    sysuptime = get_uptime(); 
    sprintf (csysuptime, "%ld", sysuptime); 
    trap = csysuptime; 
    snmp_add_var (pdu, objid_sysuptime, sizeof (objid_sysuptime)/sizeof(oid),'t', trap); 
    snmp_add_var(pdu, trap_oid, OID_LENGTH(trap_oid), 'o', "1.3.6.1.4.1.78945.1.1.1.1.1"); 
    snmp_add_var(pdu, objid_name, OID_LENGTH(objid_name), 's', "Test Name"); 
    snmp_add_var(pdu, objid_id, OID_LENGTH(objid_id) , 'i', "5468"); 

    send_trap_to_sess (ss, pdu); 
    snmp_close(ss); 
    return (0); 
} 
1

樣品陷阱代碼(notification.c)中的net-snmp不會作爲一個獨立的應用程序(從自己的主即調用)工作。您需要啓動子代理(agentX)守護進程,如net-snmp中的example-demon.c示例所示。內部的例子妖調用init_notification()在notification.c示例代碼中定義的前while循環中例如-demon.c

init_notification(); 
/* your main loop here... */ 
while(keep_running) { 
/* if you use select(), see snmp_select_info() in snmp_api(3) */ 
/*  --- OR --- */ 
agent_check_and_process(1); /* 0 == don't block */ 

}

它調用「send_example_notification(無符號整數clientreg,void *的clientarg)「,每隔30秒使用send_v2trap()發送陷阱。

Compile and build notification.c and example-demon.c into an executable example-demon 
gcc -I. `net-snmp-config --cflags` -c -o notification.o notification.c 
gcc -I. `net-snmp-config --cflags` -c -o example-demon.o example-demon.c 
gcc -o example-demon notification.o example-demon.o `net-snmp-config --agent-libs` 

啓動例如妖,你應該看到的V2陷阱每30秒發送和SNMP管理器收到的(假設你已經在snmpsink等在snmpd.conf文件爲你的主機IP設置)。

你有什麼也是有效的,並使用自己的代碼發送陷阱的另一種方式。 「snmptrap」命令也可用於將陷阱作爲獨立應用程序或從外殼等發送出去。