【Socket】linux网络扫描程序开发
1.mystery引入
1)系统入侵步骤:系统发现->漏洞探测->漏洞利用->痕迹清除
2)扫描器分类:主机与网络扫描器;端口服务扫描器;服务漏洞扫描器
3)TCP端口扫描技术分为三种:全连接扫描;SYN扫描以及FIN扫描
4)UDP端口扫描技术一般采用ICMP报文端口不可达的信息来识别UDP端口是否开放
5)全连接扫描利用connect()函数的返回值来判断端口是否开放
6)SYN构造并发送一个SYN数据包,就是TCP三次握手建立连接的第一步
若返回一个SYN|ACK的数据包,则端口表示处于监听状态
若返回一个RST数据包,则表示端口没有处于侦听状态
7)FIN扫描和SYN扫描类似,构造相应的数据包
原理:关闭的端口会用RST数据包来回应FIN数据包,而开放的端口则会忽略这种报文
2.程序构造
1)功能:实现一个可用的端口扫描程序,在扫描方式上,实现全连接扫描、SYN半连接扫描、多线程全连接扫描等方式
2)使用方式:采用交互式命令,在配置待扫描的目标主机IP地址、端口范围等信息后,启动扫描
3)交互式模块是整个系统的调试核心,也是控制系统运转的一条主线
4)交互式模块通过命令驱动,要调用3个扫描模块。扫描模块要求的心要参数信息为:IP地址、端口的下限及端口的上限;
针对多线程扫描全连接扫描,还要增加线程数这一参数信息
5)半连接扫描的基本原理是采用原始套接字技术,构造相应格式的SYN数据包,发送目标主机
然后根据目标主机的响应信息,判断扫描端口的状态
因为是采用原始套接字,所以需要root权限
2)扫描器分类:主机与网络扫描器;端口服务扫描器;服务漏洞扫描器
3)TCP端口扫描技术分为三种:全连接扫描;SYN扫描以及FIN扫描
4)UDP端口扫描技术一般采用ICMP报文端口不可达的信息来识别UDP端口是否开放
5)全连接扫描利用connect()函数的返回值来判断端口是否开放
6)SYN构造并发送一个SYN数据包,就是TCP三次握手建立连接的第一步
若返回一个SYN|ACK的数据包,则端口表示处于监听状态
若返回一个RST数据包,则表示端口没有处于侦听状态
7)FIN扫描和SYN扫描类似,构造相应的数据包
原理:关闭的端口会用RST数据包来回应FIN数据包,而开放的端口则会忽略这种报文
2.程序构造
1)功能:实现一个可用的端口扫描程序,在扫描方式上,实现全连接扫描、SYN半连接扫描、多线程全连接扫描等方式
2)使用方式:采用交互式命令,在配置待扫描的目标主机IP地址、端口范围等信息后,启动扫描
3)交互式模块是整个系统的调试核心,也是控制系统运转的一条主线
4)交互式模块通过命令驱动,要调用3个扫描模块。扫描模块要求的心要参数信息为:IP地址、端口的下限及端口的上限;
针对多线程扫描全连接扫描,还要增加线程数这一参数信息
5)半连接扫描的基本原理是采用原始套接字技术,构造相应格式的SYN数据包,发送目标主机
然后根据目标主机的响应信息,判断扫描端口的状态
因为是采用原始套接字,所以需要root权限
3.程序测试
1)程序功能清单2)本机测试全连接扫描
3)远程主机测试全连接扫描
4)其它两种扫描方式类似,这里就不截图了,另外SYN扫描需要root权限
4.源代码
//scantool.c,见原博客附件http://infohacker.blog.51cto.com/6751239/1155170