C# code to convert a network in CIDR notation (72.20.10.0/24) to an IP address range

References:

http://stackoverflow.com/questions/218604/whats-the-best-way-to-convert-from-network-bitcount-to-netmask

"Whatmask" C code from http://www.laffeycomputer.com/whatmask.html

Usage:

uint startIP, endIP;  
Network2IpRange("72.20.10.0/24",out startIP,out endIP);

The code assumes 32 bits for everything.

        staticvoidNetwork2IpRange(string sNetwork,outuint startIP,outuint endIP)
       
{                      
               
uint ip,                /* ip address */
                        mask
,           /* subnet mask */                              
                        broadcast
,      /* Broadcast address */
                        network
;        /* Network address */

               
int bits;                              

               
string[] elements = sNetwork.Split(newChar[]{'/'});                

                ip
= IP2Int(elements[0]);
                bits
=Convert.ToInt32(elements[1]);

                mask
=~(0xffffffff>> bits);

                network
= ip & mask;
                broadcast
= network +~mask;

                usableIps
=(bits >30)?0:(broadcast - network -1);

               
if(usableIps <=0)
               
{
                        startIP
= endIP =0;
               
}
               
else
               
{
                        startIP
= network +1;                          
                        endIP
= broadcast -1;
               
}
       
}

       
publicstaticuint IP2Int(stringIPNumber)
       
{
               
uint ip =0;
               
string[] elements =IPNumber.Split(newChar[]{'.'});
               
if(elements.Length==4)
               
{
                        ip  
=Convert.ToUInt32(elements[0])<<24;
                        ip
+=Convert.ToUInt32(elements[1])<<16;
                        ip
+=Convert.ToUInt32(elements[2])<<8;
                        ip
+=Convert.ToUInt32(elements[3]);
               
}
               
return ip;
       
}

本日志由 flyinweb 于 2011-01-28 11:15:24 发表,目前已经被浏览 1844 次,评论 0 次;

作者添加了以下标签: CIDR2IPrangeCIDRtoIPrange

引用通告:http://www.517sou.net/Article/571/Trackback.ashx

评论订阅:http://www.517sou.net/Article/571/Feeds.ashx

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)