您的位置:首页 > 运维架构 > Linux

LINUX下处理文本中的IP网段,把其中的IP地址抽取出来,放到另一个文件中

2010-07-20 16:27 681 查看
]ip_to_int.c

#include <stdio.h>
#include <stdlib.h>
unsigned int calcuIP(char* sIP);
int main()
{
unsigned int ip_int;

FILE *fin;
// FILE *fout;
char namein[]="ip_net"; // 文件名
// char nameout[]="ip_individual";
char *one_line;    // 读入的一行
int buff_size=120; //根据最长行字符定大小

if( ( fin = fopen(namein, "r") ) == NULL ) {
printf("can not open file %s/n",namein);
exit (-1);
};

/*if( ( fout = fopen(nameout, "a+") ) == NULL ) {
printf("can not open file %s/n",nameout);
exit (-1);
};*/

one_line = (char *)malloc(buff_size*sizeof(char));

while (fgets(one_line, buff_size,fin) !=NULL)
{
//printf("I read: %s",one_line); // 读一行打一行
ip_int=calcuIP(one_line);

for(int j=1;j<255;j++)
{
ip_int=ip_int+1;
//putw(ip_int,fout);
printf("%u/n",ip_int);
}
};

// char *str="118.116.0.0";

// ip_int=calcuIP(str);
// printf("%d",a);
fclose(fin);
//fclose(fout);
return 1;
}

unsigned int calcuIP(char* sIP)
{
unsigned int res=0;
char *p=sIP;
char tmp[4];
int i=0;
for(i=0;i<4;i++)
{
int j=0;
while((*p!='.')&&(j<4))
{
tmp[j]=*p++;
j++;
}
p++;
tmp[j]='/0';
res=res*256+atoi(tmp);
}
return res;

}


编译的时候,提示C99错误,提示我那个for循环有问题。可以这样编译:

gcc -o ip_to_int ip_to_int.c --std=c99

执行 ./ip_to_int 就会把IP地址一行一行的输出到屏幕,可以重定向一下,让它输入到一个文件中

./ip_to_int > ip.txt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: