1)原理
摘自 百度 红客吧 http://tieba.baidu.com/f?kz=90077233
TCP connect() 扫描是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。目标计算机的logs文件会显示一连串的连接和连接出错的服务消息,并且能很快的使它关闭。
2)示例代码,非常简单
3)特殊说明
一个是,两次连接同一个机器的不同端口的时候,socket不能复用。也就是说,上次的socket必须关闭,然后再重新生成。
另一个是,本来我打算从所有开通的端口都recv一些信息,但是发现不行,因为像80这样的端口,即使connect了也不会返回信息,所以如果recv的话,就会阻塞在那里。而21端口就比较友好,会返回一些信息。