【问题标题】:Code in c# for determining whether Oracle DB is listening to port 1521 on a specified remote machinec# 中用于确定 Oracle DB 是否正在侦听指定远程计算机上的端口 1521 的代码
【发布时间】:2016-03-31 23:44:19
【问题描述】:

我想知道 oracle DB 是否正在使用 c# 代码侦听指定远程计算机上的端口 1521(或者可能是另一个指定端口)。像 nmap 这样的工具能够做到这一点 - 不幸的是,我不能使用 nmap / 这样的工具,必须在代码中构建。

我尝试使用 Process.GetProcesses() 方法 - 但它没有给出端口号。所以这对我不起作用。

非常感谢您对此提供的任何帮助。

【问题讨论】:

  • 这看起来像是一个 XY 问题。你为什么要这样做?是否确定请求的数据库可用?然后只需使用 DB 代码连接到它,因为侦听某个点的进程并不能保证您的应用程序能够正常工作。可能有另一个应用程序在该端口上侦听(不使用 Oracle 有线协议),或者您的连接字符串中可能存在错误(错误的数据库、错误的凭据)。然后,您的端口检查将给出误报,而您的代码仍然会失败。 “如何检查端口”这个问题之前已经回答过很多次了。
  • 我需要它来扫描我网络上的哪些服务器正在运行 Oracle DB(例如)。由于对 stackoverflow 的许多贡献,我能够确定端口是否正在侦听。不幸的是,没有人进入识别港口服务的领域。 Process.GetProcesses() 方法提供所有详细信息,但端口号除外。因此,从流程的那一侧接近对我来说不起作用。我尝试使用 socket.beginconnect() 方法——它帮助我了解哪个端口正在监听——但没有告诉我谁在监听该端口。我无法桥接这两个

标签: c# oracle sockets networking port


【解决方案1】:

一个简单的选择是使用 TNS ping:

var startInfo = new ProcessStartInfo { CreateNoWindow = true, UseShellExecute = false, FileName = "tnsping", Arguments = "localhost:1521" };
var process = Process.Start(startInfo);
process.WaitForExit();

然后检查process.ExitCode。如果值为 0,则 ping 成功,否则失败。

通过 TNS ping,您可以使用 TNS 名称或 EZ-Connect 连接类型。

【讨论】:

  • 这仅在您安装了 tnsping.exe 时有效 - 并非总是如此。
  • 谢谢。正如 Wernfried 评论的那样......它需要安装 tnsping 。此外,我不知道 oracle 是否正在使用端口 1521,或者用户可能使用了不同的端口。我需要一个简单的方法来知道哪些端口正在侦听(我能够做到),然后知道谁(哪些程序/服务)正在侦听这些端口 - 我无法做到这一点并且需要帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2013-10-03
  • 1970-01-01
相关资源
最近更新 更多