2009-06-22 2 views
3

IP 주소 범위에서 일련의 네트워크 작업을 수행하려고합니다. 범위가 클래스 C 네트워크보다 커지면 범위 내의 모든 호스트를 열거하지 못합니다. 넷 마스크 255.255.240.0을 사용하여 네트워크의 모든 호스트를 반복 할 수 있기를 원합니다.IP 주소 범위를 통해 어떻게 루프 할 수 있습니까?

 
From: 192.168.0.100 
To: 192.168.10.100 

어떻게 접근하나요? 꽤 일반적인 작업이어야합니다. Cocoa iPhone 프로그래밍의 초록색 필드에서 왔기 때문에 C 스타일리쉬 한 솔루션이 인정 될 것입니다. :-)

+4

내가 잘못 질문을 읽고 있습니까? 실제로 192.158.0.255와 192.168.1.0 사이에있는 주소는 없습니다. 아마도 더 명확하게 편집해야 할 수도 있습니다. – alxp

+0

alxp : 일반 IP 주소 맵이 사용되고 있다고 가정합니다. 적어도 집에있는 라우터에서는 123.234.123에 LAN을 실행하지 못하도록 막지 않습니다. # 주소 지정 범위를 완전히 잘못 사용 했음에도 불구하고 # – Sukasa

+0

감사합니다. 나는 나의 질문을 editet. 범위는 실제로 말도 안돼 – Monobono

답변

1

here 관련 (기본) 수학의 좋은 요약이있다.

#include <stdio.h> 

int main(void) { 
    int counter; 
    unsigned int ip[] = { 192, 168, 0, 0 }; 

    for (counter = 0; counter < 1000; ++counter) { 
     ip[3] = (++ ip[3] % 256); 
     if (!ip[3]) { 
      ip[2] = (++ ip[2] % 256); 
     } 
     printf("%u:%u:%u:%u\n", ip[0], ip[1], ip[2], ip[3]); 
    } 

    return 0; 
} 
1

는 여기에 PHP 솔루션이다 :

<?php 

$sIP1 = '192.168.0.0'; 
$sIP2 = '192.168.1.255'; 

$aIPList = array(); 
if ((ip2long($sIP1) !== -1) && (ip2long($sIP2) !== -1)) // As of PHP5, -1 => False 
{ 
for ($lIP = ip2long($sIP1) ; $lIP <= ip2long($sIP2) ; $lIP++) 
    { 
    $aIPList[] = long2ip($lIP); 
    } 
} 
?> 

를 사용하여 나머지 연산자 %

7

이 신속하게 IP 주소를 해석하고 그것을 통해 반복에 관련된 뉘앙스를 소개하는 코드의 일부는 다음과 같습니다 원시적 예입니다.

상황이 32 비트 부호없는 정수로 IP 주소를보고 시작하면 매우 간단 얻을.

#include <stdio.h> 
int 
main (int argc, char *argv[]) 
{ 
    unsigned int iterator; 
    int ipStart[]={192,168,0,100}; 
    int ipEnd[] = {192,168,10,100}; 

    unsigned int startIP= (
     ipStart[0] << 24 | 
     ipStart[1] << 16 | 
     ipStart[2] << 8 | 
     ipStart[3]); 
    unsigned int endIP= (
     ipEnd[0] << 24 | 
     ipEnd[1] << 16 | 
     ipEnd[2] << 8 | 
     ipEnd[3]); 

    for (iterator=startIP; iterator < endIP; iterator++) 
    { 
     printf (" %d.%d.%d.%d\n", 
      (iterator & 0xFF000000)>>24, 
      (iterator & 0x00FF0000)>>16, 
      (iterator & 0x0000FF00)>>8, 
      (iterator & 0x000000FF) 
     ); 
    } 

    return 0; 
} 

그냥 ipStart 위해 요소의 어느 것도 확인하지 않고 ipEnd는 IP 주소되지 않습니다 이상 255
을하고 너무 엉망 코드를 것이다.