Oracle 如何检测局域网上的主机?
为了帮助用户,我希望我的代码能够在局域网上发现Oracle数据库。我想先检测所有主机,然后检查每台主机,看看它是否在监听Oracle的默认端口Oracle 如何检测局域网上的主机?,oracle,lan,network-scan,Oracle,Lan,Network Scan,为了帮助用户,我希望我的代码能够在局域网上发现Oracle数据库。我想先检测所有主机,然后检查每台主机,看看它是否在监听Oracle的默认端口 你知道怎么做吗?最好是用Java,但任何语言或算法都可以。如果您正在寻找一个工具,可以为您这样做。不幸的是,没有可用的源…如果您想保持平台无关性,并且除非您可以访问某种列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个IP地址—最好尝试连接到每个主机上的Oracle端口 这种方法存在很多问题: 将仅通过本地网络进行搜索,而本地网络可能只是局
你知道怎么做吗?最好是用Java,但任何语言或算法都可以。如果您正在寻找一个工具,可以为您这样做。不幸的是,没有可用的源…如果您想保持平台无关性,并且除非您可以访问某种列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个IP地址—最好尝试连接到每个主机上的Oracle端口 这种方法存在很多问题:
- 将仅通过本地网络进行搜索,而本地网络可能只是局域网的一小部分(如果是拥有大量子网的大公司)
- 可能需要很长时间(您肯定希望减少连接尝试的超时时间,但如果有人将其LAN配置为a类网络,则仍然需要很长时间)
- 可以触发各种警报,例如桌面用户的个人防火墙和入侵检测系统,因为您所做的与试图利用Oracle服务器中的安全漏洞进行攻击的人所做的完全相同
更好的方法可能是让数据库的所有者在某个地方注册它们,例如在本地DNS服务中(或者Oracle是否支持zeroconf?),或者只是在某个intranet网页或wiki上注册。是否使用DHCP?如果是这样,DHCP服务器将有一个它已发出的租约列表。这应该可以为您提供LAN上的主机列表。然后尝试在这些主机上打开到Oracle端口的连接,看看它是否接受该连接
它应该很容易实现为一个包含六行左右代码的shell脚本。对于这样的东西,Java似乎有些过头了。循环浏览租约文件,从每个租约中获取IP,并将telnet连接到Oracle端口;如果连接,断开连接并将IP打印到标准输出。所有这些智能答案都是许多公司不使用默认端口的原因。您知道,为每个数据库使用不同的端口是完全可能的。您最好使用固定地址(可能使用简单的web服务)将SID名称/地址注册到某个服务器,然后从那里查询列表。另一种方法是bruteforce one(由@brazzy解释),通过扫描一个或多个子网,但这并不是一件好事。您不能在DB服务器上安装任何东西吗?