增加IP地址

在那个程序中,我想递增IP地址。 我看到这样的输出:

125.23.45.67 126.23.45.67 127.23.45.67 128.23.45.67 129.23.45.67 130.23.45.67 131.23.45.67 132.23.45.67 133.23.45.67 134.23.45.67 

但是我想看到这样的输出:

 124.23.45.67 124.23.45.68 124.23.45.68 124.23.45.70 124.23.45.71 124.23.45.72 124.23.45.73 124.23.45.74 124.23.45.75 124.23.45.76 

这里是程序代码:

 #include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; #include "winsock2.h" #pragma comment(lib,"wsock32.lib") void main() { in_addr adr1; in_addr adr2; int i; adr1.s_addr=inet_addr("124.23.45.67"); adr2.s_addr=inet_addr("as.34.34.56"); if (adr1.s_addr!=INADDR_NONE) cout << " adr1 correct" << endl; else cout << " adr1 incorect " << endl; if (adr2.s_addr!=INADDR_NONE) cout << " adr2 correct" << endl; else cout << " adr2 incorect" << endl; cout << inet_ntoa(adr1) << endl; cout << inet_ntoa(adr2) << endl; for (i=0;i<10;i++) { adr1.s_addr ++; cout << inet_ntoa(adr1) << endl; } } 

Solutions Collecting From Web of "增加IP地址"

大的endian和little endian得到另一个! 使用htonl和ntohl来回转换。

 for (i=0;i<10;i++) { adr1.s_addr = htonl(ntohl(adr1.s_addr) + 1); cout << inet_ntoa(adr1) << endl; } 

要增加一个IP地址,你需要将in_addr对象分解成4个int对象(一个short int也可以),然后增加第4个对象,直到达到256,然后重置为1,递增第3个等等。你不应该直接在in_addr对象上使用++

编辑:好的,所以你可以适当增加它,如果你扭转字节顺序。 我个人不会这样做。 特别是如果你所做的只是输出IP字符串,而不是在代码中的其他地方用in_addr

而不是使用adr1.s_addr

 adr1.s_addr=inet_addr("124.23.45.67"); adr2.s_addr=inet_addr("as.34.34.56"); 

用这个:

 u_long addr1=inet_addr("124.23.45.67"); 

并增加addr1 ,即addr1++最后一个八位字节增加。

或者按照这个公式:

 if IP is ABCD then u_long addr = A + 256*B + 256*256*C + 256*256*256*D