计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc

上传人:b****1 文档编号:13119592 上传时间:2022-10-05 格式:DOC 页数:32 大小:600.50KB
下载 相关 举报
计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc_第1页
第1页 / 共32页
计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc_第2页
第2页 / 共32页
计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc_第3页
第3页 / 共32页
计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc_第4页
第4页 / 共32页
计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc

《计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc(32页珍藏版)》请在冰豆网上搜索。

计算机网络课程设计-基于icmptcp的网段端口扫描-c语言编写Word下载.doc

网段和端口扫描程序

一、概述 1

1.1端口扫描 1

1.2端口扫描常用技术简介 2

1.2.1connect()扫描 2

1.2.2SYN扫描 3

1.2.3XMAS-TREE扫描 3

1.3网段扫描 4

二、需求分析 5

2.1设计功能 5

2.2设计要求 5

三、概要设计 5

3.1设计概念和处理流程 5

3.2结构设计 7

3.2.1数据结构及定义 7

3.2.2接口函数 8

四、细设设计 9

4.1实现原理 9

4.1.1connect()函数端口扫描的原理 9

4.1.2ICMP网段扫描的原理 11

4.2函数实现 14

4.2.1初始化winsock动态链接库 14

4.2.3地址解析 15

4.2.4计算检验和 15

4.2.5网段扫描 16

4.2.6端口扫描 17

五、总结与体会 19

5.1程序运行与调试 19

5.2体会 20

六、参考文献 21

6.1参考书目 21

6.2引用网址 21

一、概述

1.1端口扫描

端口扫描是指利用TCP协议的面向连接的特性,使用本地计算机试图与目的主机的某个端口建立连接,以此来试探目的主机的一些端口的具体状态,如是否打开,若是打开的又运行什么样的程序(利用熟知端口很容易知道)。

端口扫描有很多技术实现。

其中最常用的有:

connect()扫描,TCPSYN扫描,TCPFIN扫描,TCPNULL扫描,XMAS-TREE扫描(圣诞树扫描)等等。

在本程序中使用的是connect()扫描。

1.2端口扫描常用技术简介

1.2.1connect()扫描

此扫描的原理是,本地计算机利用TCP协议的三次握手原理(RFC793)试图与网络上一台主机或服务器建立TCP连接。

如果目的主机或服务器回送SYN/ACK则说明该端口开放,否则该端口关闭。

具体的过程:

1.Client端发送SYN

2.Server端发送SYN/ACK(该端口开放),或Server端发送RST/ACK(该端口关闭),若无应答可能目的主机或服务器不可达。

3.Client端发送ACK,连接建立。

4.Client端主动断开连接,连接关闭。

过程图如下:

1.2.2SYN扫描

SYN扫描前两步与connect()扫描相同,只是最后一步,Client端发送的不是ACK确认报文而是RST报文,这样三次握手过程就没有完成,Client与Server也就没有建立TCP连接,因此前述过程不会被Sever端记录到系统日志中,扫描更加隐蔽。

1.2.3XMAS-TREE扫描

通过发送带有以下标志位TCP数据包URG,PSH,FIN来试探主机。

在目标端口开放的情况下不放回任何信息。

端口开放:

发送URG/PSH/FIN,没有响应。

端口关闭:

1.发送URG/PSH/FIN,没有响应。

2响应RST。

1.3网段扫描

网段扫描是指利用ICMP(因特网控制报文协议)对某一网段的所有IP地址发送ICMP报文,测试IP地址所对应的主机具体情况(如是否开机等)。

所以对目的主机回答的ICMP报文进行分析是网段扫描的关键。

常见的报文类型有:

类型(type)

代码(code)

描述

差错

查询

回显回答

*

3

1

主机不可达

端口不可达

8

请求回显

二、需求分析

2.1设计功能

实现一个扫描器,使用TCPconnect、TCPSYN或TCPSYN进行端口扫描,使用ICMPecho扫描实现IP扫描,并记录结果。

2.2设计要求

Windows或Linux环境下,程序应在单机上运行。

使用端口扫描对一台主机进行扫描,并显示结果,在一定的端口范围内,该主机由哪些端口是打开的。

对一个网段进行IP扫描,显示结果,该网段的哪些主机是开机的。

友好的界面,便于用户操作,完成全部设计功能。

三、概要设计

3.1设计概念和处理流程

程序使用WindowsSocketsAPI编程,利用winsock2库函数提供的函数实现与主机间的连接,发送ICMP报文。

详见WinsockReferen:

用户首先选择要使用的功能,程序共有两大功能:

端口扫描和IP网段扫描。

端口扫描的主要功能有,根据用户输入的主机名或IP地址以及端口范围进行connect()扫描。

当用户输入完必要的信息并击确认后,程序进行扫描,不过不建议端口区间过于庞大,等待一段时间后用户界面会显示所指定IP地址主机的端口使用情况,哪些端口是打开的,哪些是关闭的。

IP网段扫描的主要功能有,用户输入某个网段起始IP地址和结束IP地址,确认后,程序根据所输入的网段号,对网段类的每一个IP地址发送ICMP请求回显报文,如果主机处于开机状态那么将会回送回答报文;

如果主机不可达(在同一个网内),则就能够判断该IP所对应的主机处于关机状态。

当用户选择退出功能时,释放资源,程序关闭。

程序流程图

3.2结构设计

3.2.1数据结构及定义

所使用的宏定义,

#defineICMP_ECHO_REQUEST_TYPE8//ICMP请求类型

#defineICMP_ECHO_REQUEST_CODE0//ICMP请求代码

#defineICMP_ECHO_REPLY_TYPE0

#defineICMP_ECHO_REPLY_CODE0

#defineICMP_MINIMUM_HEADER8

IP数据报首部,首部固定20字节,数据结构定义如下:

typedefstructip_hdr

{

unsignedchariphVerLen;

//版本号和头长度(各占4位)

unsignedcharipTOS;

//服务类型

unsignedshortipLength;

//封包总长度,即整个IP报的长度

unsignedshortipID;

//封包标识,惟一标识发送的每一个数据报

unsignedshortipFlags;

//标志

unsignedcharipTTL;

//生存时间,就是TTL

unsignedcharipProtocol;

//协议,可能是TCP、UDP、ICMP等

unsignedshortipChecksum;

//校验和

unsignedlongipSource;

//源IP地址

unsignedlongipDestination;

//目标IP地址

}IP_HDR,*PIP_HDR;

IP数据报格式

ICMP报文首部格式,8个字节,数据结构定义如下:

typedefstructicmp_hdr

unsignedcharicmp_type;

//类型

unsignedcharicmp_code;

//代码

unsignedshorticmp_checksum;

//检验和

unsignedshorticmp_id;

//唯一请求ID,通常使用进程PID

unsignedshorticmp_sequence;

//序列号

unsignedlongicmp_timestamp;

//时间戳

}ICMP_HDR,*PICMP_HDR;

3.2.2接口函数

VoidInitializeWinsock(),初始化Winsock动态链接库。

VoidResolove(charhostname[]),解析主机名(或IP地址),该函数是公共接口函数,端口扫描和IP网段扫描都使用该函数解析地址。

函数首先判断用户输入的IP是十进制点分地址还是域名地址,然后分别调用inet_addr()和gethostbyname()库函数处理成unsignedlong型数据。

VoidResoloveIPAddr(charstarthost[],charendhost[],int*start,int*end),此函数用户IP网段扫描,将用户输入的起始IP地址和结束IP地址转换为int类型数据。

Char*Assemble(charstartehost[],intcur),将当前IP地址转化为字符串类型的IP地址。

voidSegmentScan(charstarthost[],charendhost[]),通过发送ICMP,检测某个网段上主机的具体状态。

函数的两个参数starthost[]、endhost[]分别代表用户给定的起始IP地址和结尾IP地址。

该函数内部调用了InitializeWinsock()、Resolove()、ResoloveIPAddr()、Assemble()、以及库函数sendto()和recvfrom()。

通过这些函数的调用实现了对指定网络区间的ICMP扫描。

connectScan(charstartport[],charendport[],hostname),该函数把用户输入的主机名(或IP地址)写入sin_addr.s_addr,起始端口写入sin_port中。

函数调用了InitializeWinsock()、Resolove()以及库函数connect()、shutdown()。

实现了利用connect()系统函数对指定主机端口区间扫描。

四、细设设计

4.1实现原理

4.1.1connect()函数端口扫描的原理

首先要明白TCP报文段的首部格式。

现在分别介绍各个字段的具体含义。

(1)源端口和目的端口各占两个字节。

端口是运输层与应用层的服务。

(2)序号占4个字节。

TCP把传送的数据流中的每一个字节都编上一个序号。

(3)确认号占4个字节。

是指期望对方的下一个报文段的数据的第一个字

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1