2011-01-16 3 views
0

IPv4 및 IPv6 범위 모두에 대해 startIP 및 endIP로 식별되는 IP 범위에서 IP 주소 수를 얻으라는 요구 사항이 있습니다.IP 주소를 빼는 방법은 무엇입니까? (IPv4 및 IPv6 모두)

누구든지 IP 주소를 빼내기 위해 사용할 수있는 방법을 지적 할 수 있습니까?

IP 주소의 수는있을 것이다 = endIP - startIP 상관 응답이 높게 평가되어 + 1

.

+3

당신은 조금 명확히해야합니다 : 0 차 근사에, 당신은 단지 32 또는 128 비트 부호없는 정수로 주소를 변환하고 그 값을 뺄 수 있습니다. 그러나 이것은 브로드 캐스트 IP를 계산하고 서브넷을 고려하지 않기 때문에 할당 할 수있는 많은 IP가 얼마나 많은지 알려주지 않습니다. –

+0

브로드 캐스트 주소 또는 기타 특수 주소는 중요하지 않습니다. 내 요구 사항은 두 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)); 
}  
} 
관련 문제