发现网络中的主机课设.docx
- 文档编号:2393196
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:23
- 大小:105.71KB
发现网络中的主机课设.docx
《发现网络中的主机课设.docx》由会员分享,可在线阅读,更多相关《发现网络中的主机课设.docx(23页珍藏版)》请在冰豆网上搜索。
发现网络中的主机课设
学号:
0121010680104
课程设计
题目
发现网络中的主机
学院
计算机科学与技术学院
专业
软件工程
班级
软件1001
姓名
陈璞
指导教师
刘东飞
2013
年
6
月
16
日
课程设计任务书
学生姓名:
陈璞专业班级:
软件1001
指导教师:
刘东飞工作单位:
计算机学院
题目五:
发现网络中的主机
初始条件:
(1)学习相关知识
(2)C/C++/VC/VB/JAVA语言
(3)PC机一台
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
编写程序,其功能是发送ICMP数据包,以获取指定网段中的活动主机,并将结果显示在标准输出上。
程序具体要求如下:
1)用命令行形式运行:
scanhostStart_IPEnd_IP
其中scanhost为程序名,Start_IP为被搜索网段的开始IP地址,End_IP为被搜索网段的结束IP地址。
2)输出格式为:
活动主机1
活动主机2
..........
时间安排:
第一、二天:
查阅资料,学习算法
第三、四天:
编程调试
第五天:
书写报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
一、设计目的与意义4
二、设计内容和要求4
三、设计相关技术4
四、设计相关过程7
4.1程序的大致思想7
4.2使用原始套接字7
4.3定义IP头部和ICMP头部的数据结构8
4.4填充并发送回送请求类型的ICMP报文9
4.5计算校验和9
4.6IP包的发送10
4.7解析数据包10
五、程序流程图11
5.1主程序流程图11
5.2子程序流程图12
六、程序运行结果与测试13
七、体会与总结13
八、参考文献14
附录14
程序代码清单14
发现网络中的主机
一、设计目的与意义
IP协议的优点是简洁,但缺少差错控制和查询机制,而网际控制报文协议(ICMP)具有补充IP功能的作用。
在网络管理中,常常要确定当前网络中处于活动状态的主机,这时可以通过使用ICMP的回送和回送响应消息来完成这项工作。
本课程设计的目的是若一个机房的主机已经达到了一定数量,进行网络管理时,常常需要确定当前网络中处理活动状态的主机。
本设计的目标就是编制程序,利用ICMP数据包,发现指定网段中的活动主机。
通过课程设计,使学生更加熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识
。
二、设计内容和要求
设计程序,其功能是发送ICMP数据包,以获取指定网段中的活动主机,并将结果显示在标准输出上。
程序的具体要求如下:
1)用命令行形式运行:
scanhostStart_IPEnd_IP
其中scanhost为程序名;Start_IP为被搜索网段的开始IP地址;End_IP为被搜索网段的结束IP地址。
2)输出格式为:
活动主机1
活动主机2
活动主机3
……………
三、相关技术
编制程序前首先要对ICMP报文的格式有一定的了解,ICMP报文是在IP数据报内部传输的,其结构如下图【1】所示:
IP数据报
IP首部ICMP报文
图【1】
ICMP报文的格式如下图【2】所示:
(位)078151631
类型字段
代码字段
校验和字段
(不同类型和代码有不同内容)
图【2】ICMP报文格式
所有报文的前4个字节都是一样的,但是其它字节则互不相同。
其中类型字段可以有15个不同的值,以描述特定类型的ICMP报文,某些ICMP报文还使用代码字段的值来进一步描述不用的条件。
按验和字段为2字节,校验的范围是整个ICMP报文。
检验和是必须的,其计算方法与IP协议头部校验和的计算方法一样。
各种类型的ICMP报文如下图【3】所示(ICMP报文类型),不同类型由报文中的类型字段和代码字段来共同决定。
类型
代码
描述
0
0
回送响应(PING应答)
3
目的不可达
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
网络不可达
主机不可达
协议不可达
端口不可达
需要进行分片但设置了禁止分片比特
源主机选择路由失败
无法识别目的网络
无法识别目的主机
源主机被隔离
目的网络被禁止
目的主机被禁止
由于服务类型(TOS),网络不可达
由于服务类型(TOS),主机不可达
由于过滤,通信被强行禁止
主机越权
优先权终止生效
4
0
源端被关闭(基本流控制)
5
0
1
2
3
重定向
对网络重定向
对主机重定向
对服务类型和网络重定向
对服务类型和主机重定向
8
0
回送请求(PING请求)
9
10
0
0
路由通告
路由请求
11
0
1
超时
传输期间生存期减为0
数据报组装期间生存期减为0
12
0
1
参数问题
各种IP头部错误
缺少必须的选项
13
14
0
0
时间戳请求
时间戳应答
15
15
16
17
0
0
0
0
信息请求(已作废)
信息应答(已作废)
地址掩码请求
地址掩码应答
图【3】ICMP报文类型
本课程设计的目的是发现网络中的活动主机,使用ICMP的回送和回送响应消息发现网络中的活动主机,即Ping消息的请求和应答。
发送的ICMP的数据包类型设置为回送请求(类型号为8);接收ICMP的数据包类型设计为回送应答(类型号为0)。
四、设计相关过程
4.1程序的大致思想
本程序使用原始套接字生成ICMP报文来进行活动主机的探查,这个程序使用的是回送请求与应答消息。
把ICMP的数据包类型设置为回送请求,将它发送给网络上的一个IP地址,如果这个IP地址已经被占用的话,那么使用位于这个IP地址的主机上的TCP/IP软件就能够接收到这个ICMP回送请求,从而返回一个ICMP回送响应(类型号为0)信息。
信息封装在一个IP包中,我们需要解析该IP包,从中找到ICMP数据信息。
相反,如果这个IP地址没有人使用,那幺发送的ICMP回送请求在设定的延时内就不可能得到响应。
在初始化原始套接字之后,本程序就要开始在一个IP网段内寻找活动主机。
因为要寻找的主机可能很多,为节省时间可以采用多线程编程。
下面接结合核心代码对程序的具体实现进行讲解,同时为使程序流程更加清晰,去掉了错误检查
4.2使用原始套接字
为了实现发送/监听ICMP报文,必须使用原始套接字。
在初始化原始套接字之后,本程序就要开始在一个IP网段内寻找活动主机。
因为要寻找的主机可能很多,为节省时间可以采用多线程编程。
创建原始套接字的代码如下:
SOCKETsockRaw;
sockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED);
在WSASocket函数中,我们使用IPPROTO_ICMP表示接收ICMP数据包,为了使用发送超时设置(设置SO_RCVTIMEO或SO_SNDTIMEO),必须将标志位置为WSA_FLAG_OVERLAPPED。
然后调用setsockopt函数设置读取延迟。
inttimeout=1000;
setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));
在setsockopt函数中,sockRaw是之前创建的原始套接字,设置SQL_SOCKET表明使用基本套接字处理ICMP报文。
设置SO_RCVTIMEO表示使用接收超时设置,SO_SNDTIMEO表示使用发送超时设置,在这里,超时时间均设置为1000ms。
4.3定义IP头部和ICMP头部的数据结构
由于socket发送/捕获的是IP包,因此要分别定义IP头部和ICMP头部的数据结构。
//IP报头的数据结构
typedefstructiphdr{
unsignedintheadlen:
4;//IP头长度
unsignedintversion:
4;//IP版本号
unsignedchartos;//服务类型
unsignedshorttotallen;//IP包总长度
unsignedshortid;//ID号
unsignedshortflag;//标记
unsignedcharttl;//生存时间
unsignedcharprot;//协议(UDPTCP)
unsignedshortchecksum;//校验和
unsignedintsourceIP;//源IP
unsignedintdestIP;//目的IP
}IpHeader;
/ICMP头部的数据结构
typedefstructicmphdr{
BYTEtype;//ICMP类型码,回送请求的类型码为8
BYTEcode;//字类型码,保存与特定ICMP报文类型相关的细节信息
USHORTchecksum;//校验和
USHORTid;//ICMP报文ID号(一般用进程号作为ID)
USHORTseq;//ICMP数据报的序列号
}IcmpHeader;
4.4填充并发送回送请求类型的ICMP报文
为了使收到数据包的目的主机发送响应,我们需要向目的主机发送回送请求类型ICMP报文。
因此ICMP报文的填充代码如下:
#defineICMP_ECHO8//请求回送
#defineDEF_PACKET_SIZE32//缺省数据报长度
#defineMAX_PACKET1024//最大数据块长度
charicmp_data[MAX_PACKET];//ICMP数据报最大可能的长度
memset(icmp_data,0,MAX_PACKET);//将数据报清空初始化
intdatasize=DEF_PACKET_SIZE;//ICMP数据报报文体的缺省长度
datasize+=sizeof(IcmpHeader);//再加上ICMP头部的长度
IcmpHeader*icmphdr;
char*datapart;
icmp_hdr=(IcmpHeader*)icmp_data;
icmp_hdr->type=ICMP_ECHO;//设置类型
icmp_hdr->id=(USHORT)GetCurrentThreadId();//设置其ID为当前线程号
datapart=icmp_data+sizeof(IcmpHeader);//计算ICMP数据报的数据部分
memset(datapart,‘A’,datasize-sizeof(IcmpHeader));//填入数据
((IcmpHeader*)icmp_data)->checksum=0;//先将校验和置0
((IcmpHeader*)icmp_data)->seq=0;//序列号为0
((IcmpHeader*)icmp_dat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 发现 网络 中的 主机