为了帮助用户,我希望我的代码在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 可以为您做。不幸的是没有可用的来源...

所有这些明智的答案都是许多公司不使用默认端口的原因。您知道,在每个数据库中使用其他端口是完全可能的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top