基于TCP_IP的网络扫描策略设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* 填充 ICMP 首部 */
FillICMPData(char *icmp_data,int datasize)
{
IcmpHeader *icmp_hdr = NULL;
char *datapart = NULL;
关键词:网络扫描;TCP/ IP;ICMP
中图分类号:TP393.03 文献标识码:A 文章编号:1671- 931X (2009) 05- 0054- 03
54
一、引言
武
基本扫描模块:如果目标网络的防护性不强(没有 防火墙的保护等),可直接使用 TCP Connect 扫描,速度
汉
网络扫描是一种自动检测本地与远程系统安全隐 快,效率高;
ICMP 首部定义如下: typedef struct _ihdr {
BYTE i_type;// ICMP 消息类型 BYTE i_code;// 代码 USHORT i_cksum;// 校验和 USHORT i_id;// ID 号 USHORT i_seq;// 序列号 ULONG timestamp;// 时间戳 } IcmpHeader; 以上定义了 TCP/IP/ICMP 的报文格式,定义报文 格式的目的是为首部的域赋值并封装特定的数据包发 送出去。
四、基于套接字的半开放式扫描的实现
套接字是实现客户端与服务器端通信的有力方 法。它实际上是一组 API,用于在 Internet 上传输数据 和交换信息。对于客户端,它利用套节字主动与服务器 端连接;而对于服务器端,它将套节字与特定的端口绑 定,使该端口处于监听状态,等待客户端的主动连接。 在半开方式扫描程序实现中,用到的是基于 Windows API 的原始套接字。
学
的服务信息。网络扫描主要用来搜集网络信息,能够帮 测功能。例如,如果基于 TCP SYN 扫描方式能扫描到开
院
学
助我们发现目标主机的弱点和漏洞,并能根据扫描结 放的端口,而依据 TCP FIN 扫描方式一个端口也扫描
报
果,改进网络安全,防范黑客攻击。
不到,则可判定目标主机一定是 Windows 类操作系统。
该为置 1 的含义 紧急指针字段可用 确认字段可用 请求急迫操作 连接复位 同步序号 发送方字节流结束
图 1 TCP 首部码位字段的含义
这六个标志位的作用是相当重要的,在对基于 TCP 的探测数据报封装的过程中,就需要将这其中的 一个或多个标志位置为 1,以表示不同的连接含义,完 成不同方式的扫描。
(四)主机发现程序设计
1. 程序实现原理 这个程序的主要功能是扫描一段网络地址内的主 机的运行状况,即主机是否在运行或是否可达。这是基 于 ICMP ECHO Request/Reply 报文实现的。主机向远程 计算机发出 ICMP 回显请求后,远程计算机会拦截这个 请求,然后生成一条回显应答消息,再通过网络回传给 源主机。如果出于某些方面的原因,不能抵达目标主 机,就会生成相应的 ICMP 错误消息。如果与远程网络 的物理连接并不存在问题,但目标主机已经关机,则这 个错误就是“目标主机不可达”或出现超时。 2. 关键程序实现 在具体实现中,本文是这样考虑的:对于一个网段 内的 IP 地址,进行 ICMP 扫描,结果有三种可能: (1)发送 ICMP 回显请求报文给目标主机,没有接 收到任何反馈数据报,这说明这个 IP 地址不存在,没 有被分配,或者目标主机已经安全了个人防火墙,禁止 响应 ICMP 回显请求; (2)发送 ICMP 回显请求报文给目标主机,接收到 ICMP 回显应答数据报,这说明目标主机正在运行中, 能够接收响应; (3)发送 ICMP 回显请求报文给目标主机,接收到 ICMP 目标不可达数据报,这说明目标主机不可达。 下面是部分具体的程序的实现:
J our nal of Wuhan P o l y t e c h n i c
·电 子 与 计 算 机 技 术·
基于 T CP/ IP 的网络扫描策略设计与实现
於晓兰
(武汉职业技术学院 计算机系,湖北 武汉 430074)
摘 要:在研究网络扫描技术的基础上,提出了基于TCP/ IP的网络扫描策略,集成了多种高效 的扫描方式,其中重点给出了基于套接字的半开放式扫描和ICMP网络主机扫描的实现 过程。
(二)IP 报文格式
IP 协议采用的是一种不可靠、无连接的传送机制。 IP 提供了三个重要的定义:
1. IP 定义了在 TCP/IP 互联网上数据传输的基本 单元,规定了互联网上传输的数据格式;
2. IP 软件完成路由选择功能,选择数据传输的路 径;
3. IP 包含了一组不可靠分组传输的规则,指明了 分组处理、差错信息发生以及分组丢弃等的规则;
用 C++ 语言中的结构来定义 TCP 首部如下: typedef struct _tcphdr // 定义 TCP 首部 { unsigned short th_sport;//16 位源端口 unsigned short th_dport;//16 位目的端口 unsigned short th_ack;// 确认号 unsigned short th_syn;// 顺序号 unsigned short th_win// 窗口大小 unsigned short th_signal// 六位码位 unsigned char th_len;//16 位总长(TCP 首部和数据 总长度) unsigned char th_check//16 位 TCP 校验和 } TCP_HEADER;
八
扫描主要用来探测网络上主机的运行状况。
(一)TCP 报文格式
卷 第
从技术上说,网络扫描是向目标主机发送特定的
传输控制协议(TCP)是一个面向连结的协议,为了
五
探测数据包后,将接受到的反馈数据包进行分析判断 保证传输的可靠性,它基于三次握手建立连结以及断
期
后得出结果。因此,网络扫描的分类主要依赖于对特定 开连结。TCP 定义了两台计算机之间进行可靠的传输
十
以上四种扫描各有优势和不足,而网络扫描应该 确认信息、携带建立或关闭连接的请求。TCP 使用六位
一 期
综合这几种扫描的优势,实际当中可以采用如下策略: 长的码位来指示报文段的应用目的和内容,这六位的
︶
ICMP 扫描模块:基于 ICMP 扫描方式,扫描目标网 码位的含义如图 1 所示。
络是否可达以及主机的活动状态;
用 C++ 语言中的结构来定义 IP 首部如下。 typedef struct _iphdr { unsigned char h_lenver;//4 位首部长度 +4 位 IP 版 本号 unsigned char tos;//8 位服务类型 TOS unsigned short total_len;//16 位总长度(字节) unsigned short ident;//16 位标识 unsigned short frag_and_flags;//3 位标志位 unsigned char ttl;//8 位生存时间 TTL unsigned char proto;//8 位协议 (TCP,UDP 或其 他) unsigned short checksum;//16 位 IP 首部校验和 unsigned int sourceIP;//32 位源 IP 地址 unsigned int destIP;//32 位目的 IP 地址 }IP_HEADER;
收稿日期:2009- 05- 11 作者简介:於晓兰(1979-),女,硕士,武汉职业技术学院计算机系教师,研究方向:计算机网络及其应用、信息安全。
电子与计算机技术
Electronic and Computer Technology
位标识(从左到右) URG ACK PSH RST SYN FIN
(二)ICMP Sweep(Ping Sweep)
使 用 ICMP Echo 查 询 多 台 主 机 被 称 为“ICMP Sweep”[4]。 对 一 个 小 型 到 中 型 的 网 络 进 行 主 机 探 测 , “PING”是一个可以接受的解决方案。但对大型网络(A 型或 B 型网络)而言,这种扫描方式进行得很慢,这主 要是因为“Ping”在处理下一个目标 IP 地址之前会等待 被查询主机的回应(或等待超时到达)。ICMP Sweep 很 容易被入侵检测系统检测出来。
图 2 半开放式扫描过程
TCP/IP
:
於 晓 兰
基 于
的 网 络 扫 描 策 略 设 计 与 实 现
55
武 汉 职 业 技 术 学 院 学 报 二
九 年 第 八 卷 第 五 期 ︵ 总 第 四 十 一 期 ︶
O O
电子与计算机技术
Electronic and Computer Technology
实际上,半开放式扫描程序的实现过程,就是客户 端与服务器端通信的过程。在我们的程序实现中,服务 器端就是要进行扫描的目标主机,而发起扫描的就是 客户端。我们要设计和开发的程序都是基于客户端的。 半开放式(TCP SYN)扫描程序实现的关键在于要利用 Windows 中的原始套节字封装并发送一个 SYN 标志的 数据报。扫描流程如图 2 所示。
(三)ICMP 报文格式
ICMP 经常被认为是 IP 层的一个组成部分。它传 递差错信息以及其它控制信息。ICMP 报文通常被 IP 层或更高层协议(TCP 或 UDP)使用。一些 ICMP 报文 把差错信息返回给用户进程。ICMP 信息是在 IP 数据 报内部被传输的。
我们在扫描中用到主要是“回显请求 / 应答报 文”。
O O
於 晓 兰
基 于
的 网 络 扫 描 策 略 设 计 与 实 现
56
武 汉 职 业 技 术 学 院 学 报 二
九 年 第 八 卷 第 五 期 ︵ 总 第 四 十 一 期 ︶
TCP/IP
:
五、基于 ICMP 协议的主机发现技术
(一)ICMP ECHO
我们能使用 ICMP 回显报文来判断目标主机是否 在运行,具体做法是通过向目标系统发送 ICMP 回显请 求报文(ICMP type 8),并等待接收 ICMP 回显应答报文 (ICMP type 0)[4]。如果收到 ICMP 回显应答报文,则证 明目标主机正在运行;没有响应则表明目标主机不在 运行,也可能是有过滤装置阻止了进入保护网络的 ICMP 回显请求报文或者阻止了回显应答报文进入 Internet。
︵
数据包的不同的封装形式以及与目标主机不同的连接 而交换的数据和确认信息的格式,以及计算机为确保
总 第
方式。常用的网络扫描技术主要有四种[2]:TCP Connect 数据的正确到达而采取的措施。
四
扫描、ICMP 扫描、TCP SYN 扫描和 TCP FIN 扫描。
TCP 报文段有多种应用,包括用于传输数据、携带
(三)Broadcast ICMP
发现一个网络内的活动主机可以向广播地址或目 标网络的网络地址发送一个 ICMP Echo 查询请求。这 个请求将被广播到目标网络上的所有主机。活动主机 将向探测者的源 IP 地址发送 ICMP Echo 响应。这样, 要获得目标网络的情况只需发送一个数据包。这种主 机 发 现 技 术 只 对 UNIX 类 操 作 系 统 有 效 。 Microsoft Windows 类操作系统对于基于所在网络的广播地址或 网络地址的 ICMP Echo 请求不会产生相应的应答。
二
二、网络扫描的分类和实现
三、自定义 TCP/IP/ICMP 探测数据包
O O
网络扫描从功能上分类,可以分为主机端口扫描
要实现网络扫描[3],很重要的一点就是必须封装适
九
年
和网络主机扫描。主机端口扫描主要是针对一台或多 合扫描需要的数据包。基于几种扫描的需要百度文库我们需要
第
台主机的端口进行扫描,探测端口开放情况;网络主机 自己定义 TCP 首部、IP 首部以及 ICMP 首部。
职 业
患的技术 [1],它通过向远程或本地主机发送探测数据
TCP SYN 扫描模块结合 TCP FIN 扫描模块:这两
技
包,获取主机的响应,并根据反馈的数据包,进行解包 种方式除了都可进行端口扫描之外,还可将 TCP SYN
术
和分析,从而获取主机的端口开放情况,获得主机提供 扫描和 TCP FIN 扫描结合起来,优势互补,有更强的探