[华为机试练习题]54.判断任意两台计算机的IP地址是否属于同一子网络

简介:

题目

描述:

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

请看以下示例:
运算演示之一:

IP地址:192.168.0.1
子网掩码:255.255.255.0
AND运算
转化为二进制进行运算:
IP地址:11010000.10101000.00000000.00000001 
子网掩码:11111111.11111111.11111111.00000000 
AND运算:11010000.10101000.00000000.00000000 
转化为十进制后为: 192.168.0.0

运算演示之二:

IP地址:192.168.0.254 
子网掩码:255.255.255.0 
AND运算
转化为二进制进行运算:
IP地址:11010000.10101000.00000000.11111110 
子网掩码:11111111.11111111.11111111.00000000 
AND运算:11010000.10101000.00000000.00000000 
转化为十进制后为:192.168.0.0

通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。

接口说明
原型:

int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);

输入参数:

char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”
char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”
char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”

返回值:

0:IP1与IP2不属于同一子网络。
1:IP1与IP2属于同一子网络。

练习阶段:

初级 

代码

/*---------------------------------------
*   日期:2015-07-05
*   作者:SJF0115
*   题目:判断任意两台计算机的IP地址是否属于同一子网络 
*   来源:华为机试练习题
-----------------------------------------*/
#include <iostream>
#include "OJ.h"
#include <string>
#include <vector>
using namespace std;

/*
功能: 判断两台计算机IP地址是同一子网络。
原型:
    int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);

输入参数:
    char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”;
    char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”;
    char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”;

返回值:
    0:IP1与IP2不属于同一子网络;
    1:IP1与IP2属于同一子网络;
*/

// 检查子网掩码和IP格式是否正确 并返回分段
bool CheckIP(string str,vector<int> &numVec){
    int size = str.size();
    int pointCount = 0;
    string::size_type index = 0;
    int prePoint = 0;
    vector<string> part;
    while((index = str.find_first_of('.',index)) != string::npos){
        //..之间有数字
        if(index > prePoint){
            part.push_back(str.substr(prePoint,index-prePoint));
        }//if
        ++index;
        prePoint = index;
        ++pointCount;
    }//while
    if(prePoint < size){
        part.push_back(str.substr(prePoint));
    }//if

    int partSize = part.size();
    if(partSize != 4){
        return false;
    }//if

    // 判断每一部分均属于0-255
    int num;
    for(int i = 0;i < partSize;++i){
        num = atoi(part[i].c_str());
        numVec.push_back(num);
        if(num < 0 || num > 255){
            return false;
        }//if
    }//for
    // 代表错误IP
    if(pointCount != 3){
        return false;
    }//if
    return true;
}

int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask){
    if(pcIp1 == NULL || pcIp2 == NULL || pcSubNetworkMask == NULL){
        return 0;
    }//if
    // 转换为string (自己习惯)
    string ip1(pcIp1);
    string ip2(pcIp2);
    string net(pcSubNetworkMask);
    vector<int> ip1Vec;
    vector<int> ip2Vec;
    vector<int> netVec;
    int result,result2;
    // ip 子网掩码 输入合法
    if(CheckIP(ip1,ip1Vec) && CheckIP(ip2,ip2Vec) && CheckIP(net,netVec)){
        for(int i = 0;i < 4;++i){
            result = ip1Vec[i] & netVec[i];
            result2 = ip2Vec[i] & netVec[i];
            if(result != result2){
                return 0;
            }//if
        }//for
    }//if
    else{
        return 0;
    }//else
    return 1;
}
目录
相关文章
|
29天前
|
移动开发 网络协议 安全
网络面试题:什么是 TCP/IP?
网络面试题:什么是 TCP/IP?
43 0
网络面试题:什么是 TCP/IP?
|
30天前
|
网络协议 网络虚拟化 数据中心
华为配置VXLAN构建虚拟网络实现相同网段互通示例(静态方式)
配置VXLAN构建虚拟网络实现相同网段互通示例(静态方式
|
2月前
|
运维 网络协议 网络架构
网络技术基础(6)——IP路由基础
【2月更文挑战第10天】网络基础笔记(加班了几天,中途耽搁了,预计推迟6天)
|
13天前
|
域名解析 监控 网络协议
Linux网卡与IP地址:通往网络世界的通行证 🌐
探索Linux网卡与IP地址关系,理解网卡作为网络通信的关键。Linux网卡需配置IP地址以实现唯一标识、通信、路由、安全管理和网络服务。无IP地址时,网卡在特定情况如局域网服务、网络监控、无线认证和网络启动可有限工作,但通用功能受限。配置IP地址通常通过`ifconfig`(传统)或`ip`(现代)命令,永久配置需编辑网络配置文件。配置错误如IP冲突、子网掩码错误、默认网关和DNS配置不当可能导致服务中断、网络拥堵、安全漏洞和数据丢失。重视网络配置的正确与安全至关重要。
Linux网卡与IP地址:通往网络世界的通行证 🌐
|
30天前
|
网络协议 Linux C++
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
22 0
|
1月前
|
域名解析 缓存 网络协议
探索Qt 网络编程:网络地址与服务类全解析
探索Qt 网络编程:网络地址与服务类全解析
54 0
|
1月前
|
存储 安全 网络安全
网络安全威胁——计算机病毒
网络安全威胁——计算机病毒
|
1月前
|
网络协议 Shell 网络架构
2. 搭建互联互通的 IP 网络
2. 搭建互联互通的 IP 网络
153 0
|
1月前
|
数据采集 SQL DataWorks
DataWorks常见问题之一样IP的分库只有部分网络连通如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
32 6
|
1月前
|
网络协议 算法 网络架构
计算机网络:网络层(IP组播)
计算机网络:网络层(IP组播)