erlang snmp初学(1)

博主分享了自己在学习Erlang SNMP模块时的经历,起初遇到困难无法运行示例,但在论坛网友的指导下逐渐取得进展。文章指出Erlang的SNMP实现基于gen_server,并涉及多个内部进程,因此使用上较为复杂,需要深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前搞erlang的snmp例子死活搞不通,后来放弃了.

经过坛友的指点,再逐渐尝试一下.

%% coding: latin-1
-module(snmpcl).

-behaviour(application).

%% application callbacks
-export([main/1,start/0,start/1,start/2, stop/1]).

%% API
-export([walk/2, walk/3, walk/4]).

main(_)->
	start(["localhost"]).
	

start()->
	start(["localhost"]).

start([Addr])->
	start(normal,[]),
	walk(Addr,[1,3,6,1,2,1,1,5,0]),
	stop(normal).
		
start(normal, _StartArgs) ->
    snmpm:start(),
    %%snmpm:register_user(snmpcl_user, snmpcl_user, undefined),
    {ok, self()}.

stop(_State) ->  
	%%snmpm:unregister_agent(snmpcl_user, "snmpcl_user"),
	
	snmpm:stop(),
	
	timer:sleep(100),  
	%%snmpm_config:stop(),
	
	init:stop().
	%%ok.

walk(Address, Oid) ->
    walk(v2, Address, "public", Oid).

walk(Address, Community, Oid) ->
    walk(v2, Address, Community, Oid).

walk(Version, Address, Community, Oid) ->

    Options =
	[{engine_id, "the engine"},
	 {community, Community},
	 {version, Version}
	| case Address of
	      {Host, Port} ->
		  [{address, Host},
		   {port, Port}
		  ];
	      Host ->
		  [{address, Host}]
	  end
	],
	  snmpm:register_user(snmpcl_user, snmpcl_user, undefined),
    case snmpm:which_agents(snmpcl_user) of
        [] -> ok;
        _ ->
            snmpm:unregister_agent(snmpcl_user, "snmpcl_user")
    end,
    snmpm:register_agent(snmpcl_user, "snmpcl_user", Options),
    case snmpm:sync_get(snmpcl_user, "snmpcl_user", [Oid]) of
        {ok,  {_, _, Result}, _Remaining} ->
            [{_, Oid, Type, Value, _}] = Result,
             io:format("~p~n",[Result]), 
             %%snmpm:unregister_agent(snmpcl_user, "snmpcl_user"),
            {Oid, Type, Value};
        {error, Reason} ->
            error_logger:error_msg("Can't send request to ~s due to ~p~n",
                [Address, Reason])
    end.


初步可以跑通

4> c("snmpcl.erl").
{ok,snmpcl}
5> c("snmpcl_user.erl").
{ok,snmpcl_user}
6> snmpcl:start(normal, []),
7> snmpcl:walk("localhost",[1,3,6,1,2,1,1,5,0]).
{[1,3,6,1,2,1,1,5,0],'OCTET STRING',"nb0411"}


erlang的snmp是基于gen_server框架.使用时会启动不少内部进程.

使用比较复杂.

还需要细致学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值