实验二网络主机存活性探测.doc
文本预览下载声明
实验二、网络主机存活性探测
实验目的与要求
掌握网络编程模式。
理解并能应用SendARP函数来获取MAC地址并记录。
2、实验设备与环境
连网PC机(至少一台)。
计算机硬件要求:英特尔 酷睿i5 3代系列处理器、256MB以上内存,Ethernet网卡,网线若干。
计算机软件要求: Windows 7操作系统,Visual c++6.0/.net系统。
3、实验要求
能够实现从起始主机到终止主机的扫描
能够检测到主机是否存活并显示
4、实验内容与步骤:
在程序设计之前,请参照提供的软件安装WinPcap。之后,按照如下步骤操作:
步骤1:
在VC++ 6.0下创建一个DOS命令行程序,工程名:201200824302_HostScan
步骤2:
打开main()函数,在主程序中增加如下头文件和常量定义:
添加头文件如下:
#include stdafx.h
#include Windows.h
#include stdio.h
#include stdlib.h
#include iostream.h
#include Iphlpapi.h
#pragma comment(lib,Iphlpapi.lib)
#pragma comment(lib,Ws2_32.lib)
添加代码如下:
int main(int argc,char *argv[])
{struct sockaddr_in dest,end;
unsigned char mac[6];
DWORD error=0;
ULONG dwSize=6;
if (argc!=3)
{printf(USAGE:\t%s Start_IP End_IP\n,argv[0]);
return 1; }
memset(dest,0,sizeof(dest)); //初始化dest结构
unsigned long startIP,endIP;
dest.sin_family=AF_INET;
dest.sin_addr.s_addr=inet_addr(argv[1]); //填入开始搜索IP
startIP=inet_addr(argv[1]);
end.sin_family=AF_INET;
end.sin_addr.s_addr=inet_addr(argv[2]);
endIP=inet_addr(argv[2]); //填入结束搜索IP地址
while (htonl(startIP)=htonl(endIP)) //起始IP比结束IP小
{error=SendARP(startIP,0,(PULONG)mac,dwSize);
dest.sin_addr.s_addr=startIP;
startIP=htonl(htonl(startIP)+1);
if (error==NO_ERROR)
{/*printf(MACAddress:%2x:%2x:%2x:%2x:%2x:%2x\n,mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
*/
cout主机存活:inet_ntoa(dest.sin_addr)endl;}
else cout主机不存活:inet_ntoa(dest.sin_addr)endl;}
return 0;}
步骤3:
为该工程添加指定头文件的代码信息,
如下图所示:
步骤4:
将工程文件.exe文件复制出来
5、实验结果:
在DOS窗口下运行测试。
打开DOS窗口,在目录下找到可执行的.exe文件,输入可执行文件名、扫描的开始IP和结束IP回车即可。
运行结果如下图:
6、实验总结
通过本次试验我掌握了用SendARP函数来获取MAC地址并记录的方法。虽然做实验的过程中遇到了很多问题,但是通过与同学的探讨总算出了结果。
显示全部