2012-09-26 3 views
0

사용자로부터 IP 주소 및받는 사람 IP 주소를 가져 와서 그 사이의 IP 주소 목록을 표시하는 프로그램을 작성하고 있습니다. 예를 들어 사용자가 10.0.0.1과 10.0.0.5를 제공하면이 두 IP 주소 사이에 5 개의 IP 주소가 표시됩니다. 내 마음에오고 현재의 솔루션은 다음과 같습니다두 IP 주소 사이의 IP 주소 목록 얻기

  1. 모든 IP 주소 목록을 다음
  2. 사용을 결과 IP 주소 목록에 어떤 솔루션을해야 중첩 루프

를 찾으려면 나는 이것들을 채택한다 (또는 더 나은 해결책을 제안한다)? 첫 번째 솔루션의 경우 IP 주소 테이블/목록에 대한 링크는 무엇입니까?

JavaScript 또는 Java의 관점에서 솔루션은 무엇입니까?

+0

왜이 기능을 원하십니까? 서브넷 스캔입니까? –

+0

예 서브넷을 검색 중입니다. 이 목적을 위해 나는 IP를 보낸 사람과 IP를 알려주는 스크립트를 가지고 있습니다. 이제이 IP들을 모두 별도의 행에 저장하려고합니다. –

+0

브라우저에서 실행하면 클라이언트 내부 네트워크를 검사하는 데 사용할 수 있습니까? –

답변

3

우선 IP 주소를 .으로 분할합니다. 첫 번째 IP 주소에서 네 번째 부분을 255까지 증가시킨 다음 세 번째 부분에 1을 더하고 네 번째 부분을 1로 설정합니다. IP 주소로 갈 때까지.

  • IP 주소 바이트 -> 비트 ->에서 INT32
  • : 10.0.10.10 ->00001010 00000000 00001010 00001010 ->167774730
  • 사람 : 10.1.45.1 ->00001010 00000001 00101101 00000001 ->167849217
  • 시작에서까지에 그냥 계산 원하지 않는 바이트 인 1111111100000000을 확인하십시오.

그게 전부입니다.

+1

잘못되었습니다. x.y.1.255 + 1은 x.y.2.1이 아닙니다. – Fildor

+0

왜 안 되니? 상황 마녀에 대해서 생각해 보면 서브넷 마스크는 255.255.0.0 – Amir

+1

이므로 x.y.2.0이 될 것입니다 – Fildor

-1

모든 IP 주소 목록을 가지고 필요한 항목을 찾아 보면 잔인합니다. 또한 몇 가지 추가 하드 디스크 드라이브를 구입하지 않고도이 목록을 저장할 수 있습니다.

중첩 루프를 사용하여 찾고있는 IP 주소를 생성하십시오.

-2

네트워크 또는 파일 시스템이나 사용자 입력에서 주소를 얻는 방법을 충분히 알고 있으면 빼기를 사용하여 주소 자체를 테스트하고 바로 그 수의 IP 주소를 얻을 수 있습니다.

이것은 간단하지만 주소가 알고있는 경우 알 수 있습니다 : 000044-000002 = 000042.

+0

대상 네트워크에 대해 약간의 열거가 필요하지만 넷 마스크에는이 열거 설명이 나와 있습니다. – L0j1k

3

"점"글자는 사람을위한 것입니다. 컴퓨터의 경우 4 바이트 숫자가 하나입니다. 번호를 분석하십시오. 그런 다음 범위에 도달 할 때까지 단순히 숫자를 늘리고 출력용으로 형식을 다시 지정하여 범위의 모든 주소를 가져옵니다.

2

나는 an updated jsFiddle에서 실험하고 있었고, 마지막으로 아래의 해결책을 찾았습니다. 다음 코드는 모든 IP 주소에서 작동해야합니다. 16 진수로 시작 및 끝 IP 주소를 제공해야합니다 (쉽기 때문에 코드를 작성하지 않았습니다).

var startIp = 0x0A000001, 
endIp = 0x0A000F05; 

var temp, list = [],str; 
for(var i=startIp ; i <= endIp ; i++){ 
    temp = (i).toString(16); 
    str =''; 
    if(temp.length == 7){ 
     temp = "0"+temp; 
    } 

    for(var k=temp.length-1; k >= 0 ; k-=2){ 
     str = parseInt(temp[k-1] + "" + temp[k], 16) +"." + str ; 
    } 
    document.write(temp + " " + str+ "<br>"); 
    list.push(str.substring(0, str.length-1)); 
} 

? 
+0

처음 세 구성 요소가 같을 때만 작동하므로 왜 i, j 및 k 루프를 귀찮게합니까? – Barmar

+0

처음에는 모든 값에 대해 작동하도록했습니다. 그러나 나는 많은 경우를 고려해보기가 쉽지 않다. – Anoop

+0

10.0.10.10 및 10.1.45.1의 경우도 고려하십시오. 중첩 된 루프와 여러 if else 문은 피하고 싶습니다. 감사 –