测试组报上来一个 BUG,说页面 SNMP 采集页面显示不出来,提示检查后台程序是否启动。但不是所有机器都会报这个错误,只有这台机器报。环境是 fedora 6。
查了一下代码,没有问题。要问题机的命令行下输入 snmpget .... localhost 命令也没有问题,可以取到数据,那问题出在哪儿呢?
代码中在决定到哪个 IP 地址 GET 数据的方法里面用了 InetAddress.getLocalHost().getHostAddress() 取的本地 IP,难道是它有问题。于是把取得的 IP 地址打了出来,是 66.xx.xx.xx 的 IP,但实际本机 IP 是 192.168.11.185,怎么可能呢?难道是这个方法不会区分哪个 IP 才是真实 IP (这台机器有多个 IP 地址,有虚通道IP),用 ifconfig 命令查也没有这个 66 网段的IP呀!于是 PING 这个 66 网段的 IP 地址,还能 ping 通!又 ping 了一下本机的主机名(hostname),结果 PING 到了 66 这个 IP 上!嗯,问题有了结论了。
查看 /etc/hosts 文件,里面果然有一条本机名和 66.xx.xx.xx IP 对应的记录。把它注释掉,然后修改了一下本机的主机名,又在 hosts 文件中加入主机名和 127.0.0.1 的对应,问题解决了。
原来对 InetAddress.getLocalHost().getHostAddress() 方法的实现方法不是很清楚,就知道它能找到本机 IP,原来它是依靠本机的机器名去查询的 IP 地址,和 ping `hostname` 返回的 IP 地址是同一个,并不是 ifconfig 方法得到的 eth0 IP 地址。
这个问题我虽然是在 JAVA 中遇到的,但它在 LINUX 操作系统上排查问题方面还是有普遍意义的.
阅读(15289) | 评论(1) | 转发(0) |