JaminPeru Asked:2020-12-20 10:14:51 +0000 UTC2020-12-20 10:14:51 +0000 UTC 2020-12-20 10:14:51 +0000 UTC 如何将 IP 地址范围转换为地址列表? 772 大约有一百个 IP 地址范围。格式: 1.3.1.3-250.255.250.250 有必要从每个人那里接收 IP 列表。告诉我是否有任何 C / C ++ 库用于此,或者在极端情况下,是否有 Internet 服务? c++ 2 个回答 Voted Best Answer Harry 2020-12-20T14:18:07Z2020-12-20T14:18:07Z 好吧,注意常规系统套接字。在 Windows 上 - 例如,在 winsock2.h 上。 #include <iostream> #include <iomanip> #include <winsock2.h> using namespace std; char * start = "1.3.1.3"; char * stop = "1.3.2.2"; int main(int argc, const char * argv[]) { unsigned long begin = ntohl(inet_addr(start)); unsigned long end = ntohl(inet_addr(stop)); cout << hex << begin << endl; cout << hex << end << endl; for(;begin < end; ++begin) { in_addr a; a.s_addr = ntohl(begin); cout << inet_ntoa(a) << endl; } } #pragma comment(lib,"wsock32.lib") 我认为您也可以在 GCC 中轻松找到它。似乎在 ,但我不确定,一般来说,我不使用 GCC。 但我必须再次提醒您,IP 地址不仅仅是 4 字节数字。 αλεχολυτ 2020-12-20T12:56:42Z2020-12-20T12:56:42Z 我们通过粘合地址段形成一个整数地址,并循环遍历它: #include <iostream> int main() { uint32_t a0 = 100; uint32_t b0 = 150; uint32_t c0 = 0; uint32_t d0 = 200; uint32_t a1 = 105; uint32_t b1 = 150; uint32_t c1 = 3; uint32_t d1 = 210; uint32_t s = (((((a0 << 8) | b0) << 8) | c0) << 8) | d0; uint32_t e = (((((a1 << 8) | b1) << 8) | c1) << 8) | d1; for (uint32_t addr = s; addr <= e; ++addr) { int a = addr >> 24; int b = (addr >> 16) & 0xFF; int c = (addr >> 8) & 0xFF; int d = addr & 0xFF; std::cout << a << "." << b << "." << c << "." << d << "\n"; } } 图书馆准备好了!
好吧,注意常规系统套接字。在 Windows 上 - 例如,在 winsock2.h 上。
我认为您也可以在 GCC 中轻松找到它。似乎在 ,但我不确定,一般来说,我不使用 GCC。
但我必须再次提醒您,IP 地址不仅仅是 4 字节数字。
我们通过粘合地址段形成一个整数地址,并循环遍历它:
图书馆准备好了!