2012-11-08 4 views
-2

내 응용 프로그램에서 pcapdotnet DLL을 사용하고 있고 내가 추가 한 옵션 중 하나는 pcap 파일을 보내기 전에 패킷 IP 주소를 변경하는 것입니다 (내 기능 2 ip : old ip 주소 및 변경하려는 새 IP 주소).주어진 IP 주소에서 IP 범위 번호를 계산하십시오.

이제 IP 주소 범위를 변경할 수있는 다른 옵션을 추가하고 싶습니다. 예를 들어

:

이전 IP addreee가 70.1.2.3이고 범위가 너무 IP 주소 70.1.2.3은 10.0.0.1에 10.0보다 변경됩니다

212.0.0.0

까지 10.0.0.1입니다. 0.2에서 70.1.2.3까지 그리고 나는 그것을 할 수있는 최선의 방법을 찾고있다.

지금까지 내가 나만 도움이되지 않은 사람이 게시물을 참조 : Is there easy way of calculating number of IPs from 2 given IP addresses?

+1

[무엇을 시도해 봤습니까?] (http://whathaveyoutried.com)? 어떤 종류의 "최고"를 찾고 계십니까? 공연? 가독성? 조급함? 다른 것? – Oded

+0

나는 고마워 할 것이다! – user1269592

답변

1
  1. IPv4 주소의 consi를 사용하고이를 생략해서는 안 sts는 4 바이트이며이 4 바이트를 결합하면 일반 32 비트 숫자가됩니다. thread you linked에 설명 된 방법을 사용하여이 번호를 쉽게 얻을 수 있습니다 (주변에 간섭하는 동안 @ DarkSquirrel42에서 이미 동일한 답변을 게시 한 것으로 나타났습니다).

    Map a range of IP numbers to a different range of IP numbers

    : 당신이 그것을 일단, 그것은 간단한 수학의 문제가

    public static uint IPToInt(string IP) 
    { 
        return (uint)IPAddress.NetworkToHostOrder(
         BitConverter.ToInt32(IPAddress.Parse(IP).GetAddressBytes(), 0)); 
    } 
    
  2. 입니다 : 그 대답 바꿀 것 유일한 것은 에게 부호없는 정수 (uint을)를 호출하는 것입니다 10.0.0.1 ~ 212.0.0.0은 매우 넓은 범위입니다. 10.0.0.170.1.2.3으로 매핑하면 212.0.0.0에 도달하기 전에 주소 공간이 부족합니다.

+0

내가 찾은 최고가 같아요 : http://www.dreamincode.net/code/snippet3877.htm하지만 클래스 객체를 생성하고 GetIPRange를 실행 한 후에 왜 내 코드가이 클래스에 들어 가지 않았는지 알 수 없습니다. – user1269592

+0

무엇을합니까? "내 코드가 수업에 들지 못했다"는 뜻인가요? 질문에 몇 가지 코드를 게시 할 수 있습니까? – Groo

+0

RangeFinder 범위 = 새 RangeFinder(); 및 range.GetIPRange (oldIP, newIP); 나를 수업으로 인도하지 않았다, 아무 일도 일어나지 않는다. – user1269592

0

"도움이되지 않았다"고 게시물을 모두 가지고 당신이 필요합니다 : 그것은 어떻게 3 ~에서 IPv4를 변환하는 방법을 보여줍니다

당신은 단순히 싶은 것은 보이는

계산을 시작할 수 있습니다 거기에서

(IPv4 주소의 크기가 정확히 32 비트이기 때문에 작동) Int32 형식에 점선 형태의 같은 :

선택적으로 IP를 확인 세 점으로 구분 된 형태

에 다시 루프 변수를 변환 다른

하나에서

는 루프를 할이 32 비트 정수로 IP 범위를 변환하는 (... 당신이 classfull을 범위에서 네트워크 또는 브로드 캐스트 주소 것이다 IP를 제외 할 수있는 범위 계급 IP의 경우)

+0

나는 그것을 시도하고 바로, 내 IP가 올바른 유지됩니다 최선의 방법은 무엇입니까 IP의 수를 얻은 후 BTW? (192.168.0.255 이후는 192.168.1.0이 아니라 192.168.0이됩니다.256) – user1269592

+0

@ user1269592 : DarkSquirrel은 IP를 정수로 변환 한 다음 루프 ** 정수 ** (IP가 아닌 숫자를 늘림)를 수행 한 다음 정수 변수를 다시 3 점으로 변환해야한다고 말했다. – Groo

+0

감사합니다. – user1269592