如何检测LAN上的主机?

时间:2008-12-29 14:17:49

标签: oracle lan network-scan

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

任何想法如何解决这个问题?最好是Java,但任何语言或算法都可以。

6 个答案:

答案 0 :(得分:2)

您使用的是DHCP吗?如果是这样,您的DHCP服务器有一个已经传递的租约列表。这应该是你在LAN上的主机列表。然后尝试打开与每个主机上的Oracle端口的连接,并查看它是否接受连接。

实现作为一个有大约六行左右的shell脚本应该非常简单。对于像这样的东西,Java似乎有些过分。循环访问租约文件,从每个租约中获取IP,然后telnet到Oracle端口;如果它连接,断开连接并将IP打印到标准输出。

答案 1 :(得分:1)

如果你想保持平台独立,除非你有权访问列出主机的某种数据库,获取列表的唯一方法是尝试本地网络中的每个IP地址 - 不妨试试连接到每个端口上的Oracle端口。

这种方法存在很多问题:

  • 只搜索本地网络,这可能只是局域网的一小部分(如果有大量子网的大型公司)
  • 可能需要很长时间(您肯定希望减少连接尝试的超时,但如果有人将其LAN配置为A类网络,它仍将需要永久)
  • 可以触发各种警报,例如桌面用户的个人防火墙和入侵检测系统 - 因为你正在尝试利用Oracle服务器中的安全漏洞做同样的事情

答案 2 :(得分:0)

如果您正在寻找工具Loo@Lan,可以为您执行此操作。不幸的是,没有可用的资源......

答案 3 :(得分:0)

正如brazzy指出的那样,扫描主机可能会导致问题,尤其是在扫描仪出现错误的情况下。

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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