【问题标题】:Identify a ping request to an IP address in C#?在 C# 中识别对 IP 地址的 ping 请求?
【发布时间】:2018-09-04 13:52:13
【问题描述】:

我想知道如何确定系统是否已关闭或未使用其 IP 地址(假设我已获得 IP 地址列表)。

目前我有一个控制台应用程序,它将命令作为输入并在命令提示符下执行它并在控制台上显示输出。

class Program
{
    static void Main(string[] args)
    {
        Process cmdProcess = new Process();
        cmdProcess.StartInfo.FileName = "cmd.exe";
        cmdProcess.StartInfo.RedirectStandardInput = true;
        cmdProcess.StartInfo.RedirectStandardOutput = true;
        cmdProcess.StartInfo.CreateNoWindow = true;
        cmdProcess.StartInfo.UseShellExecute = false;
        cmdProcess.Start();      
    }
}

【问题讨论】:

  • 神奇的词是ping
  • @Paxz,并非所有机器都会回复 ping。
  • 你能稍微改变一下架构吗?我想建议这样做的原因是,据我所知,没有任何方法可以检查机器是否在那里,而无需在客户端/远程机器端进行一些更改。如果你宁愿在客户端运行一个服务/东西,在你的主机上“签入”,它会更好。
  • 不可能为这个问题创建一个不在远程主机上运行软件的通用解决方案。系统可能不响应 PING,可能不是 Windows 系统(这使得无法使用 WMI),或者如果没有响应,则可能根本不响应网络流量。你需要的是每个远程主机上的一个程序,它允许你远程控制它。

标签: c# cmd


【解决方案1】:

如果机器正在回复 ping,按照 @Paxz 的建议,您可以这样做:

var ping = new Ping();
var pingReply = ping.Send("123.123.123.123");

if (pingReply.Status == IPStatus.Success)
{
}

【讨论】:

    【解决方案2】:

    您应该使用WMI 尝试在远程计算机上获取WMI_OperatingSystem

    如果您能够访问该对象并拥有适当的权限,您还可以调用其Shutdown 方法1

    ping不同,上述验证您可以连接到机器以用于您实际需要的目的2

    (如果无法通过IP地址连接WMI,请咨询this question


    1我想可能存在一种反常的情况,一方面,您具有启动远程关闭的某种形式的权限,但另一方面,通过 WMI 执行此操作的某些方面被阻止,但这确实是对您的管理员的反击——您被要求执行一项管理任务,正确的途径是 WMI。

    2ping 只是告诉您远程机器正在正确处理 ICMP ECHO3。它不会告诉您系统是否能够进行任何其他活动。如果您要跟进其他需要连接和其他东西才能工作的活动,那么使用 ping “预先检查”连接是没有意义的。除此之外,在运行“预检查”和对结果采取行动之间,外部现实可能已经发生了变化。

    您需要编写代码来应对网络连接的变化您正在尝试您的活动无论如何(或远程机器因其他原因而停机等)。

    3并没有过滤 ICMP ECHO 流量。

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多