救命啊!再弄不出来,我就要被开除了!!
实现这样的功能:
给你IP地址和它的掩码,让你判断某个IP,是否在这个网段之内。
例如:给你
58.32.0.0/17
58.32.0.0 ---》IP地址
17 ---》掩码(表示IP前面17位不变,后面15位清零)
这样:58.32.0.0/17 就表示这样一个网段:
00111010 00100000 00000000 00000000
到
00111010 00100000 01111111 11111111
这时输入一个IP,比如:58.32.0.1,要你的程序判断是否在这个网段之内。
大体就是这样子。
我写了一个, 大家帮忙看看我这有没有错误.
===========================================================================
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
//Class analysis_char, 把 char 类型的IP地址转换成 int 类型
class analysis_char
{
public:
int int_ipaddress;//返回int类型的 ip
int int_mask;//返回int类型的 mask
char char_ipandmask[20];
char charbuffer[20];
analysis_char (char *x) { char_ipandmask = x;}
~analysis_char();
void analysis();
void init_charbuffer();
};
//analysis_char 类的成员函数,用来实现IP地址 char类型的到 int类型的转换
void analysis_char :: analysis()
{
//定义字符串缓冲区
char *pcharbuffer;
pcharbuffer = charbuffer;
//定义两个指针,同时指向char_ipandmask的首地址
char *p1, *p2;
p1 = char_ipandmask;
p2 = p1;
while (*p2 != NULL)
{
//若p2指向‘/’,输出网络地址
if (*p2 == '/ ')
{
memcpy (pcharbuffer, p1, (p2-p1));
int_ipaddress = inet_addr(pcharbuffer);
init_charbuffer();
p2++;
p1 = p2;
}
//若p2指向str2,输出掩码
else if (*p2 == ', ')
{
memcpy (pcharbuffer, p1, (p2-p1));
int_mask = atoi(pcharbuffer);
init_charbuffer();
p2++;
p1 = p2;
}
p2++;
}
}
//将字符串缓冲区清零
void analysis_char :: init_charbuffer()
{
for (int i = 0; i < 20; i++)
{
charbuffer[i] = NULL;
}
}
//读取用户输入的IP地址,并将其转换成int类型
void get_ipaddress(analysis_char x)
{
unsigned long int int_getipaddress;
char char_getipaddress[20];
char *pchar_getipaddress;
pchar_getipaddress = char_getipaddress;
cout < < "Please input the ipaddress:\n ";
gets(char_getipaddress);
int_getipaddress = inet_addr(pchar_getipaddress);
int_getipaddress > > analysis.int_mask;
int_getipaddress < < analysis.int_mask;
if (int_getipaddress != analysis.int_mask)
cout < < "No!!\n ";
cout < < "YES!!\n ";
}
int main()
{
analysis_char analysis( "58.32.0.0/17, ");
get_ipaddress(analysis);
return 0;
}
===========================================================================
[解决办法]
//你的参数是analysis_char x这样子,而在下面你用analysis这个变量,当然没有定义了。
楼上几位的方法都不错的!
void get_ipaddress(analysis_char x)
{
unsigned long int int_getipaddress;
char char_getipaddress[20];
char *pchar_getipaddress;
pchar_getipaddress = char_getipaddress;
cout < < "Please input the ipaddress:\n ";
gets(char_getipaddress);
int_getipaddress = inet_addr(pchar_getipaddress);
int_getipaddress > > x.int_mask;
int_getipaddress < < x.int_mask;
if (int_getipaddress != x.int_mask)
cout < < "No!!\n ";
cout < < "YES!!\n ";
}