近半年的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. Ext4功能和文件系统的简单功能

    Linux kernel 自 2.6.28 開始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,改动了 Ext3 中部分重要的数据结构,而不只像 Ext3 对 Ext2 那样,不过 ...

  2. ORACLE 中的 锁 介绍

    ORACLE 中的 锁 介绍 Oracle数据库支持多个用户同时与数据库进行交互,每个用户都可以同时运行自己的事务,从而也需要对并发访问进行控制.Oracle也是用“锁”的机制来防止各个事务之间的相互 ...

  3. UML序列图总结(转)

    序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线 ...

  4. java实现代理domino web邮件下载

    [背景] 近日在研究domino web邮件下载功能,下载的邮件能够导入foxmail.outlook邮件client,下载的邮件格式为eml. [參考代码](须要下载jmail.jar包) priv ...

  5. (算法入门经典大赛 优先级队列)LA 3135(之前K说明)

    A data stream is a real-time, continuous, ordered sequence of items. Some examples include sensor da ...

  6. Sqlserver中Over函数

    Over函数不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用.  其参数:over(partition by columnname1 order ...

  7. 解析DBR操作系统引导记录数据

    理解文件系统.你必须要熟悉DBR,下面我们就来看看文件系统解析DBR数据. Dos Boot Record(DBR)操作系统引导记录是由操作系统的格式化程序建立的.在文件系统驱动操作不论什么一个磁盘卷 ...

  8. [ACM] hdu 5045 Contest (减少国家Dp)

    Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...

  9. 绕过电信访问Google

    最近google被“DNS污染系统”攻击,导致域名无法正常跳转到解析IP,google业务无法访问,也无法使用google搜索,DNS域名污染系统攻击造成google本身故障的假象,针对此问题,一般都 ...

  10. JavaScript概要

     当用户填写表单在线,用户输入表单经常要推测在页面上,它提示用户填写正确的邮箱.哪些项目不填之类,这些都是JavaScript小的特点. JavaScript是一种基于对象的脚本语言,使用它能够开 ...