近半年的Intel实习生活快要结束了.马上要找工作了,这段时间打算把以前的知识复习复习,顺便在这里记录一下.这是当时去Intel面试的时候,面试官问的一道题.当时因为时间关系,只让我提供一个思路,并没有写出具体实现过程.下面把实现过程写上.主要是把IP地址转换成整数,这样比截取IP地址每一段内的值出来要快.最后把所有合法IP地址输出到文件中.

#include <iostream>
#include <string>
#include <WinSock.h>
#include <fstream>
#pragma comment(lib,"ws2_32.lib")
using namespace std; int main()
{
string startIPAddr, endIPAddr;
unsigned long startIP, endIP, index;
cout<<"input start and end IP"<<endl;
cin>>startIPAddr>>endIPAddr;
startIP = htonl(inet_addr(startIPAddr.c_str()));
endIP = htonl(inet_addr(endIPAddr.c_str()));
if(startIP > endIP)
{
cout<<"startIP must be smaller than endIP"<<endl;
return 1;
}
else
{
struct in_addr addr;
ofstream outfile("IPAddr.txt",ios::ate);
for(index = startIP; index <= endIP; index++)
{
addr.S_un.S_addr = ntohl(index);
outfile<<inet_ntoa(addr)<<"\n";
}
outfile.close();
}
getchar();
return 0 ;
}

以上使用的是Socket头文件中自带的对IP地址操作的函数,下面可以自己编写IP地址转换成长整型以及长整型转换成IP地址的函数.

unsigned long iptol(const string& strip)
{
int a[4];
string ip = strip;
string strtemp;
size_t pos;
size_t i=3; do
{
pos = ip.find("."); //以点将IP地址分成四段,对每段的数字进行转换
if(pos != string::npos) //当搜索整个字符串完后,仍没find到要的字符,则返回npos
{
strtemp = ip.substr(0,pos);
a[i] = atoi(strtemp.c_str());
i--;
ip.erase(0,pos+1);
}
else
{
strtemp = ip;
a[i] = atoi(strtemp.c_str());
break;
}
}while(1);
unsigned long lresult = (a[3]<<24) + (a[2]<<16)+ (a[1]<<8) + a[0];
return lresult;
} string ltoip(const unsigned long& nvalue)
{
char strtemp[20];
sprintf( strtemp,"%d.%d.%d.%d",
(nvalue&0xff000000)>>24,
(nvalue&0x00ff0000)>>16,
(nvalue&0x0000ff00)>>8,
(nvalue&0x000000ff) ); return string(strtemp);
}

参考:http://blog.csdn.net/hityct1/article/details/3861205

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++输出IP地址段内的合法地址的更多相关文章

  1. [汇编语言]-第九章 根据位移进行转移的jmp指令 段内短转移 段内近转移 段间转移(远转移) 转移的目的地址在指令中,在寄存器中,在内存中的jmp指令

    1- jmp为无条件转移指令,可以只修改IP, 也可以同时修改CS和IP jmp指令要给出两种信息: (1) 转移的目的地址 (2) 转移的距离(段间转移, 段内转移, 段内近转移) 2- 依据位移进 ...

  2. JavaScript遍历IP段内所有IP

    思路:将两个IP转换为数字进行比较,小的那个慢慢加一,直到变成大的那个IP所转换的数字,将这其中的数字再转换为IP地址即为IP段内所有的IP. //IP转数字 function ip2int(ip) ...

  3. 评估海外pop点网络质量,批量探测到整个国家运营商ip地址段时延

    1 查询当地供应商所有AS号和IP地址段,如下 可以手动复制也可以爬下来,此次测试地址不多,手动复制下来再做下格式话 61.99.128.0/17 61.99.0.0/16 61.98.96.0/20 ...

  4. JAVA和C#检测IP地址段是否交叉和获取地址段IP列表的方法

    一.说明 我们经常编程时,需要对一个DIDR地段计算其可用IP地址,或者验证某个IP是否被包含在一个地址段中. 二.工具 1.Java 可以使用 cidr-ip-trie库解决. https://gi ...

  5. 封了1000多个IP地址段,服务器现在坚如磐石,对付几个小毛贼还是很轻松的

    封了1000多个IP地址段,服务器现在坚如磐石 root登陆权限取消,防火墙装上,关闭所有没必要的端口,外层加装路由器映射, 修改常用端口,将常用端口改成陷阱程序,只要访问我这些陷阱端口,程序直接dr ...

  6. 这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了

    这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了 建议大家在自己的服务器上也封杀这些瘪三的地址 iptables -I INPUT -s 123.44.55.0/24 -j DROP ...

  7. 判断用户ip是否在指定的一个ip段内

    /** * 判断ip是否在一个ip段内 * * @param args */ public static boolean ipExistsInRange(String ip, String ipSec ...

  8. 【网络基础】【TCP/IP】私有IP地址段

    私有IP地址段 Class A:10.0.0.0    - 10.255.255.255 Class B:172.16.0.0  - 172.31.255.255 Class C:192.168.0. ...

  9. H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器

    H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器 ------------------------------------------------------------ ...

随机推荐

  1. 《Javascript高级程序设计》读书笔记之bind函数详解

    为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc ...

  2. (step7.2.1)hdu 1395(2^x mod n = 1——简单数论)

    题目大意:输入一个整数n,输出使2^x mod n = 1成立的最小值K 解题思路:简单数论 1)n可能不能为偶数.因为偶数可不可能模上偶数以后==1. 2)n肯定不可能为1 .因为任何数模上1 == ...

  3. Windows Phone开发(30):图形

    原文:Windows Phone开发(30):图形 图形如矩形.椭圆.路径等都从Shape类派生,它们一般表示规则或不规则图形,这些图形都是简单的二维图形,我相信大家都能理解的. 例一:矩形. 请看下 ...

  4. 【原创】poj ----- 2376 Cleaning Shifts 解题报告

    题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K ...

  5. LightOj 1148 Basic Math

    1148 - Mad Counting PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB Mob ...

  6. 【oracle案件】ORA-19502,ORA-27072

    1.1.1. ORA-19502,ORA-27072 日期:2014-05-12 00:12 环境:试验机 [错误号] $ oerr ora 19502 19502, 00000, "wri ...

  7. Android含文档server结束(client UI接口异步请求的一部分)三

    在本文中,AsyncTask为了实现异步请求,详细代码如下所示的: public class downloadActivity extends Activity { private TextView ...

  8. Oracle 11g client安装和配置。

    数据库和client在不同的机器. 安装前的准备.在安装过程中Oracle数据库server导航到下面的文件夹. 将listener.ora和tnsnames.ora中的host中的localhost ...

  9. 玩转html5(三)---智能表单(form),使排版更加方便

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  10. ps命令用法详解(转)

    ps p 22763  -L -o pcpu,pid,tid,time,tname,cmd,pmem,rss --sort rss  按rss排序 ps p 26653 -L -o pcpu,tid ...