为了帮助用户,我希望我的代码能够在 LAN 上发现 Oracle 数据库。我想通过首先检测所有主机,然后检查每个主机以查看它是否正在侦听 Oracle 的默认端口来做到这一点。
任何想法如何去做?最好用Java,但任何语言或算法都可以。
为了帮助用户,我希望我的代码能够在 LAN 上发现 Oracle 数据库。我想通过首先检测所有主机,然后检查每个主机以查看它是否正在侦听 Oracle 的默认端口来做到这一点。
任何想法如何去做?最好用Java,但任何语言或算法都可以。
你在使用 DHCP 吗?如果是这样,您的 DHCP 服务器会列出已发出的租约。这应该可以为您提供 LAN 上的主机列表。然后尝试在每台主机上打开到 Oracle 端口的连接,看看它是否接受连接。
用半打左右的代码来实现一个 shell 脚本应该很简单。对于这样的事情,Java 似乎有点矫枉过正。遍历lease文件,从每个lease中获取IP,telnet到Oracle端口;如果它连接,断开连接并将 IP 打印到标准输出。
如果您想保持平台独立,并且除非您可以访问某种列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个 IP 地址 - 不妨尝试连接到他们每个人的Oracle端口。
这种方法有很多问题:
如果您正在寻找一个工具Loo@Lan可以为您做这件事。不幸的是,没有可用的资源...
正如 brazzy 指出的那样,扫描主机可能会导致问题,特别是如果您的扫描仪中有错误。
更好的方法可能是让数据库的所有者在某个地方注册它们,例如在本地 DNS 服务中(或者 Oracle 是否支持 zeroconf?),或者只是在某个 Intranet 网页或 wiki 上。
您最好将 SID 名称/地址注册到具有固定地址的某些服务器(可能使用简单的 Web 服务),然后从那里查询列表。另一种方法是通过扫描一个或多个子网的暴力破解(@brazzy 解释),但这并不是一件好事。
所有这些聪明的答案都是许多公司不使用默认端口的原因。你知道,为每个数据库使用不同的端口是完全可能的。