主机存活性探测系统设计报告汇总由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“主机存活性探测”。
网络主机的存活性探测系统设计与实现
一、概要.......................................................................................................................2 1.1 课设目的..........................................................................................................2 1.2 设计要求..........................................................................................................2 1.3 设计题目..........................................................................................................2
二、需求分析...............................................................................................................3
三、系统分析与设计...................................................................................................4 3.1 基本思想..........................................................................................................4 3.2 系统总体设计..................................................................................................5 3.3 系统详细设计..................................................................................................5
四、系统实现...............................................................................................................6 4.1 实现环境..........................................................................................................6 4.2 实现结果..........................................................................................................6 4.3 测试实验结果对比分析..................................................................................7
五、心得体会...............................................................................................................8
六、参考文献...............................................................................................................8
七、附录.......................................................................................................................8
第1页
一、概要
1.1 课设目的《TCP/IP 原理与应用》是一门实践性较强的网络基础课程,为了学好这门课程,必须在掌握相关基本协议的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据熟悉TCP/IP的相关基本协议,学会基本的C-S编程方法,能够用网络编程解决实际的网络通信问题,并培养良好的程序设计技能。
1.2 设计要求
1、通过这次设计,要求了解TCP/IP的基本协议的工作原理和基本的网络编程知识,利用单(多)线程技术、API函数等编写服务和客户端应用程序,利用MFC提供的类编写较为复杂网络应用程序。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2、学生必须仔细研读《TCP/IP 原理与应用》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。
3、本次课程设计按照教学要求需要在两周时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时地向指导教师汇报。
4、每个题目最多四个人。
5、编程语言自定。
1.3 设计题目
网络主机的存活性探测系统设计与实现 1)任务(ping,arp test)
设计并实现能够探测局域网、广域网内主机存活情况的应用系统。2)要求
要能够实现单IP(或域名)和IP段(连续或不连续)的网络主机存活性探测。 探测结果只显示存活主机情况,要有一定的图形显示。
第2页
局域网内的主机存活性探测速度要快。
最好具备一定穿越防火墙的能力(特别是探测局域网内主机的存活性时)
除发送ICMP数据包实现网络主机存活性探测外,建议使用SYN Ping、ACK Ping、Fin Ping、Null Ping方式实现,参考设计流程如下:
开始Y输入的是目标主机的域名吗N获用取目标主机地址Gethostbyname()IPSYN Ping方式探测YNACK Ping方式探测YNFIN Ping方式探测YNNULL Ping方式探测Y向目标主机的端口0发送定制SYN数据包向目标主机的端口0发送定制ACK数据包向目标主机的端口0发送定制FIN数据包向目标主机的端口0发送无标志位数据包收到目标主机ACKYN收到目标主机RSTNYN输出目标主机存活信息输出目标主机暂无开机或IP错误结束
二、需求分析
在网络安全形势日益严峻的情况下,针对网络入侵手段日益复杂、操作系统漏洞不断涌现等问题,预先评估网络信息系统的安全问题已成为网络管理员的重要需求。基于网络的安全扫描主要扫描设定网络内的服务器、路由器、网桥、交换机、访问服务器、防火墙等设备的安全漏洞,并可设定模拟攻击,以测试系统的防御能力,这种技术可模拟入侵者的攻击行为,从系统外部进行扫描,以探测是否存在可被入侵者利用的系统安全薄弱之处。
主机存活性探测的核心功能是防火墙穿越,即在对方已安装防火墙的情况下探测主机的存活性。传统探测远程主机存活性的方法是通过ICMP协议中的回显应答报文来实现。基于
第3页
ICMP协议的主机存活性探测技术主要利用了ICMP回应请求和回显应答报文来实现。但是随着对安全越来越多了解和重视,很多主机为了避免被扫描器探测,通过防火墙将ICMP包屏蔽,从而达到在网络中隐藏的目的。因此采用基于ICMP协议无法准确探测远程主机的存活性。
依据目标主机受到ARP请求后一定返回自身物理地址的工作原理,设计并实现了一种新的主机存活性探测系统。测试结果表明该系统能穿越防火墙探测主机的存活性,局域网内探测结果的准确率100%,为网络安全扫描工具的设计提供了一种新方法。
三、系统分析与设计
3.1 基本思想
ARP协议是“Addre Resolution Protocol”(地址解析协议)的缩写,主要完成那个IP地址到MAC地址的动态映射,以实现信息送往目的主机。
在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址(硬件地址),任何时候当主机或者路由器需要找出另一个主机或者路由器在此网络上的物理地址时,就发送一个ARP查询分组。因为发送站不知道接收站的物理地址,查询就在网络上广播,每一个在网络上的主机或者路由器都接受和处理这个ARP查询分组,但只有意图中的接受者才是别其IP地址,并发回ARP响应分组。这个分组直接用单播发送给查询者,并使用接收到的查询分组中所用的物理地址。
据此,向局域网内的目标主机发送ARP请求时,无论对方是否安装防火墙,对方都会返回MAC地址。所以,局域网内通过ARP协议探测主机存活的准确率理论值是100%。
第4页
3.2 系统总体设计
基于ARP协议的主机存活性探测系统主要包括域名解析和IP地址的转换、ARP请求发送与处理两大模块,各模块的功能简述如下:
域名解析及IP地址转换:调用inet_addr将输入的点分十进制数表示的IP地址转换为网络字节顺序的IP地址;获取主机名:调用gethostbyaddr获取存活主机的主机名;
ARP请求发送与处理:调用sendARP函数向目标地址发送ARP请求;获取MAC地址,判断ARP返回的MAC地址转换成易读的形式,并将存活主机IP写入文档。
3.3 系统详细设计
依据上述原理分析,设计的基于ARP协议的主机存活性探测流程图如下所示:
第5页
四、系统实现
4.1 实现环境
采用VC++6.0实现基于ARP的主机存活性探测系统,系统主要包括动态链接库ArdDLL的主程序。主要代码如下:
DLL部分主要包挎DLL输出函数Arp ARPDLL_API DWORD ARP(char *ip,BYTE *mac){};该函数的主要功能是通过向目标主机发送ARP请求返回目标主机MAC地址达到探测主机存活性的目的。SendARP()函数原型如下:
DWORD SendArp(IPAddr DestIP,//目标地址 IPAddr SrcIP,//源IP地址
PULONG pMacAddr,//返回MAC地址指针 PULONG PhyAddrLen //返回MAC地址长度);主程序是一个基于对话框的VC++工程。在对话框中通过两个IP地址控件输入起始探测地址和中指探测地址,在对网段中的每个IP地址调用DLL中得函数获得MAC:
BYTE MAC[6];LPTSTR pIP=strip.GetBuffer(16);HRESULT hr=Arp(pIP,Mac);调用gethostbyaddr()函数获取主机名:
Hostent* remoteHostent=(hostent*)malloc(sizeof(hosten));remoteHostent=gethostbyaddr((char *)&ipAddr,sizeof(in_addr),AF_INET);if(remoteHosten)hn=remoteHosten->h_name;4.2 实现结果
基于ARP协议的主机存活性探测系统实现后的主界面如下:
第6页
4.3 测试实验结果对比分析
传统的主机存活性探测方法是Ping命令,而如果用ping命令测试目标主机结果如下:
从图可以看出ping 命令无法探测目标主机125.219.181.178 和125.219.181.179的存活性。因为ping命令被目标主机的防火墙阻挡了。由此可见,传统的通过发送和监控ICMP Ping
第7页
数据包探测目标主机的存活性时误报率极高。
五、心得体会
本次课程设计任务是做网络主机的存活性探测。做课程设计过程中遇到很多问题,通过老师的指导和上网查阅资料慢慢的得到了解决。
六、参考文献
[1] 中原工学院院报 [2] CSDN论坛
七、附录
Ex_Arp1Dlg.cpp中主要代码:
====== void CEx_Arp1Dlg::ScanHost(CString strIP){ //调用DLL中的函数获得MAC BYTE Mac[6];LPTSTR pIP = strIP.GetBuffer(16);HRESULT hr = Arp(pIP,Mac);if(hr == 0){
CString str;
CString strMac(“”);
int i;
for(i=0;i
{
str.Format(“%02X:”,Mac[i]);strMac += str;
第8页
} str.Format(“%02X”,Mac[i]);strMac += str;IPAddr ipAddr;char buf[256];CString hn;ipAddr = inet_addr(pIP);//IP->网络字节
WSADATA wsadata;
ZeroMemory(buf,256);//将指定的内存块清零.if(WSAStartup(winsock_version,&wsadata))str.Format(“can't initialize socket”);hostent * remoteHostent =(hostent*)malloc(sizeof(hostent));remoteHostent = gethostbyaddr((char*)&ipAddr,sizeof(in_addr), AF_INET);//返回对应于给定地址的主机信息
if(remoteHostent)hn = remoteHostent->h_name;
} //获取列表中当前的的数据个数
int nNo = m_ctrlListData.GetItemCount();//将数据添加进列表 str.Format(“%d”,nNo+1);m_ctrlListData.InsertItem(nNo, str);m_ctrlListData.SetItemText(nNo, 1, strIP);m_ctrlListData.SetItemText(nNo, 2, strMac);m_ctrlListData.SetItemText(nNo, 3, hn);strIP.ReleaseBuffer();
第9页
} void CEx_Arp1Dlg::OnButton1(){ // TODO: Add your control notification handler code here
CString strStartIP,strEndIP;
} ArpDll.cpp的主要代码:
======= // ArpDll.cpp : Defines the entry point for the DLL application.#include “StdAfx.h” #include “ArpDll.h” #include #include #include #include “iphlpapi.h”
第10页
m_StartIP.GetWindowText(strStartIP);m_EndIP.GetWindowText(strEndIP);struct
in_addr targetaddr;
unsigned long ips=inet_addr(strStartIP);//计算起始IP地址的网络字节
unsigned long ipe=inet_addr(strEndIP);//计算结束IP地址的网络字节
ips=ntohl(ips);//计算起始IP地址的主机字节
ipe=ntohl(ipe);//计算结束IP地址的主机字节
for(int k=ips;k
targetaddr.S_un.S_addr=htonl(k);//探测指定主机是否存活
ScanHost(inet_ntoa(targetaddr));//inet_ntoa()返回点分十进制的字符串 Sleep(10);//执行挂起一段时间 }
#include #pragma comment(lib,“Iphlpapi.lib”)#pragma comment(lib,“Ws2_32.lib”)BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){
switch(ul_reason_for_call){
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH: break;
}
return TRUE;} // This is an example of an exported function.ARPDLL_API DWORD arp(char *ip, BYTE *mac){
char c = 'n';
HRESULT hr;
IPAddr ipAddr;
ULONG
pulMac[2];
ULONG
ulLen;
ipAddr = inet_addr(ip);
memset(pulMac, 0xff, sizeof(pulMac));
ulLen = 6;
第11页
hr = SendARP(ipAddr, 0, pulMac, &ulLen);
if(hr==NO_ERROR)
{
FILE *stream;
stream=fopen(“host.txt”,“a”);
fprintf(stream,“%s%c”, ip, c);
fclose(stream);
size_t i, j;
PBYTE pbHexMac =(PBYTE)pulMac;
//
// Convert the binary MAC addre into human-readable
//
for(i = 0, j = 0;i
{
mac[i] = pbHexMac[i];
}
return 0;} else {
return hr;} }
第12页