Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何检测局域网上的主机?_Oracle_Lan_Network Scan - Fatal编程技术网

Oracle 如何检测局域网上的主机?

Oracle 如何检测局域网上的主机?,oracle,lan,network-scan,Oracle,Lan,Network Scan,为了帮助用户,我希望我的代码能够在局域网上发现Oracle数据库。我想先检测所有主机,然后检查每台主机,看看它是否在监听Oracle的默认端口 你知道怎么做吗?最好是用Java,但任何语言或算法都可以。如果您正在寻找一个工具,可以为您这样做。不幸的是,没有可用的源…如果您想保持平台无关性,并且除非您可以访问某种列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个IP地址—最好尝试连接到每个主机上的Oracle端口 这种方法存在很多问题: 将仅通过本地网络进行搜索,而本地网络可能只是局

为了帮助用户,我希望我的代码能够在局域网上发现Oracle数据库。我想先检测所有主机,然后检查每台主机,看看它是否在监听Oracle的默认端口


你知道怎么做吗?最好是用Java,但任何语言或算法都可以。

如果您正在寻找一个工具,可以为您这样做。不幸的是,没有可用的源…

如果您想保持平台无关性,并且除非您可以访问某种列出主机的数据库,否则获取列表的唯一方法是尝试本地网络中的每个IP地址—最好尝试连接到每个主机上的Oracle端口

这种方法存在很多问题:

  • 将仅通过本地网络进行搜索,而本地网络可能只是局域网的一小部分(如果是拥有大量子网的大公司)
  • 可能需要很长时间(您肯定希望减少连接尝试的超时时间,但如果有人将其LAN配置为a类网络,则仍然需要很长时间)
  • 可以触发各种警报,例如桌面用户的个人防火墙和入侵检测系统,因为您所做的与试图利用Oracle服务器中的安全漏洞进行攻击的人所做的完全相同

正如brazzy指出的,扫描主机很可能会导致问题,尤其是当扫描仪中存在错误时


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

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


它应该很容易实现为一个包含六行左右代码的shell脚本。对于这样的东西,Java似乎有些过头了。循环浏览租约文件,从每个租约中获取IP,并将telnet连接到Oracle端口;如果连接,断开连接并将IP打印到标准输出。

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

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

您不能在DB服务器上安装任何东西吗?