精华内容
下载资源
问答
  • 发现网络中活动主机,计算机网络课程设计文档
  • 活动主机扫描就是向主机发送数据包,如果主机有响应消息返回,则该主机处于活动状态,否则主机不存在或处于关机状态。当主机安装的防火墙软件进行了访问控制时,如禁用ping响应或所有ICMP响应,常用的方法不能有效...
  • 发现网络中活动主机报告及源代码,及其源代码的相关分析和作用,设计程序,其功能是发送ICMP数据包,以获取指定网络活动主机,并将结果显示在标准输出上。 程序的具体要求如下: l)用命令行形式运行:...
  • 在一个网段,给其他主机发送ICMP消息便可知这个主机是否活跃,也就是通过ping该主机,看有没有回应从而得知该主机是否存在,...它可以对你所要搜寻的网段的所有ip发送ICMP消息,然后得到回应,列出所有活动主机
  • 网络编译----发现网络中活动主机

    千次阅读 2019-06-13 22:30:28
    实验目的: 根据协议规定的ICMP数据包的标准格式,编写程序向指定子网的目的主机(例如从192.168.1.1到192.168.1.10)...在本练习只显示活动主机的IP地址,并采用多线程来提高主机扫描速度。 实验要求: 要求程...

    参考:https://blog.csdn.net/skullsky/article/details/52244770

    实验目的:
    根据协议规定的ICMP数据包的标准格式,编写程序向指定子网中的目的主机(例如从192.168.1.1到192.168.1.10)发送ICMP数据包进行解析,所发现处于活动状态的主机。在本练习中只显示活动主机的IP地址,并采用多线程来提高主机扫描速度。

    实验要求:
    要求程序为命令行程序。例如可执行文件名为ScanHost.exe,则程序的命令行格式为: ScanHost start_addr end_addr
    其中,start_addr为开始搜索的IP地址,end_addr为结束搜索的IP地址。
    (2) 要求将计算的子网地址显示在控制台,具体格式为:
    开始主机扫描;
    活动主机:xx.xx.xx.xx
    活动主机:xx.xx.xx.xx

    (3) 要求有良好的编程规范与注释。编程所使用的操作系统、语言和编译环境不限,但是在提交的文档中需要加以注明。
    (4) 要求撰写说明文档,包括程序的开发思路、工作流程、关键问题、解决思路以及进一步的改进等内容。

    实际原理以及其他的代码功能介绍可参考:https://blog.csdn.net/skullsky/article/details/52244770

    在这里本人把代码整理了下,外加稍微修改,代码如下:

    #include <stdio.h>
    #include <winsock.h>
    #pragma comment(lib,"Ws2_32.lib")
     
    int qq=0;
    USHORT checksum(USHORT* buff, int size)
    {
    	unsigned long cksum = 0;
    	while(size>1)
    	{
    		cksum += *buff++;
    		size -= sizeof(USHORT);
    	}
    	// 是奇数
    	if(size)
    	{
    		cksum += *(UCHAR*)buff;
    	}
    	// 将32位的chsum高16位和低16位相加,然后取反
    	cksum = (cksum >> 16) + (cksum & 0xffff);
    	cksum += (cksum >> 16);    // ??? 
    	return (USHORT)(~cksum);
    }
     
     typedef struct iphdr{                  //IP头
        unsigned int headlen:4;            //IP头长度
        unsigned int version:4;            //IP版本号
        unsigned char tos;                 //服务类型
        unsigned short id;                 //ID号
        unsigned short flag;               //标记
        unsigned char ttl;                 //生存时间
        unsigned char prot;                //协议
        unsigned short checksum;           //效验和
        unsigned int sourceIP;             //源IP
        unsigned int destIP;               //目的IP
    }IpHeader;
     
    typedef struct icmp_hdr
    {
        unsigned char   icmp_type;   // 消息类型
        unsigned char   icmp_code;   // 代码
        unsigned short icmp_checksum; // 校验和
    // 下面是回显头
        unsigned short icmp_id;   // 用来惟一标识此请求的ID号,通常设置为进程ID
        unsigned short icmp_sequence; // 序列号
        unsigned long   icmp_timestamp; // 时间戳
    } ICMP_HDR, *PICMP_HDR;
     
     
     //SOCKET sRaw=::socket(AF_INET,SOCKET_RAW,TPPROTO_ICMP);
     //SetTimeout(sRaw,1000,TRUE);
      
    int SetTimeout(SOCKET s, int nTime, BOOL bRecv)
    {
    int ret = ::setsockopt(s, SOL_SOCKET, bRecv ? SO_RCVTIMEO : SO_SNDTIMEO, (char*)&nTime, sizeof(nTime));
    return ret != SOCKET_ERROR;
    }
     
    int Computer(char szDestIP[30])                   //扫描主机是否存活
    {
    	WSADATA wsaData;
    	WORD wVersionRequested=MAKEWORD(1,1);
    	if (WSAStartup(wVersionRequested , &wsaData))
    	{
    		printf("Winsock Initialization failed.\n");
    		exit(1);
    	}
    	SOCKET sRaw=::socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
    	SetTimeout(sRaw,1000,TRUE);
    	SOCKADDR_IN dest;
    	dest.sin_family=AF_INET;
    	dest.sin_port=htons(0);
    	dest.sin_addr.S_un.S_addr=inet_addr(szDestIP);
     
    	char buff[sizeof(ICMP_HDR)+32];
    	ICMP_HDR * pIcmp=(ICMP_HDR *)buff;
     
    	pIcmp->icmp_type=8;
    	pIcmp->icmp_code=0;
    	pIcmp->icmp_id=(USHORT)::GetCurrentProcessId();
    	pIcmp->icmp_checksum=0;
    	pIcmp->icmp_sequence=0;
     
    	memset(&buff[sizeof(ICMP_HDR)],'E',32);
     
    	USHORT nSeq=0;
    	char revBuf[1024];
    	SOCKADDR_IN from;
    	int nLen=sizeof(from);
    		static int nCount=0;
    		int nRet;
    /*		if (nCount++==4)
    		{
    			break;
    		}*/
    		pIcmp->icmp_checksum=0;
    		pIcmp->icmp_timestamp=::GetTickCount();
    		pIcmp->icmp_sequence=nSeq++;
    		pIcmp->icmp_checksum=checksum((USHORT *)buff,sizeof(ICMP_HDR)+32);
    		nRet=::sendto(sRaw,buff,sizeof(ICMP_HDR)+32,0,(SOCKADDR *)&dest,sizeof(dest));
    		if (nRet==SOCKET_ERROR)
    		{
    			printf("sendto() failed:%d\n",::WSAGetLastError());
    			return -1;
    		}
    		nRet=::recvfrom(sRaw,revBuf,1024,0,(sockaddr *)&from,&nLen);
    		if (nRet==SOCKET_ERROR)
    		{
    			//printf("%s 主机没有存活!\n",szDestIP);
    			return -1;
    		}
    		printf("活动主机:%s \n",szDestIP);
    		closesocket(nRet);
    	WSACleanup();
    	return 0;
    }
     
    void Port(char adr[20])               //扫描存活主机端口
    {
    	int mysocket,m=0;//这里扫描的
    	int pcount = 0; 
    	struct sockaddr_in my_addr;
    	WSADATA wsaData;
    	WORD wVersionRequested=MAKEWORD(1,1);
    	//printf("请输入要扫描的端口范围(例如1-1024):");
    	//scanf("%d-%d",&m,&n);
    	if (WSAStartup(wVersionRequested , &wsaData))
    	{
    		printf("Winsock Initialization failed.\n");
    		exit(1);
    	}
    	for(int i=m; i<qq; i++)
    	{
    		if((mysocket = socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET)
    			exit(1);
    		my_addr.sin_family = AF_INET;
    		my_addr.sin_port = htons(i);
    		my_addr.sin_addr.s_addr = inet_addr(adr);
    		if(connect(mysocket, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == SOCKET_ERROR)
    		{
    			printf("Port %d - 关闭\n", i);
    			closesocket(mysocket);
    		}
    		else
    		{
    			pcount++;
    			printf("Port %d - 打开\n", i);
    		}
    	}
    	//不知道啥,注释掉~ printf("%d ports open on host - %s\n", pcount, adr);
    	closesocket(mysocket);
    	WSACleanup();
    }
     
     
    void change(int a,int b,int c,int d,char IP[20])          //IP转换
    {
    	char IPPort[4][4]={'\0'};
    	char temp[2]={'.','\0'};
    	itoa(a,IPPort[0],10); 
    	itoa(b,IPPort[1],10); 
    	itoa(c,IPPort[2],10); 
    	itoa(d,IPPort[3],10); 
    	strcat(IP,IPPort[0]);
    	strcat(IP,temp);
    	strcat(IP,IPPort[1]);
    	strcat(IP,temp);
    	strcat(IP,IPPort[2]);
    	strcat(IP,temp);
    	strcat(IP,IPPort[3]);
    
    }
    
    
    int main()
    {
    	int a[4],b[4];
    loop1:
    	printf("ScanHost start_addr end_addr:");
    	scanf("%d.%d.%d.%d %d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3],&b[0],&b[1],&b[2],&b[3]);
    	if (a[0]>255||a[1]>255||a[2]>255||a[3]>255||b[0]>255||b[1]>255||b[2]>255||b[3]>255)
    	{
    		printf("输入的起始地址有误!请重新输入!\n");
    		goto loop1;
    	}
    	//ip地址的计数次数,只能计算最后一小数点位,当然想更完美的可以修改下代码
    	qq=b[0]-a[0];
    	while(!(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==(b[3]+1)))
    	{
    		char IP[20]={'\0'};
    		change(a[0],a[1],a[2],a[3],IP);
    		if((Computer(IP))==0)
    		{
    			Port(IP);
    		}
    		a[3]++;
    		if (a[3]>=255)
    		{
    			a[3]=0;
    			a[2]++;
    		}
    		if (a[2]>=255)
    		{
    			a[2]=0;
    			a[1]++;
    		}
    		if (a[1]>=255)
    		{
    			a[1]=0;
    			a[0]++;
    		}
    		if (a[0]>=255)
    		{
    			printf("地址溢出!\n");
    		    break;
    		}
    	}
    }
    
    

    运行结果截图:
    在这里插入图片描述
    这个代码只能计算出最后一小数点的数,如果是程序更加完美可以在“qq”出修改~

    编译环境:VC 6.0 尝试了DEV C++发现出错,哎。。。

    扫个红包再走撒。
    在这里插入图片描述

    展开全文
  • 发现网络中活动主机 计算机网络 课程设计 源代码 vc6.0
  • 网络应用课程设计的发现网络中活动主机C++版 其中有运行文件+源码+实验报告+答辩PPT
  • 本程序的主体思想是使用ICMPECHO数据包来探测指定网段内的活动主机,通过发送一个ICMPECHO(Type 8)数据包到目标主机,如果ICMPECHOReply(Type 0)数据包接收到,说明主机是存活状态。由于结束到的回送响应ICMP包是...
  • 网络管理,常常要确定当前网络中处于活动状态的主机,这时可以通过使用ICMP的回送和回送响应消息来完成这项工作。本次设计的目的就是编制程序,利用ICMP数据包,发现指定网段活动主机
  • 计算机网络课程设计 发现网络中的课程设计和扫描主机中各端口的状态
  • 计算机网络课程设计,发现网络中活动主机
  • 发现网络中活动主机.doc
  • 编制程序,通过使用ICMP协议的回送请求和回送应答报文,确定指定网段活动主机。 1)以命令形式运行:scanhost Start_IP End_IP 其中scanhost是程序名;Start_IP为被搜索网段的开始IP地址;End_IP为被搜索网段的...
  • 要求:设计程序,其功能是发送ICMP数据包,以获取指定网段活动主机,并将结果显示在标准输出上 代码需要注释 说明思路 附带流程图
  • 计算机网络课程设计,发现网络中活动主机。无需调用cmd,直接可在exe输出结果的程序、
  • 基于ICMP数据包的主机扫描进行网络管理时,常常需要确定当前网络中处理活动状态的主机。本设计的目标就是编制程序,利用ICMP的回送请求和回送应答消息,来发现指定网段活动主机,即ping消息的请求和应答。
  • 本课程设计的目的就是编制程序,利用ICMP数据包,发现指定网段活动主机。通过课程设计,使学生更加熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识。 二.课程设计要求: 设计程序,其功能是发送ICMP...
  • 计算机网络实验四 发现网络中活动主机;网络实验四目的;实验设计要求;相关知识1/6;相关知识 (2/6) ;相关知识 3/6 各种类型的ICMP报文1;相关知识 4/6 各种类型的ICMP报文2;相关知识 (5/6) 各种类型的ICMP报文3; 相关...
  • 发现网络中活动主机 解析IP数据包源程序
  • 利用ICMP数据包,探测指定网段活动主机
  • 用C++程序编写的发现活动主机的ip程序,计算机网络与通信课程设计
  • 嗅探活动主机网络侦听工具 介绍 Netenum被动监视网络上的ARP流量。 它提取有关每个活动主机的基本数据,例如IP地址,MAC地址和制造商。 该工具的主要目的是找到运行的机器而不会产生太大的噪音。 特征 提供有关...
  • 用vc++编写,在局域网侦听活动主机,其中包含MFC的界面设计以及原始套接字的使用
  • 里面包含两个关于网络课程的实验或设计,简易聊天工具和通过ICMP协议发现网络中活动主机
  • 计算机网络与Internet课程设计-发现网络在中活动主机(代码2B报告).pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,616
精华内容 21,446
关键字:

发现网络中的活动主机