我正在尝试用C#创建端口扫描程序,到目前为止,我有这个:
private void ip()
{
int start = 70;
int end = 80;
string ipString;
if (this.comboBox1.Text == "Domain") {
ipString= Dns.GetHostEntry(txtHost.Text).AddressList[0].ToString();
}
else {
ipString = txtHost.Text;
}
TcpClient asd = new TcpClient();
// MessageBox.Show(ipString);
IPAddress address = IPAddress.Parse(ipString);
for (int i = start; i <= end; i++)
{
try
{
asd.SendTimeout = 3000;
asd.ReceiveTimeout = 3000;
asd.Connect(address, i);
if (asd.Connected)
{
MessageBox.Show("Port " + i + " is open");
}
}
catch
{
MessageBox.Show("Port " + i + " is closed");
}
}
}
然而对于封闭端口,它有点慢,大约20秒,我该怎么做才能让这个过程更快? 非常感谢。
答案 0 :(得分:1)
你应该使用线程。
http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
为每个要检查的端口启动单独的线程,并让回调通知您哪些是打开的,哪些不是。
答案 1 :(得分:0)
你应该像这样声明你的委托和异步函数(例子中的两个参数)
public delegate void UpdateUIThreadDelegate(int par1, int par2);
void UpdateUIThread(int par1, int par2)
{
...
}
你应该像这样叫你异步函数:
this.Invoke(new UpdateUIThreadDelegate(UpdateUIThread), new object[] { par1, par2 });
答案 2 :(得分:0)
完成测试后,您需要关闭连接。
在asd.Close();
声明的末尾尝试catch
。
它为我加快了这个过程。