一个端口扫描程序就是对一段区域内的端口进行连接测试,如果能够连接上则标识这个端口是开放的。为了简化程序,我只是TCP连接方式的 端口进行扫描。为了加快扫描速度,我需要使用多线程,用ThreadPool对线程进行维护。
首先,定义一个端口扫描的类,该类实现对指定地址、指定端口进行扫描,并将扫描的结果(能、不能连接)保存 ,代码如下:(注意,为了加快端口扫描的速度,我对 Socket 的Connect采用异步方式,而信号灯等待1秒仍然没有得到结果,就认为没有连接到对方主机)
manualEvent.Set();
}
}
}
}
接下来就是,在多线程的环境中执行Scan了,代码如下:
((MyThreadState )state).PortScaner .Scan();
((MyThreadState)state).AutoEvent.Set();
}
}
}
呵呵,这里用了比较 bt 的办法, WaitHandle.WaitAll (autoEvents);这是为了前面讲的原理写的,而为了不那么bt可以采用推拉窗技术。
好了,就说了这么多,一则希望能对大家有所帮助,二则希望自己将来写程序的时候,能够很快的进入状态。