gpt4 book ai didi

c++ - 使用 inet_pton() 检查给定 IP 是否属于 IP 范围的一部分

转载 作者:行者123 更新时间:2023-11-28 00:07:43 27 4
gpt4 key购买 nike

inet_ptonAF_INET 应该提供一个 in_addr,其成员 s_addr 将具有与uint32_t 类型。我正在尝试使用此属性来检查给定 IP 是否属于某个范围,如下所示:

#include <iostream>
#include <sstream>
#include <arpa/inet.h>
using namespace std;

template <class T> void convert_from_str (string s, T &r) {
stringstream ss(s);
ss >> r;
}

int main () {
string cidr = "10.0.0.0/8", ip = "10.32.11.195", ci;
in_addr in1, in2;
uint32_t mask;
size_t len;

len = cidr.find_first_of('/');
ci = cidr.substr(0, len);
convert_from_str(cidr.substr(len + 1, cidr.length()), mask);

mask = 32 - mask;

inet_pton(AF_INET, ip.c_str(), &in1);
inet_pton(AF_INET, ci.c_str(), &in2);

if (in1.s_addr >> mask == in2.s_addr >> mask) {
cout << "in range" << endl;
}
else {
cout << "not in range" << endl;
}

return 0;
}

但是,这并没有像预期的那样工作,每次都产生“不在范围内”。

问题出在哪里,我该怎么做才能解决问题?

最佳答案

s_addr 是网络字节序;您需要将值传递给 ntoh() 以在移位之前将它们转换为主机字节顺序。

关于c++ - 使用 inet_pton() 检查给定 IP 是否属于 IP 范围的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com