2011-01-16 15 views
0

IPv4とIPv6の両方の範囲でstartIPとendIPで識別されるIP範囲内のIPアドレスの数を取得する必要があります。IPアドレスを引く方法は? (IPv4とIPv6の両方)

誰でもIPアドレスの引き算を達成するために使用できる方法を指摘できますか?

IPアドレスの数が= endIPする - startIP + 1

任意の応答は高く評価されています。

+3

あなたは少しを明確にする必要があります:ゼロ次近似に、あなただけの32または128ビットの符号なし整数にアドレスを変換し、それらの値を引くことができます。 しかし、それはブロードキャストIPを数えており、サブネットを考慮していないので、どのくらいの分け可能な割り当て可能なIPがいくつあるかは分かりません。 –

+0

ブロードキャストアドレスやその他の特別なアドレスは関係ありません。私の要件は、2つのIPアドレスとそのような値(特にipv6)を保持できるC#のデータ構造の算術的な違いを得ることです。 – user412272

答えて

2

どうやってですか?

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)); 
}  
} 
関連する問題