Posts Tagged ‘Net-SNMP’

C言語でSNMPの送受信

7月 14th, 2010 by KUMA | 1 Comment | Filed in 技術メモ

世の中、SNMP AgentをC言語で実装する記事はあるのだが、SNMPマネージャをC言語で書く記事がないなぁと思って、C言語からコマンドラインのsnmpgetをpopenで呼んだりしてたのだが、オーバーヘッドの大きさに閉口。
本格的に探したところ、サンプルが公式にあったorz

公式のサンプルからさらに最低限必要な処理を抽出する。

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

int main(int argc, char ** argv)
{
 struct snmp_session session;
 struct snmp_session *sess_handle;

 struct snmp_pdu *pdu;
 struct snmp_pdu *response;

 struct variable_list *vars;

 oid id_oid[MAX_OID_LEN];
 oid serial_oid[MAX_OID_LEN];

 size_t id_len = MAX_OID_LEN;
 size_t serial_len = MAX_OID_LEN;

 int status;

 /*********************/

 init_snmp("SNMP Test");

 snmp_sess_init( &session );
 session.version = SNMP_VERSION_1;
 session.community = "public";
 session.community_len = strlen(session.community);
 session.peername = "127.0.0.1";
 sess_handle = snmp_open(&session);

 pdu = snmp_pdu_create(SNMP_MSG_GET);

 read_objid(".1.3.6.1.2.1.1.1.0", id_oid, &id_len);
 snmp_add_null_var(pdu, id_oid, id_len);

 status = snmp_synch_response(sess_handle, pdu, &response);

 for(vars = response->variables; vars; vars = vars->next_variable)
 print_value(vars->name, vars->name_length, vars);

 snmp_free_pdu(response);
 snmp_close(sess_handle);

 return (0);
}

このサンプル見てておもったのだが、snmp_pdu_create()で返ってきたポインタって、開放してないんだよね。
requestとsess_handleは開放してるっぽいAPI呼んでるからいいんだけど…

いろいろグクっても開放しているところが見当たらないから、たぶんsnmp_synch_responseで開放してると思うんだけど、一応ソースコード確認しておくかな・・・

Tags: , ,

CygwinでNET-SNMPの続きの続き

1月 22nd, 2010 by KUMA | コメントは受け付けていません。 | Filed in 技術メモ

こいつの続き。
すでにCygwinではないことを先にわびさせてもらいます。
あと、AgentXも使用するの諦めました。snmpd本体に拡張MIBをリンクさせます。

ぶっちゃけ長いので続きに。

(続きを読む…)

Tags: , ,

CygwinでNet-SNMPの続き

1月 19th, 2010 by KUMA | 1 Comment | Filed in 技術メモ

これの続き

色々やってCygwinでNet-SNMPをまともにビルドして動かすのは無理っぽいという結論になったので、アプローチを変更。

  1. Windowsバイナリ版のNet-SNMPをインストール
  2. ActivePerlもインストール
  3. Windowsバイナリの中にある、ppdファイルをActivePerlのPPMに食わせてSNMPのPerlModuleをインストール
  4. mib2cコマンドがLinuxのコマンド(indentコマンドなど)を使用するのでCygwinの/binをWindowsのPATHに追加
  5. Net-SNMPのWindowsバイナリ版にはmib2c.confが入っていなかったのでLinux版のソースコードからコンフィグファイルをかき集める
  6. 環境変数MIBSにALLを加える

ここまでやってやっとWindowsでmib2cがまともに動くようになった。

特に何もなければAgentXもまともに動いてくれることを期待。まだハマるようならさらに続きをかくかも。

Tags: , , ,

CygwinでNet-SNMP

1月 15th, 2010 by KUMA | 1 Comment | Filed in 技術メモ

CygwinでNet-SNMP(mib2cまで動かす)をインストールするのに(正確には他社の人が)大変苦労したのでメモ。

無駄な手順や要らないモジュールをインストールしてると思いますが大目に見てください。

CygwinのSetup.exeでGCC-4とmake、Perl、SSL、crypt関係のモジュールやライブラリを選択して、インストール。

GCC-4なのは、CygwinのPerlがGCC4でビルドされているため、Net-SNMPをGCC-3でmakeしようとするとバージョンコンフリクトが起きて止まるため。
自力でPerlもビルド出来る人はGCC-3でもいいと思う。

んで、crypt関係のライブラリを意図的に探してインストールしたのは、SSLをつけただけじゃ、Net-SNMPのconfigureでAESなど暗号化関係が片っ端からdisableになるため。

使用したVersionは↓

Cygwin:1.7.1
Net-SNMP:5.5

configureに下を設定
–disable-as-needed
–disable-embedded-perl
–with-perl-modules=~/net-snmp-5.5/perl

っていうところまでやって、今日はもうダメポ。
先は長い・・・

Tags: , ,