识别对C#中IP地址的ping请求?

时间:2018-07-24 13:06:37

标签: c# cmd

我想知道如何找出系统是否已关闭或是否使用其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();      
    }
}

2 个答案:

答案 0 :(得分:1)

如果机器按照@Paxz的建议回复ping,则可以执行以下操作:

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

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

答案 1 :(得分:1)

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

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

ping不同,上述验证您可以连接到计算机,以实际需要实现 2

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


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

2 ping只是告诉您远程计算机 3 正在正确处理ICMP ECHO。它没有给您任何迹象,表明系统是否能够执行任何其他活动。如果您要通过ping进行“预检查”连接是没有意义的,那么您将继续进行其他需要连接和其他事情才能正常工作的活动。其中,之间进行“预检查”和对结果采取行动外部现实可能已经改变。

您将需要编写代码来应对不断变化的网络连接 您正在尝试进行 活动(或远程计算机由于其他原因而关闭等) )。

3 ,没有任何东西可以过滤ICMP ECHO通信。