c# 在两个 ip 地址之间 ping

c# ping between two ip addresses

如何在 C# 中检查两台服务器是否从第三台服务器连接? 我在服务器 A 中,我想知道服务器 B 和服务器 C 是否已连接。 我只有代码来检查我是否连接到服务器 B 或 C。 我有:

public bool AreConnected(string ip)
{
    bool connected= false;
    Ping p = new Ping();
    try
    {                
        PingReply reply = p.Send(ip);
        connected = reply.Status == IPStatus.Success;
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    return connected;
}

这可能不是最好的方法,它需要机器 B 的管理员权限,但它确实有效。

使用PsExec。此工具允许您 运行 在远程计算机上执行命令。

创建一个命令行程序,将ip地址作为命令行参数,ping ip地址并输出结果。

然后 运行 PsExec(来自 C# 代码)在机器 B 上执行此类程序并收集结果(也来自代码)。

您需要使用 Process.Start 才能从 C# 代码执行 PsExec 命令。

我使用了 PsExec 并且工作正常,下面我的代码可能会对其他人有所帮助,

public bool IsPingable(string servA, string servB)
    {
        string path = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "\Resources\PsExec.exe";
        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.FileName = path;
        p.StartInfo.Arguments = @"\" + servA + " ping " + servB + " -n 1";
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        if (!output.Contains("100% loss"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }