程序如下:用于判断给定的终端 IP、子网掩码和目标 IP 是否在同一局域网内。请注意,这个程序假设 IP 地址是用整数表示的。
#include <iostream>
#include <sstream>
#include <vector>
#include <bitset>
// Function to check if two IPs are in the same network
bool checkSameNetwork(std::string terminalIP, std::string subnetMask, std::string targetIP) {
// Split the IP strings into octets
std::istringstream terminalStream(terminalIP), subnetStream(subnetMask), targetStream(targetIP);
std::vector<int> terminalOctets, subnetOctets, targetOctets;
std::string octet;
while (std::getline(terminalStream, octet, '.')) {
terminalOctets.push_back(std::stoi(octet));
}
while (std::getline(subnetStream, octet, '.')) {
subnetOctets.push_back(std::stoi(octet));
}
while (std::getline(targetStream, octet, '.')) {
targetOctets.push_back(std::stoi(octet));
}
// Perform bitwise AND operation on corresponding octets of IP and subnet mask
for (size_t i = 0; i < 4; ++i) {
if ((terminalOctets[i] & subnetOctets[i]) != (targetOctets[i] & subnetOctets[i])) {
return false; // IPs are not in the same network
}
}
return true; // IPs are in the same network
}
int main() {
std::string terminalIP, subnetMask, targetIP;
// Input terminal IP, subnet mask, and target IP
std::cout << "Enter terminal IP: ";
std::cin >> terminalIP;
std::cout << "Enter subnet mask: ";
std::cin >> subnetMask;
std::cout << "Enter target IP: ";
std::cin >> targetIP;
// Check if terminal IP and target IP are in the same network
bool sameNetwork = checkSameNetwork(terminalIP, subnetMask, targetIP);
// Output the result
if (sameNetwork) {
std::cout << "true\n";
} else {
std::cout << "false\n";
}
return 0;
}
需要注意的是,此程序假定输入的 IP 地址是以点分十进制表示法给出的,并且子网掩码和 IP 地址都是有效的。此外,它假设 IPv4 地址,每个 IP 地址由四个十进制数构成。在实际生产环境中,还需要对输入进行更严格的验证和错误处理。