나는 C#에서 다음 달성하기 위해 노력하고있어/NET 2.0 : IP 주소 범위를 얻기 위해 IPAddress 및 IPv4 마스크를 사용하는 방법은 무엇입니까? .
주어진하여 IPAddress 객체 (예를 들어, 192.168.127.100)와 IPv4Mask/서브넷 마스크를 포함하는 다른하여 IPAddress 객체 (예를 들어, 255.255.248.0) IP 주소 범위의 시작과 끝을 계산할 수 있어야합니다. 내가 비트 단위 할 수 있어야한다, 이론적으로(예,. 서브넷에 주소 범위 통해 A에 대한 루프를 할 노력하고있어) 및하여 IPAddress와 IPStart을 얻을 수있는 서브넷 마스크에 . 그렇다면 IPStart와 반전 된 (NOT'd) SubnetMask에 대해 비트 XOR을 수행하여 IPEnd를 얻을 수 있어야합니다.
IPAddress 개체는 주소를 "long"또는 "byte []"(바이트 배열)로 출력하는 메서드를 제공합니다.
long (비트가 서명 되었기 때문에)에서 비트 연산을 수행하면 유효하지 않은 결과가 생성됩니다. 그리고 IPAddress에서 비트 배열을 바이트 배열로 수행 할 수 없습니다.
EDIT-1 : 좋아요, 배열의 각 바이트를 반복하고 AND, NOT 및 XOR 비트 연산을 수행하면 올바른 결과를 얻을 수 있습니다.
다음 문제는 바이트 [] 배열을 UInt32 또는 long으로 변환 한 후 for 루프를 쉽게 수행 할 수 없다는 것입니다. 따라서 첫 번째 값은 제대로 작동하지만 uint/long을 하나씩 늘리면 IPaddress가 192.168.127.0에서 193.168.127.0으로 증가합니다. 바이트 [] 배열을 uint/long으로 변환하면 바이트가 반전됩니다. 따라서 IPStart에서 IPEnd로 손쉽게 증가시킬 수있는 방법은 없습니다.
어떤 의견이 있습니까?
비트 당이 작업을 수행 할 필요, 바이트 당 비트 연산 (즉 없습니다 IP/마스크 쌍 당 4 개의 연산) 충분하다. –
비트 단위로 처리하지 말고, 바이트 [] 배열의 4 바이트를 분할하는 추가 단계가 필요하다. 어쩌면 명확하지는 않지만 배열의 각 바이트에 대해 전체 바이트에 대해 비트 연산을 수행한다는 의미입니다. – defines