Отправить net-snmp ИНФОРМАЦИЮ, вызывающую send_v2trap() в C

#c #net-snmp

#c #net-snmp

Вопрос:

В этом руководстве объясняется, как отправить SNMP-ловушку с вызовом функции send_v2trap() в C.

Как мне отправить SNMP-ИНФОРМАЦИЮ вместо этого? На странице руководства написано, что я могу отправлять сообщения, но не указано, как это сделать.

Ответ №1:

Разобрался сам 🙂

send_v2trap(3) сообщает:

 send_v2trap() uses the supplied list of variable bindings to form an SNMPv2 trap,
which is sent to SNMPv2-capable sinks on the configured list.
An equivalent INFORM is sent to the configuredq list of inform sinks.
 

но не говорит, что это за настроенный список;

Вместо этого snmpd.conf(5) объясняет, что я должен отредактировать /etc/snmp/snmpd.conf и добавить строки, указывающие, какие хосты будут получать сообщения. Например, следующее заставляет send_v2trap() отправлять ИНФОРМАЦИЮ на хост1 и хост2:

 informsink host1 public 162
informsink host2 public 162
 

Ответ №2:

На самом деле, вы можете зарегистрировать приемники внутри C с помощью net-snmp, agent_trap.h функция:

 void            snmpd_parse_config_informsink(const char *, char *);
 

где я полагаю, что первый аргумент не используется, а второй аргумент вы можете записать как следующий пример на C :

 //sink declarations
String serverAddress = "127.0.0.1";
int serverPort = 162;
String community = "public";

//mount sink string 
string cptrS = serverAddress   ":"   to_string(serverPort)    " tn"   community; 

//transform string to char*
char * cptr = amp;cptrS[0]; 

//register the sink 
snmpd_parse_config_informsink(NULL,cptr);
 

теперь вы можете вызвать функцию send_v2trap() и отправить с помощью inform переменные, установленные с помощью snmp_varlist_add_variable() .

Ссылка: http://www.net-snmp.org/dev/agent/agent__trap_8c-source.html