2

为了帮助用户,我希望我的代码能够在 LAN 上发现 Oracle 数据库。我想通过首先检测所有主机,然后检查每个主机以查看它是否正在侦听 Oracle 的默认端口来做到这一点。

任何想法如何去做?最好用Java,但任何语言或算法都可以。

4

6 回答 6

2

你在使用 DHCP 吗?如果是这样,您的 DHCP 服务器会列出已发出的租约。这应该可以为您提供 LAN 上的主机列表。然后尝试在每台主机上打开到 Oracle 端口的连接,看看它是否接受连接。

用半打左右的代码来实现一个 shell 脚本应该很简单。对于这样的事情,Java 似乎有点矫枉过正。遍历lease文件,从每个lease中获取IP,telnet到Oracle端口;如果它连接,断开连接并将 IP 打印到标准输出。

于 2008-12-29T15:31:43.383 回答
1

如果您想保持平台独立,并且除非您可以访问某种列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个 IP 地址 - 不妨尝试连接到他们每个人的Oracle端口。

这种方法有很多问题:

  • 只会搜索本地网络,这可能只是局域网的一小部分(如果大公司有很多子网)
  • 可能需要很长时间(你肯定想减少连接尝试的超时时间,但如果有人将他的 LAN 配置为 A 类网络,它仍然需要很长时间)
  • 可以触发各种警报,例如桌面用户的个人防火墙和入侵检测系统 - 因为您所做的事情与试图利用 Oracle 服务器中的安全漏洞的人所做的事情完全相同
于 2008-12-29T14:32:40.193 回答
0

如果您正在寻找一个工具Loo@Lan可以为您做这件事。不幸的是,没有可用的资源...

于 2008-12-29T14:26:20.363 回答
0

正如 brazzy 指出的那样,扫描主机可能会导致问题,特别是如果您的扫描仪中有错误。

更好的方法可能是让数据库的所有者在某个地方注册它们,例如在本地 DNS 服务中(或者 Oracle 是否支持 zeroconf?),或者只是在某个 Intranet 网页或 wiki 上。

于 2008-12-29T14:59:47.550 回答
0

您最好将 SID 名称/地址注册到具有固定地址的某些服务器(可能使用简单的 Web 服务),然后从那里查询列表。另一种方法是通过扫描一个或多个子网的暴力破解(@brazzy 解释),但这并不是一件好事。

于 2009-01-05T01:07:02.753 回答
-1

所有这些聪明的答案都是许多公司不使用默认端口的原因。你知道,为每个数据库使用不同的端口是完全可能的。

于 2008-12-30T14:32:49.537 回答