为了帮助用户,我希望我的代码能够在局域网上发现Oracle数据库。我想通过首先检测所有主机,然后检查每个主机以查看它是否正在监听Oracle的默认端口来实现此目的。
任何想法如何解决这个问题?最好是Java,但任何语言或算法都可以。
答案 0 :(得分:2)
您使用的是DHCP吗?如果是这样,您的DHCP服务器有一个已经传递的租约列表。这应该是你在LAN上的主机列表。然后尝试打开与每个主机上的Oracle端口的连接,并查看它是否接受连接。
实现作为一个有大约六行左右的shell脚本应该非常简单。对于像这样的东西,Java似乎有些过分。循环访问租约文件,从每个租约中获取IP,然后telnet到Oracle端口;如果它连接,断开连接并将IP打印到标准输出。
答案 1 :(得分:1)
如果你想保持平台独立,除非你有权访问列出主机的某种数据库,获取列表的唯一方法是尝试本地网络中的每个IP地址 - 不妨试试连接到每个端口上的Oracle端口。
这种方法存在很多问题:
答案 2 :(得分:0)
如果您正在寻找工具Loo@Lan,可以为您执行此操作。不幸的是,没有可用的资源......
答案 3 :(得分:0)
正如brazzy指出的那样,扫描主机可能会导致问题,尤其是在扫描仪出现错误的情况下。
更好的方法可能是让数据库的所有者在某个地方注册它们,例如在本地DNS服务中(或者Oracle是否支持zeroconf?),或者只是在某个Intranet网页或wiki上。
答案 4 :(得分:0)
您最好将SID名称/地址注册到具有固定地址的某个服务器(可能使用简单的Web服务),然后从那里查询列表。另一种方法是通过扫描一个或多个子网来实现强力扫描(由@brazzy解释),但这不是一件好事。
答案 5 :(得分:-1)
所有这些聪明的答案都是许多公司不使用默认端口的原因。你知道,完全可以为每个数据库使用不同的端口。