1

我正在创建一个小工具,让我可以检查给定 IP 和端口号的端口状态,如下所示:

private void ScanPort(IPAddress address, int port)
{
    using (TcpClient client = new TcpClient())
    {
        try
        {
            client.Connect(address, port);
            txtDisplay.AppendText("Port: " + nudFrom.Value.ToString() + 
                " is open." + Environment.NewLine);
        }
        catch (SocketException)
        {
            txtDisplay.AppendText("Port: " + nudFrom.Value.ToString() +
                " is closed." + Environment.NewLine);
        }
    }
}

问题是,当端口打开时,检查大约需要一秒钟,如果端口关闭,则该过程大约需要 20 秒时间。

如何更快地检查打开/关闭的端口?

4

2 回答 2

2

一种选择是使用 SharpPcap 或 Pcap.NET 之类的原始套接字来实现这一点,并捕获 ICMP 失败响应。一种更简单的方法是考虑减少超时。这里有一些关于如何做的想法。是一个可能也有帮助的相关问题。

如果您正在严格寻找方法来提高您发布的代码的性能,那么您可以考虑在尝试连接到它之前 ping 地址(假设这与您之前关于 ARP 远程主机的问题有关),并且因为String 是不可变的,+操作符通常比使用类似String.Format. 这些建议不会减少您的处理时间(实际上您可能无法区分)。

于 2012-01-24T03:49:13.280 回答
1

我创建了一个类似这样的工具来 ping 网络上的所有 IP 地址并获取响应。

为此,我使用了 .net 4.0 并行 for / foreach 功能。它极大地提高了性能。

于 2012-01-24T04:44:32.583 回答