精华内容
下载资源
问答
  • 这是计算机网络 发现网络中的活动主机的程序
  • 发现网络中的活动主机 计算机网络 课程设计 源代码 vc6.0
  • 网络应用课程设计的发现网络中的活动主机C++版 其中有运行文件+源码+实验报告+答辩PPT
  • 发现网络中的活动主机 解析IP数据包源程序
  • 发现网络中的活动主机,计算机网络课程设计文档
  • 计算机网络课程设计,发现网络中的活动主机
  • 计算机网络课程设计,发现网络中的活动主机。无需调用cmd,直接可在exe中输出结果的程序、
  • 本文讨论的是如何对网络上主机的活动状况...当主机安装的防火墙软件进行了访问控制时,如禁用ping响应或所有ICMP响应,常用的方法不能有效探测网络中主机的活动状态,这时就需要使用其他的方法对活动的主机进行探测。
  • 里面包含两个关于网络课程的实验或设计,简易聊天工具和通过ICMP协议发现网络中的活动主机
  • 发现网络中的活动主机报告及源代码,及其源代码的相关分析和作用,设计程序,其功能是发送ICMP数据包,以获取指定网络中的活动主机,并将结果显示在标准输出上。 程序的具体要求如下: l)用命令行形式运行:...
  • 在网络管理中,常常要确定当前网络中处于活动状态的主机,这时可以通过使用ICMP的回送和回送响应消息来完成这项工作。本次设计的目的就是编制程序,利用ICMP数据包,发现指定网段中的活动主机
  • 在一个网段中,给其他主机发送ICMP消息便可知这个主机是否活跃,也就是通过ping该主机,看有没有回应从而得知该主机是否存在,...它可以对你所要搜寻的网段中的所有ip发送ICMP消息,然后得到回应,列出所有活动主机
  • 要求:设计程序,其功能是发送ICMP数据包,以获取指定网段中的活动主机,并将结果显示在标准输出上 代码需要注释 说明思路 附带流程图
  • 网络编译----发现网络中的活动主机

    千次阅读 2019-06-13 22:30:28
    根据协议规定的ICMP数据包的标准格式,编写程序向指定子网中的目的主机(例如从192.168.1.1到192.168.1.10)发送ICMP数据包进行解析,所发现处于活动状态的主机。在本练习中只显示活动主机的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++发现出错,哎。。。

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

    展开全文
  • 用vc++编写,在局域网侦听活动主机,其中包含MFC界面设计以及原始套接字使用
  • 本课程设计的目的就是编制程序,利用ICMP数据包,发现指定网段中的活动主机。通过课程设计,使学生更加熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识。 二.课程设计要求: 设计程序,其功能是发送ICMP...
  • 编制程序,通过使用ICMP协议的回送请求和回送应答报文,确定指定网段中的活动主机。 1)以命令形式运行:scanhost Start_IP End_IP 其中scanhost是程序名;Start_IP为被搜索网段的开始IP地址;End_IP为被搜索网段的...
  • 这个设置会影响用户计算机是否可以找到网络上其他计算机和设备,以及网络上其他计算机是否可以找到用户计算机,在win7系统的网络中无法看到工作组内其他电脑,那是因为没有开启网络发现,那么win7系统怎么...

    网络发现是一种网络设置,这个设置会影响用户的计算机是否可以找到网络上的其他计算机和设备,以及网络上的其他计算机是否可以找到用户的计算机,在win7系统的网络中无法看到工作组内其他的电脑,那是因为没有开启网络发现,那么win7系统怎么启用网络发现呢?今天为大家分享win7系统启用网络发现的操作方法。

    启用网络发现操作方法:

    1、点击“开始”,然后打开“控制面板”。如图所示:

    cac2a205a32bf07b6c3867dde6c4b8c3.png

      
    2、打开控制面板后在查看方式里选择“类别”。如图所示:

    3ffb8f3535d8b02c9d092dc999fd2348.png

      
    3、之后选择“网络和Internet”。如图所示:

    7f3026b492bb7035836323be20f611df.png

      
    4、然后选择“网络和共享中心”。如图所示:

    4361047f1736655bad2414813119fc3d.png

      
    5、点击“更改高级共享设置”。如图所示:

    59f858e593c3793f0d614f4b09c2475a.png

      
    6、选择“启用网络发现”然后点击“保存修改”即可。如图所示:

    a248f26c21f19f065ad86fcc41558388.png

      
    关于win7系统启用网络发现的操作方法就详细分享到这边了,如果用户们使用电脑的时候不知道怎么启用网络发现,可以参考上述方法步骤进行操作哦,希望本篇教程对大家有所帮助,更多精彩教程请关注。

    展开全文
  • 用C++程序编写的发现活动主机的ip程序,计算机网络与通信课程设计
  • 本程序的主体思想是使用ICMPECHO数据包来探测指定网段内的活动主机,通过发送一个ICMPECHO(Type 8)数据包到目标主机,如果ICMPECHOReply(Type 0)数据包接收到,说明主机是存活状态。由于结束到的回送响应ICMP包是...
  • 使用ARP协议发现网络中的主机

    千次阅读 2008-11-08 12:03:00
    网上存在很多关于ARP的文章,大多都是关于ARP欺骗,这里介绍ARP的另类用法:探测目标主机是否处于活动状态。...这里我们介绍一下利用ARP协议探测网络中的活动主机的思路,这种方法的缺点只能探测以太网

    网上存在很多关于ARP的文章,大多都是关于ARP欺骗,这里介绍ARP的另类用法:探测目标主机是否处于活动状态。
    传统探测远程主机是否存活的方法是通过ICMP协议中的回显应答报文来探测(ping)。随着对安全的越来越多的了解和重视,很多主机为了避免被扫描器探测,通过防火墙将ICMP包屏蔽,从而达到在网络中隐藏的目的。
    这里我们介绍一下利用ARP协议探测网络中的活动主机的思路,这种方法的缺点只能探测以太网内的活动主机。
    先大概了解一下ARP协议。ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写,它的作用是将IP地址转换成物理地址(就是常说的MAC地址),其详细过程参考《TCP/IP详解 卷一》。

    协议ARP的分组格式如下:
    ------------------------------------------
    以太网目的地址(6个字节)
    以太网源地址(6个字节)
    帧类型(ARP = 0806)(2个字节)
    ------------------------------------------
    硬件类型(Ethernet=01)(2个字节)
    协议类型(IPv4=0800)(2个字节)
    硬件地址长度(1个字节)
    协议地址长度(1个字节)
    OP操作选项(ARP request=01,ARP reply=02)(2个字节)
    发送端以太网地址(6个字节)
    发送端IP地址(4个字节)
    目的以太网地址(6个字节)
    目的IP地址(4个字节)
    --------------------------------------------

    我们向目标主机发送一个ARP请求,如果目标主机处于活动状态则会返回其MAC地址,如果对方返回MAC地址,则表明对方处于活动状态,这样达到探测目的。ARP请求包内容如下:
    ------------------------------------------
    以太网目的地址 |FFFFFFFFFFFF(广播地址)
    以太网源地址 |本地MAC地址
    帧类型 |0806
    ------------------------------------------
    硬件类型 |01
    协议类型 |0800
    硬件地址长度 |06
    协议地址长度 |04
    OP操作选项 |01
    发送端以太网地址|本地MAC地址
    发送端IP地址 |目标主机IP地址
    目的以太网地址 |000000000000
    目的IP地址 |目标主机IP地址
    --------------------------------------------
    注意:这里以太网目的地址为FFFFFFFFFFFF,这是广播地址,以太网上所有主机都能收到这个包,在收到这个数据包后,操作系统判断目的IP地址是不是这台主机,如果不是则丢弃(不作处理),否则发送回一个ARP应答包,包的内容如下:
    ------------------------------------------
    以太网目的地址 |探测主机的MAC地址
    以太网源地址 |本地MAC地址 (这里本地指被探测主机)
    帧类型 |0806
    ------------------------------------------
    硬件类型 |01
    协议类型 |0800
    硬件地址长度 |06
    协议地址长度 |04
    OP操作选项 |02
    发送端以太网地址|本地MAC地址 (这里本地指被探测主机)
    发送端IP地址 |本机IP地址 (这里本地指被探测主机)
    目的以太网地址 |探测主机的MAC地址
    目的IP地址 |探测主机的IP地址
    --------------------------------------------

    我们可以使用Pcap自己来构造这个数据包(具体过程参考Pcap的相关文档,这里我们使用SendARP()来实现),SendARP()是 Microsoft Platform SDK中提供用来获得目标主机的MAC地址的函数,SendARPSendARP的函数原型如下:
    DWORD SendARP(
    IPAddr DestIP, // 目标IP地址
    IPAddr SrcIP, // 源IP地址
    PULONG pMacAddr, // 返回MAC地址指针
    PULONG PhyAddrLen // 返回MAC地址长度
    );

    探测源码

     

    下面这个例子摘至MSND,稍做改动可以成为一个以太网内活动主机探测工具

    //
    // Link with ws2_32.lib and iphlpapi.lib
    //


    #include
    #include
    #include
    #include



    int __cdecl main()
    {
    HRESULT hr;
    IPAddr ipAddr;
    ULONG pulMac[2];
    ULONG ulLen;


    ipAddr = inet_addr ("192.168.0.1");
    memset (pulMac, 0xff, sizeof (pulMac));
    ulLen = 6;


    hr = SendARP (ipAddr, 0, pulMac, &ulLen);
    printf ("Return %08x, length %8dn", hr, ulLen);


    size_t i, j;
    char * szMac = new char[ulLen*3];
    PBYTE pbHexMac = (PBYTE) pulMac;


    //
    // Convert the binary MAC address into human-readable
    //
    for (i = 0, j = 0; i < ulLen - 1; ++i) {
    j += sprintf (szMac + j, "%02X:", pbHexMac);
    }

    sprintf (szMac + j, "%02X", pbHexMac);
    printf ("MAC address %sn", szMac);


    delete [] szMac;


    return 0;
    }

    展开全文
  • 基于ICMP数据包的主机扫描进行网络管理时,常常需要确定当前网络中处理活动状态的主机。本设计的目标就是编制程序,利用ICMP的回送请求和回送应答消息,来发现指定网段中的活动主机,即ping消息的请求和应答。
  • 用OSSIM发现网络扫描

    2017-11-08 01:10:00
    通过获取活动主机、开放服务、操作系统等关键信息重要技术。扫描技术包括Ping扫描(确定哪些主机正在活动)、端口扫描(确定有哪些开放服务)、操作系统辨识(确定目标主机操作系统类型)。详情参考《基于OSSIM...

    用OSSIM发现网络扫描


         网络扫描原本是用于网络资源管理。通过获取活动主机、开放服务、操作系统等关键信息的重要技术。扫描技术包括Ping 扫描(确定哪些主机正在活动)、端口扫描(确定有哪些开放服务)、操作系统辨识(确定目标主机的操作系统类型)。详情参考《基于OSSIM平台的漏洞扫描详解》、《OSSIM中主动与被动探测工具(arpwatch+p0f+pads)组合应用》。

         这些扫描器在扫描时大多使用小包,这时想通过流量监控系统(Zabbix等)发现扫描行为,是不容易实现的。需要使用入侵检测系统方可发现这种异常行为。

    注意 你或许可以通过扫描工具来获取本网段内主机的IPMAC地址的对应关系,如果跨网关就无法获取,因为ARP包是无法跨越网段传输。


      在企业网环境里你可以通过网管软件中启用的SNMP协议获取IPMAC地址,但如果某台主机没有通过三层交换设备发送数据包,或者三层设备未开启三层交换功能,就无法获得这些信息。


    1.    抓包工具发现扫描行为


    我们看一个正常时候的网络通信的截图


    wKioL1gkJu3h5SxfAAC9i9mKsR4406.jpg-wh_50


    出现扫描的网络通信


    wKioL1gkJv6wSGHOAAGRWqi5b70912.jpg-wh_50


    发现区别了吧,下面我们可以通过类似Tcpdump或Wireshark这种抓包工具发现以nmap为实例的扫描。

    下面在Linux主机上使用nmap工具扫描Windows主机端口的情况。


    wKioL1gkJ4DRTQ72AAKURiQWMWU596.jpg-wh_50


    如果你换成 Sniffer Pro也有类似的界面。


    wKiom1glKVqgOQuNAAH5n46X5qQ746.jpg-wh_50


    网络管理者每天有多少时间来做这种枯燥乏味的工作?很显然利用这些工具发现扫描行为并不算一种好的解决方案。


    2. 通过入侵检测系统发现扫描


    OSSIM平台的Sensor里集成了Snort,无需人工之手,所有报警都自动完成,下面仅举一个nmap扫描检测snort规则的例子来说明。


    ”alert tcp $EXTERNAL_NET any -> $HOME_NET any”


    wKiom1gkKKfgERedAAGeia_gUVk938.jpg

    wKiom1gkKWvADXAAAAFuFuWbm4U066.jpg


    以上报警都由系统自动完成。



     本文转自 李晨光 51CTO博客,原文链接:http://blog.51cto.com/chenguang/1871503,如需转载请自行联系原作者




    展开全文

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 142
精华内容 56
关键字:

发现网络中的活动主机