2011-01-16 3 views
0

J'ai besoin d'obtenir le nombre d'adresses IP dans une plage IP identifiée par un startIP et un endIP pour les plages IPv4 et IPv6. Est-ce que quelqu'un peut indiquer des moyens qui peuvent être utilisés pour obtenir la soustraction des adresses IP?Comment soustraire une adresse IP? (IPv4 et IPv6)

Le nombre d'adresses IP sera = endIP - IPDébut + 1

Les réponses sont très appréciés.

+3

Vous devez préciser un peu: à une approximation zeroth, vous pouvez simplement convertir l'adresse dans un entier non signé 32 ou 128 bits et soustraire ces valeurs. Cependant: cela ne vous dit pas combien d'adresses IP assignables distinctes vous obtenez, car il compte les adresses IP de diffusion et ne tient pas compte des sous-réseaux. –

+0

Les adresses de diffusion ou d'autres adresses spéciales n'ont pas d'importance. Mon exigence est d'obtenir la différence arithmétique de deux adresses IP et les structures de données en C# qui peuvent contenir de telles valeurs (spécialement ipv6). – user412272

Répondre

2

Comment ça?

class Program 
{ 

    static void Main(string[] args) 
    { 
     IPAddress a = new IPAddress(new byte[] { 192, 168, 11, 12 }); 
     IPAddress b = new IPAddress(new byte[] { 192, 168, 12, 12 }); 
     long diff = Difference(a, b); 
    } 

    private static Int64 ConvertToLong(IPAddress a) 
    { 
     byte[] addressBits = a.GetAddressBytes(); 
     Int64 retval = 0; 
     for (int i = 0; i < addressBits.Length; i++) 
     { 
      retval = (retval << 8) + (int)addressBits[i]; 
     } 

     return retval; 
    } 

    private static Int64 Difference(IPAddress a, IPAddress b) 
    { 
     return Math.Abs(ConvertToLong(a) - ConvertToLong(b)) - 1; 
    } 

} 
1
class Program   
{ 
static void Main(string[] args) 
    { 
     string a = "192.168.11.12"; 
     string b = "192.168.12.12"; 
     int diff = Math.Abs(IPToInt(a) - IPToInt(b)) + 1; 
    } 
int IPToInt(string IP) 
{ 
    return IPAddress.NetworkToHostOrder(BitConverter.ToInt32(IPAddress.Parse(IP).GetAddressBytes(), 0)); 
}  
} 
Questions connexes