如何确定远端主机的snmp服务是否开启

    最近几天在做一件事情:确定远端主机是否开启了snmp服务。最初觉得这并不是一件很难的事情,但是世界上大多数的事情都会事与愿违,随着慢慢深入,这个问题开始逐渐展露她狰狞的面容。(呵呵,最近恐怖小说看的多了点)。

   一开始,我觉得这个问题是一个普遍的问题,进一步理解,这个问题是这样的:通过标准snmp我向远端主机发出询问信息,如mib为sysDesc节点,如 果该主机没有安装SNMP服务,那么我得到了一个timeout的response;如果我使用了一个错误的community那么我也会得到一个 timeout的response,我希望能够区分这两种情况。
    开始我觉得第三方对SNMP进行封装的JAR可能已经解决了这个问题如snmp4j这个很受好评的开源项目。但是在API中并没有找到适用的。再次查找失 败后遂给snmp4j的mail list发信询问这个问题,很快得到了答复:cannot distinguish them (with any SNMP entity), because that is behavior is the desired one,为什么呢?这一切都是为什么呢?忽然醒悟该死的SNMP使用的是UDP协议(161,162)。而该死的UDP协议是个极其不负责任但是却很有效 率的协议,简单来说就是你只管发,UDP端口只管收,至于收到没,还是收到的是个错误的包,它都不会告诉你,也不保证你发出去的一定能收到(相对于TCP 协议,很负责人的如三次握手)。这就是在你用了错误的community后不能奢望SNMP能告诉你,你只会得到一个timeout。
   OK,这条路失败了,但是我知道了根本原因是SNMP使用了UDP协议,那就从UDP端口探测入手。google一场,我檫!UDP端口探测可是个麻烦的事情,老外有篇文章:The trouble with UDP port scanning, 讲的很透彻了。UDP端口探测所依赖的基本原理是:如果向一个未被启用的UDP端口发送包,该端口所在系统会回发一个端口不可达ICMP报文,但是 1.这个ICMP报文并不是强制发送的,某些系统不会发送。2.这个报文可能被该主机的防火墙没收。另外还有若干因素,总之,UDP端口探测有很大的不确定性,抓瞎啊!
    至今,这个问题未果,另NMAP这个工具很厉害!
    本文仅记录这个未完成的问题,待有结果了再行续写, 晚了,睡觉...... 如何确定远端主机的snmp服务是否开启
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值