加速端口扫描C#

时间:2012-11-25 14:00:54

标签: c# sockets web port-scanning

我正在尝试用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秒,我该怎么做才能让这个过程更快? 非常感谢。

3 个答案:

答案 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

它为我加快了这个过程。