SNMP++中文显示

在给公司做网管程序的时候,由于公司的有些二层设备的设备名称有中文字符,而HP公司的snmp++在get的时候会显示中文为乱码。尝试在C#下将snmp++获得中文乱码字符串强制格式转换(java乱码的解决方案),可是没有搞定。没有办法了,只有改snmp++的源代码了,真是不看不知道,一看吓一跳。在hp的snmp_pp.doc,是这样描述snmp++中的字符串的,
     When printing out an OctetStr object,  the char * or get_printable() member functions automatically invoke the get_printable_hex() member function if the octet string contains any character which is non ASCII.

    我们可以看到,snmp++只显示ascii字符.而ascii是单字节的,而中文字符是dbcs.好了找到了症结所在了,哈哈,在跑到snmp++的源代码上去看了一下,果然如此,下面是其源代码:

const char *OctetStr::get_printable() const
{
 for (unsigned long i=0; i < smival.value.string.len; i++)
  {
    if ((smival.value.string.ptr[i] != '/r')&&
 (smival.value.string.ptr[i] != '/n')
 && (isprint((int) (smival.value.string.ptr[i]))==0))
      return get_printable_hex();
   }

  OctetStr *ncthis = PP_CONST_CAST(OctetStr*, this);
  if (output_buffer_len < smival.value.string.len + 1)
  {
    if (output_buffer) delete [] ncthis->output_buffer;

    ncthis->output_buffer = new char[smival.value.string.len + 1]; 
    if (ncthis->output_buffer)
      ncthis->output_buffer_len = smival.value.string.len + 1;
  }
  if (smival.value.string.len)
    MEMCPY(ncthis->output_buffer,
    smival.value.string.ptr, (unsigned int) smival.value.string.len);
  ncthis->output_buffer[smival.value.string.len] = '/0';
  return output_buffer;
}

它是用isprint函数来判断字符的合法性,而msdn中isprint()是判断单字节,所以遇到多姿节时会调用get_printable_hex(),得出16进制的字符串,从而出乱码,这样就有两种改进方案了.
一是:将判断直接删去,我就是这样做的,好像没有什么问题了,
二是:将
for (unsigned long i=0; i < smival.value.string.len; i++)
  {
    if ((smival.value.string.ptr[i] != '/r')&&
 (smival.value.string.ptr[i] != '/n')
 && (isprint((int) (smival.value.string.ptr[i]))==0))
      return get_printable_hex();
   }
改为:
for (unsigned long i=0; i < smival.value.string.len; i++)
  {
    if ((smival.value.string.ptr[i] != '/r')&&
 (smival.value.string.ptr[i] != '/n')
 && (isprint((int) (smival.value.string.ptr[i]))==0)
   && (iswprint((int) (smival.value.string.ptr[i]))==0))
      return get_printable_hex();
   }
我没有试验,不过我想这样也能搞定的
 

### 回答1: Paessler SNMP Tester是一款用于测试网络设备和监控系统的工具,它可以检测和验证SNMP代理是否正常工作,并帮助用户诊断和解决SNMP相关问题。 Paessler SNMP Tester的主要功能包括发送SNMP请求、接收SNMP回复和展示SNMP设备返回的数据。用户可以通过该工具传递自定义的SNMP命令和OID来测试SNMP代理的功能和性能。用户可以选择不同的SNMP版本(如SNMPv1、SNMPv2c和SNMPv3)和安全协议(如MD5和SHA-1)进行测试。 使用Paessler SNMP Tester,用户可以轻松地测试SNMP设备的连通性和响应时间,并监控SNMP设备的性能和健康状态。该工具提供直观的用户界面,显示SNMP设备返回的数据以及相关的错误和警告信息,使用户能够快速识别和解决问题。 此外,Paessler SNMP Tester还提供了日志功能,用于记录SNMP请求和响应的详细信息,以便用户进行故障排除和分析。用户可以将日志保存为文本文件或导出为HTML文件,方便后续查阅和分享。 总而言之,Paessler SNMP Tester是一款功能强大、易于使用的网络测试工具,它可以帮助用户测试和监控SNMP设备,并提供详细的信息和报告,以便用户进行故障排除和维护。 ### 回答2: Paessler SNMP Tester 是一款功能强大的网络管理工具,它可以用于测试和监控网络设备的SNMP功能。SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的协议。 使用Paessler SNMP Tester,您可以轻松地测试SNMP代理设备,例如路由器、交换机、服务器等。通过向设备发送SNMP请求,您可以获取设备的各种信息,如系统状态、CPU利用率、内存使用情况等。同时,您还可以发送SNMP Trap消息来监测设备的事件和警报。 Paessler SNMP Tester 提供了一个直观的界面,让您方便地进行测试和配置。您只需要指定要测试的设备的IP地址和SNMP团体字符串,然后选择要执行的SNMP操作,如GET、GETNEXT、SET等。在执行操作后,程序将显示设备返回的响应和数据,并根据结果显示操作是否成功。 除了测试设备的SNMP功能之外,Paessler SNMP Tester 还提供了其他实用的功能。例如,您可以使用它来验证SNMP代理设备的访问权限和安全设置。此外,您还可以使用它来检测网络故障和故障源,以便快速解决问题。 总之,Paessler SNMP Tester 是一款功能强大、易于使用的网络管理工具,它可以帮助您测试和监控网络设备的SNMP功能,提高网络管理的效率和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值