[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>

原です。

19 messages 2002/12/06

[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>

ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい

11 messages 2002/12/16

[ruby-list:36796] Ruby SNMPについて

From: Tadashi Oh-Ya <toy@...>
Date: 2002-12-17 10:59:00 UTC
List: ruby-list #36796
おおやと申します。

RubyでSNMPが使いたくて
 http://www.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/lib/snmp/
からソースを頂いて試してみました。
# Akinori MUSHA 様ありがとうございます。

OCTET STRING(MACアドレスなど)がうまくデコードできないよう
でしたので、UCD-SNMP-4.2.6/appsのソースを見たりして、直して
みたところ、一応 OCTET が表示されるようにはなったのですが、
表示形式がうまく行きません。


<最初に得られた出力>
1.3.6.1.2.1.17.1.1.0 =^@F"vN (コントロールコードは無視してください)

<ソースに手を入れた後で得られる出力>
1.3.6.1.2.1.17.1.1.0 = 80462276ce

<欲しい出力>
1.3.6.1.2.1.17.1.1.0 = 08 00 46 22 76 ce 


プログラム初心者で恥ずかしいのですが、diff -cの結果を添付
いたします。
どなたかアドバイスいただけましたら嬉しいです。

-------------------------------ここから-------------------------------
*** snmp_sess.c.orig	Sat Dec 14 11:55:27 2002
--- snmp_sess.c	Tue Dec 17 19:13:26 2002
***************
*** 525,537 ****
    struct variable_list *var;
    size_t i;
    VALUE ary;
  
    Data_Get_Struct(csnmpvar, struct variable_list, var);
    switch(var->type) {
    case ASN_INTEGER:
      return INT2NUM(*var->val.integer);
    case ASN_OCTET_STR:
!     return rb_str_new(var->val.string, var->val_len);
    case ASN_OPAQUE:
      return Qnil;
    case ASN_OBJECT_ID:
--- 525,555 ----
    struct variable_list *var;
    size_t i;
    VALUE ary;
+   int ishex = 0, x = 0;
+   u_char *cp;
  
    Data_Get_Struct(csnmpvar, struct variable_list, var);
    switch(var->type) {
    case ASN_INTEGER:
      return INT2NUM(*var->val.integer);
    case ASN_OCTET_STR:
!     ishex = 0;
!     for(cp = var->val.string, x = 0; x < (int)var->val_len; x++, cp++) {
!       if (!(isprint(*cp) || isspace(*cp))) {
! 	ishex = 1;
!       }
!     }
! 
!     if(ishex) { /* value is hex */
!       /* ary = rb_ary_new2((int)var->val_len); */
!       ary = rb_ary_new();
!       for(cp = var->val.string, x = 0; x < (int)var->val_len; x++, cp++) {
!         rb_ary_push(ary, rb_big2str(rb_int2inum(*cp), 16));
!       }
!       return ary;
!     } else { /* value is string */
!       return rb_str_new(var->val.string, var->val_len);
!     }
    case ASN_OPAQUE:
      return Qnil;
    case ASN_OBJECT_ID:
-------------------------------ここまで-------------------------------

In This Thread