题
为了帮助用户,我希望我的代码在LAN上发现Oracle数据库。我想通过首先检测所有主机来做到这一点,然后检查每个主机以查看它是否在Oracle的默认端口上侦听。
有什么想法如何解决?最好是在Java中,但是任何语言或算法都可以。
解决方案
您正在使用DHCP吗?如果是这样,您的DHCP服务器具有已通过的租赁列表。您应该为LAN上的主机列表列出。然后尝试打开与每个主机上每个主机上的Oracle端口的连接,并查看是否接受连接。
用六行左右的外壳脚本实现应该非常简单。 Java似乎对这样的事情好起来。通过租赁文件循环,从每种租赁中获取IP,然后telnet到Oracle端口;如果连接,请断开连接并将IP打印为标准。
其他提示
如果您想保持独立于平台,并且除非您可以访问某些列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个IP地址 - 也可以尝试连接到它们每个上的Oracle端口。
这种方法有很多问题:
- 只会通过本地网络进行搜索,这可能只是LAN的一小部分(如果有很多子网的大型公司)
- 可能需要很长时间(您绝对想减少连接尝试的超时,但是如果某人将LAN配置为班级A网络,它仍然需要永远)
- 可以触发各种警报,例如桌面用户的个人防火墙和入侵检测系统 - 因为您正在做一些试图利用Oracle服务器中的安全孔的事情
正如Brazzy指出的那样,扫描主机可能会引起问题,尤其是如果您的扫描仪中存在错误。
一种更好的方法可能是让数据库的所有者在某个地方注册它们,例如在本地DNS服务中(或者Oracle提供Zeroconf支持?),或者仅在某些Intranet网页或Wiki上。
您最好将SID名称/地址注册到具有固定地址的某些服务器(也许具有简单的Web服务),然后从那里查询列表。另一种方法是通过扫描一个或多个子网扫描蛮力的方法(由@Brazzy解释),但这并不是一件好事。
如果您正在寻找工具 loo@lan 可以为您做。不幸的是没有可用的来源...
所有这些明智的答案都是许多公司不使用默认端口的原因。您知道,在每个数据库中使用其他端口是完全可能的。
不隶属于 StackOverflow