URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++±à³Ì°æ » µÚ31Ò³ » (·ÖÏí)ÅжÏipÊÇ·ñÊôÓÚ×ÓÍøµÄËã·¨
announcement ÉùÃ÷: ±¾Ò³ÄÚÈÝΪÖйúLinuxÂÛ̳µÄÄÚÈݾµÏñ£¬ÎÄÕµİæÈ¨ÒÔ¼°ÆäËûËùÓеÄÏà¹ØÈ¨ÀûÊôÓÚÖйúLinuxÂÛ̳ºÍÏàÓ¦ÎÄÕµÄ×÷Õߣ¬Èç¹û×ªÔØ£¬Çë×¢Ã÷ÎÄÕÂÀ´Ô´¼°Ïà¹Ø°æÈ¨ÐÅÏ¢¡£
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  Òµ½çÐÂÎÅÓëÆÀÂÛ
  ×ÔÓÉÈí¼þÔÓ̸
  IT ÈËÉú
  LinuxÈí¼þ¿ìµÝ
  ·­Òë×÷·»
  LinuxͼÊéÓëÆÀÂÛ
  GNU Emacs/XEmacs
  Linux ÖÐÎÄ»·¾³ºÍÖÐÎÄ»¯
  Linux×ÀÃæÓë°ì¹«Èí¼þ
  Linux ¶àýÌåÓëÓéÀÖ°æ
  ×ÔÓÉÖ®´°Mozilla
  ±Ê¼Ç±¾µçÄÔÉϵÄLinux
  Gentoo
  Debian Ò»×å
  ÍøÂç¹ÜÀí¼¼Êõ
  Linux °²×°ÓëÈëÃÅ
  WEB·þÎñÆ÷ºÍFTP·þÎñÆ÷
  ÓòÃû·þÎñÆ÷ºÍÓʼþ·þÎñÆ÷
  Linux·À»ðǽºÍ´úÀí·þÎñÆ÷Ó¦ÓÃ
  Îļþ¼°´òÓ¡·þÎñÆ÷
  ¼¼ÊõÅàѵÓëÈÏÖ¤
  LinuxÄں˼¼Êõ
  Linux ǶÈë¼¼Êõ
  LinuxÉ豸Çý¶¯³ÌÐò
  Linux ¼¯Èº¼¼Êõ
  LINUXƽ̨Êý¾Ý¿â
  ÏµÍ³ºÍÍøÂ簲ȫ
  CPU Óë ±àÒëÆ÷
  ÏµÍ³¼ÆËãÑо¿ËùרÀ¸
  LinuxϵÄGUIÈí¼þ¿ª·¢
  C/C++±à³Ì°æ
  PHP ¼¼ Êõ
  Java&jsp¼¼Êõ
  Shell±à³Ì¼¼Êõ
  Perl ±à ³Ì
  Python ±à ³Ì
  XML/Web Service ¼¼Êõ
  ÓÀÔ¶µÄUnix
  FreeBSDÊÀ½ç
   
(·ÖÏí)ÅжÏipÊÇ·ñÊôÓÚ×ÓÍøµÄËã·¨
Author: cbchen    Posted: 2005-06-28 08:50    Length: 3,410 byte(s)
[Original] [Print] [Top]

int ip_belong_to_network(char *ip,char *network) //check that ip is belong to network
,
//network:*.*.*.*/*;*.*.*.*/*;......MAX SUPPORT 8 networks
{
if(ip==NULL||network==NULL)return 0;
if(strlen(network)>=160)return 0;//
char subnetwork[8][20];
char *whitespace = ";";
char *token;
int i = 0;
for(i=0;i<8;i++)strcpy(subnetwork[i],"");//init it;
i = 0;
unsigned long int_ip = (unsigned long)ntohl(inet_addr(ip)); //ip in int
unsigned long submask=0;
unsigned long int_net=0;
for (token=strtok(network, whitespace); token!=NULL; token=strtok(NULL, whitespace))
{
if(strlen(token)<19)//max subcmd length
{
strcpy(subnetwork[i],token);
//printf("num %d str:%s ",i,subnetwork[i]);
submask = (unsigned long)get_network_submask(subnetwork[i]);
int_net = (unsigned long)get_network_network(subnetwork[i]);
//printf("ip:%x,submask:%x,net:%x,and:%x ",int_ip,submask,int_net,int_ip&subma
sk);
if((int_ip&submask)==int_net)
{
//printf("match ");
return 1;
}
i++;
}

}
return 0;
}
unsigned long get_network_submask(char *network) //input 1.1.1.0/24 return FF FF FF
00
{
unsigned long submask=0;
if(network==NULL)return 0;
char temp_net[20]="";
strcpy(temp_net,network);
char *p;
p = temp_net;
int net_len = strlen(network);
int i =0;
int sub_num=0;

while(*p!='/'&&(i<net_len)){p++;i++;}
if(*p=='/')
{
p++;
sub_num = (int)atoi(p); //24
unsigned long temp =(unsigned long)pow(2,sub_num)-1;
submask = temp<<(32-sub_num);
//printf("sub_num:%d,mask:%x ",sub_num,submask);
return submask;
}
return 0;

}
unsigned long get_network_network(char *network) //input 1.1.1.0/24 return
int(1.1.1.0)
{
if(network==NULL)return 0;
if(strlen(network)<9)return 0; //1.1.1.1/1 min length
char temp_net[20];
strcpy(temp_net,network);
char *p = temp_net;
int net_len = strlen(network);
int i =0;
while(*p!='/'&&(i<net_len)){p++;i++;}
*p='';
return (unsigned long)ntohl(inet_addr(temp_net));

}

º¯Êý˵Ã÷
1 ip_belong_to_network(char *ip,char
*network),ÊäÈëipµØÖ·,ÐÎʽÈç"10.10.1.1",ÍøÂçÐÎʽÈç"10.10.1.1/24",Èç¹ûÓжà¸öÍø¶Î,Ó÷ֺŷ
Ö¿ª.
2 unsigned long get_network_submask(char *network) //ÊäÈë1.1.1.0/24 return
255.255.255.0µÄ³¤ÕûÐÎʽ
Ëã·¨Ô­Àí:
ÏÈÌáÈ¡ÍøÂç×Ö·û´®"/"ºóÃæµÄ×ÓÍøÎ»ÊýÄ¿,±ÈÈç24
È»ºóͨ¹ýÒ»¸ö¹«Ê½(pow(2,sub_num)-1)<<(32-sub_num),¿ÉµÃµ½Æä×ÓÍøÑÚÂëÈç255.255.255.0

×îºóÔÙͨ¹ýÅжÏip&netmaskÊÇ·ñµÈÓÚnetÈ·¶¨ÊÇ·ñÊôÓÚ¸ÃÍø¶Î
--
Attached file: 565341-utils.txt
[Original] [Print] [Top]
« Previous thread
ÈçºÎ²úÉúÁÙʱÎļþÃû£¿
C/C++±à³Ì°æ
µÚ31Ò³
Next thread »
½ô¼±£¡£©ÇëÄÄλ´óÏÀ°ïæ¿´Ò»ÏÂÕâ¸öÊý¾Ý°üÖØ¶¨Ïò³ÌÐòÓÐʲôÎÊÌ⣿£¨´úÂëºÜ¶Ì£©
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
±¸°¸ÐòºÅ: ¾©ICP±¸05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:50, cost 0.049633026123047 ms.