void GetAllIPInLan(const string &strGateway, vector<string> &vsIP) { vector<string> vsDest; split(strGateway, ".", vsDest); int arriIP[4]; for (int i = 0; i < 4; ++i) { arriIP[i] = atoi(vsDest[i].c_str()); } // iResult存储的是192.168.1.1按照32bit的形式存储的值 unsigned iResult = 0; for (int i = 0; i < 4; ++i) { iResult |= arriIP[i] << (3 - i) * 8; } unsigned iSubNetMask = 22; // 子网掩码 // iResult存放的是跟子网掩码按位与以后的结果,然后将其末尾加上可能的子网号 iResult &= 0xffffffff << (BITS - iSubNetMask); string strIP, strTemp; for (int i = 0; i < 1 << (BITS - iSubNetMask); i++) { strIP.clear(); // tmp是某个局域网IP的32bit表示, 分别抽出8bit就构造出IP地址 int tmp = iResult | i; for (int j = 0; j < 4; j++) { arriIP[j] = (unsigned)(tmp & 0xff << (3 - j) * 8) >> (3 - j) * 8; strTemp.clear(); itostr(strTemp, arriIP[j]); strIP = strTemp + (j == 4 ? "" : "."); } vsIP.push_back(strIP); } }
void split(const string &src, const string &separator, vector<string> &dest) { string str = src; string substring; string::size_type start = 0, index; do { index = str.find_first_of(separator,start); if (index != string::npos) { substring = str.substr(start,index-start); dest.push_back(substring); start = str.find_first_not_of(separator,index); if (start == string::npos) return; } }while (index != string::npos); //the last token substring = str.substr(start); dest.push_back(substring); }