在C++中,判断终端IP与目标IP是否在同一局域网,一般的做法是通过判断IP地址与子网掩码的与运算结果是否相同来判断。IP地址是网络中设备的唯一标识,子网掩码是用来判断任意两个IP地址是否在同一子网的标准。在同一局域网中,设备的IP地址的网络部分应该是相同的,这部分可以通过与子网掩码做与运算来得到。

以下是C++的实现代码:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

vector<string> split(const string &s, char delim) {
    stringstream ss(s);
    string item;
    vector<string> tokens;
    while (getline(ss, item, delim)) {
        tokens.push_back(item);
    }
    return tokens;
}

int ipToInt(const string &ip) {
    vector<string> parts = split(ip, '.');
    int ipInt = 0;
    for (int i = 0; i < parts.size(); i++) {
        ipInt = ipInt << 8;
        ipInt += stoi(parts[i]);
    }
    return ipInt;
}

bool isSameLAN(const string &ip1, const string &ip2, const string &mask) {
    int ip1Int = ipToInt(ip1);
    int ip2Int = ipToInt(ip2);
    int maskInt = ipToInt(mask);
    return (ip1Int & maskInt) == (ip2Int & maskInt);
}

int main() {
    string ip1 = "192.168.1.1";
    string ip2 = "192.168.1.2";
    string mask = "255.255.255.0";
    if (isSameLAN(ip1, ip2, mask)) {
        cout << "Same LAN" << endl;
    } else {
        cout << "Different LAN" << endl;
    }
    return 0;
}

在这段代码中,首先定义了一个split函数,用于将字符串按照指定的分隔符分割成一个字符串数组,这在处理IP地址时非常有用。然后定义了一个ipToInt函数,将IP地址字符串转换成一个整数,这样就可以进行按位与运算了。最后定义了一个isSameLAN函数,用于判断两个IP地址是否在同一局域网。在这个函数中,首先将IP地址和子网掩码转换成整数,然后进行按位与运算,如果结果相同,就说明这两个IP地址在同一局域网。

在main函数中,定义了两个IP地址和一个子网掩码,然后调用isSameLAN函数进行判断,如果在同一局域网,就输出"Same LAN",否则输出"Different LAN"。

这段代码的运行结果可以判断两个IP地址是否在同一局域网,非常实用。在实际的网络编程中,这样的判断非常常见,这段代码可以作为一个基础的工具函数,用于处理IP地址和子网掩码的判断。

云服务器/高防CDN推荐

蓝易云国内/海外高防云服务器推荐


海外免备案云服务器链接:www.tsyvps.com

蓝易云安全企业级高防CDN:www.tsycdn.com

持有增值电信营业许可证:B1-20222080【资质齐全】

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。

最后修改:2024 年 01 月 06 日
如果觉得我的文章对你有用,请随意赞赏