我正在创建一个小工具,让我可以检查给定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秒的时间。
如何更快地检查打开/关闭端口?
答案 0 :(得分:2)
一种选择是使用SharpPcap或Pcap.NET等原始套接字实现此功能,并捕获ICMP故障响应。一种更简单的方法是考虑减少超时。 Here关于如何做的一些想法。 Here这是一个相关的问题,可能也有帮助。
如果您正在严格寻找提高所发布代码性能的方法,那么您可以考虑在尝试连接之前ping该地址(假设这与您之前关于ARP远程主机的问题有关) ,由于String是不可变的,+
运算符通常比使用String.Format
之类的运算符慢。这些建议不会减少你的处理时间(实际上你可能无法区分)。
答案 1 :(得分:1)
我创建了一个这样的工具来ping网络上的所有IP地址并获得响应。
我使用了.net 4.0 parallel for / foreach功能。它大大提高了性能。