2010-05-21 4 views
1

DHCP가 없으면 기본 게이트웨이를 찾을 수 있습니까?DHCP가없는 기본 게이트웨이 검색

이것은 IP 주소가없는 DHCP를 사용하지 않는 네트워크상의 장치를위한 것입니다. 기본 게이트웨이를 발견 할 수 있다면 사용하지 않는 IP 주소를 추측하여 네트워크에서 브로드 캐스트하여 사용 중인지 확인할 수 있습니다.

나는 이해하기가 어려울 수 있습니다. 예 : 고정 IP가 있고 종료 된 컴퓨터가 이미있는 경우

+0

프로그래밍 방식을 의미합니까? 어떤 플랫폼에서? –

+0

예, 프로그래밍 방식으로 C 또는 그와 관련하여 사용합니다. – JavaRocky

답변

7

패킷을 잠시 동안 스니핑 한 다음 경험적 방법을 적용합니다. 나는이 나머지 기간 동안 IPv4와 이더넷을 가정하고있다. HUB가 아닌 이더넷 스위치를 사용하면 이렇게 작동하지 않습니다. 끝에 그 이상.

이더넷 (또는 무엇이든) 및 IP 헤더뿐만 아니라 실제 ARP 패킷 (브로드 캐스트 및 멀티 캐스트 IP 및 MAC 주소 제외)을 기반으로 자신의 RARP (역방향 주소 확인) 테이블을 만듭니다. 테이블이 여러 IP 주소를 단일 하드웨어 인터페이스에 매핑 할 수 있는지 확인하십시오. 실제 ARP 패킷에 의해 입력되거나 확인되는 테이블의 모든 IP 주소에는 이와 같은 플래그가 지정되어야합니다.

게이트웨이가 트래픽을 수신하고 전송할 가능성이 큽니다.이 트래픽에는 여러 네트워크의 많은 IP 주소가 있지만 동일한 하드웨어 주소가있을 수 있습니다. 게이트웨이는 테이블에 IP 주소가 많은 하나의 MAC 주소로 표시됩니다. 이 MAC 주소를 포함하는 ARP 트랜잭션을 관찰 할 것이므로 seen in ARP packet 플래그가 설정된 MAC의 별명이 지정된 IP 주소를 찾을 수 있습니다. 거의 확실하게 게이트웨이의 IP 주소입니다.

게이트웨이의 IP 주소를 기반으로 네트워크 주소와 서브넷 마스크를 추측 할 수는 있지만 신뢰할 수있는 것은 아닙니다. 비표준 넷 마스크를 사용하여 네트워크에서이 작업을 수행하려는 경우 다음을 시도 할 수 있습니다. 확인이 개 IP 주소 크기의 누적 변수 :

uint32_t acc_and = 0xFFffFFff; 
uint32_t acc_or = 0x00000000; 

그리고 당신은

acc_and &= ip_addr; 
acc_or |= ip_addr; 

당신은 또한에 대상 IP 주소를 (멀티 캐스트가 아닌)을 사용할 수 할 각 ARP는 테이블에서 주소를 확인하기위한 패킷을 게이트웨이에서 가져 왔지만 게이트웨이에 알리기 전에 게이트웨이를 알아야합니다.

넷 마스크 및 네트워크 주소

어드레스의 네트워크 부분은 (제 1 동작 후) 모두에서 동일하게 유지한다 찾는 있지만 acc_and에서 하단 비트를 비우고 시작해야 동안 acc_or 하단 비트 채워지기 시작해야합니다.

uint32_t net_addr = acc_and & acc_or; 

및하여 넷 마스크 :

uint32_t net_mask = acc_and^acc_or; 

당신이 노력을 시작할 수 있도록, 너무 오래 걸릴 수만큼 샘플링 로컬 IP 주소를 얻기에 충분한 샘플을 사용하면하여 네트워크 주소를 확인 할 수있을 것입니다 다음과 같이 범위를 좁히십시오.

uint32_t almost_net_mask = acc_and^acc_or; 
int i = 0; 
while (1 & almost_net_mask) { 
    i++; 
    almost_net_mask >>= 1; 
} 
uint32_t net_mask = 0xFFffFFff; 
while(i--) { 
    net_mask <<=1; 
} 

이렇게하면 마지막 1 비트 세트를 찾을 수 있습니다. 가장 낮은 0 비트는 분명히 주소의 로컬 부분의 일부가 아닙니다. 당신은 정말 지금 당신은 몇 가지 다른 일을 시도 할 수 있습니다 당신의 넷 마스크와 네트워크 주소를 확인하려면

i = ffs(~ (acc_and^acc_or)) ; // assuming that int on your system is 32 bit. if not use ffsl 

: 다른 방법으로 당신은에 의해 같은 i 얻을 수 있습니다. 게이트웨이가 보내는 패킷을 게이트웨이가 로컬 주소라고 생각하는 주소로 전달하려고 시도하는지 확인할 수 있습니다. 이를 위해서는 자신의 IP 주소를 할당해야하며, 이는 넷 마스크가 맞지 않으면 위험합니다. 당신이 범위를 벗어 아니라고 기회를 증가 또는 트래픽을 보지 못한 가장 낮은 합법적 인 IP 주소를 선택하는 자신을 위해

시도를하여 IP를 선택

. 해당 주소에 대한 ARP 요청을 스푸핑하고 응답을 찾으십시오. (실제 MAC 주소를 사용할 수도 있지만 IP를 구성 할 수도 있습니다. IP가 아니어도 약간 혼란 스러울 수 있습니다) . ARP가 스스로 주장 할 수없는 IP 주소를 찾은 후에.

IP 주소가 실제로 너무 높을 가능성이 있습니다. 이것은 넷 마스크가 여전히 좋은 추측이므로 확실하게 알기가 어렵습니다. 당신이 살 수있는 자유로운 슬롯이 없기 때문에 이런 경우라면 운이 없어집니다.당신의 넷 마스크는 로컬 네트워크에 표시하지 않은하지만이에서 당신의 추측을 기반으로 로컬 네트워크에있을 수 목적지 주소와 IP 패킷을 전송 조정 시도가 필요한 경우 다시 넷 마스크

은 참조하십시오 넷 마스크 및 네트워크 주소. 이러한 추측이 꺼져 있으면 너무 많은 비트가 네트워크 주소에 할당되어야하므로 가장 추측 된 네트워크 주소의 넷 마스크 부분에서 하위 비트를 변경하는 주소로 보내는 것이 원하는 것입니다. IP 주소를 ARP로 보내고 응답하는 사람이 있는지 확인하여 정상적으로 수행 할 수 있지만 주소를 추측하고 있으므로 놓치기 쉽기 때문에 대상 MAC 주소가 설정된 패킷을 작성하는 것이 좋습니다. 그것을 전달할 것인지를 알기위한 게이트웨이. 그것은 구성되지 않을 수도 있습니다. 따라서 네트워크에서 이미 관찰 한 네트워크 구성원에 대해 먼저이를 수행 할 것인지를 확인한 다음 전달할 것인지 확인할 수 있습니다. 게이트웨이가 패킷을 전달하면 넷 마스크에 대한 아이디어를 활용하여 넷 마스크에 대한 아이디어를 얻을 수 있습니다. 게이트웨이가 로컬 네트워크의 알려진 구성원을 대상으로하는 패킷을 전달하지 않으면 조정할 이유가 있거나 해당 범위의 주소에 대한 ARP 요청을 보낼 때까지 로컬 넷 마스크와 네트워크에 대한 아이디어를 계속 사용할 수 있습니다. 귀하의 질문에 "예"또는 "어쩌면"확실한 "아니오"가능성 없음으로 대답 할 것입니다).

스위치가 당신에게 전달하지 이더넷 프레임이 알고있는 경우는 프레임이 가야 것 때문에 일이 훨씬 더 어려워 이더넷 스위치를 사용하는 경우 오히려 HUB

보다, 이더넷 스위치를 사용하는 경우 어딘가에, 그래서 당신은 그들을 보지 못할 것입니다. ARP 캐시에 해당 IP에 대한 항목이 여전히 있고 해당 항목의 조기 갱신을 시도하지 않는 한 브로드 캐스트되기 때문에 많은 ARP 요청을 전달합니다 (모든 시스템에서 완료되지 않을 수도 있음). 이렇게하면 네트워크와 회원에 대한 아이디어를 훨씬 더 어렵게 만들지 만 괜찮은 일을 할 수있게 될 것입니다. 하지만 게이트웨이의 ARP 요청량과 다른 시스템보다 높은 게이트웨이의 ARP 요청량에 의존해야 할 것입니다. 파일 서버가 비슷한 트래픽을 가질 수 있으므로 오류가 발생하기 쉽습니다.

3

내 가난한 지식에 따라 쉬운 방법이 아니지만 수행 할 수 있습니다. 솔루션 나는 더 분석 할 것이다 :

  • 감지 게이트웨이 - 2 가능성 (모든 떨어져 그들을 데이터를 스니핑 관련) :
    • 캡처 DHCP 제안 패킷과 를 검색 게이트웨이 해결되는 패킷에 대해
    • 모습을 (예 : 각 대상 IP 주소에 대해 ARP 요청을합니다. 응답이 없으면 기본 게이트웨이의 MAC 주소가 있음 -이 게이트웨이의 IP 주소를 찾으십시오 (ARP 패킷, 모든 패킷 등을 분석해야 함)
  • 하나의 IP 주소는 ARP 요청을하고 무료 IP를 찾습니다.

나는 libpcap 또는 winpcap라고 생각합니다.

결코 비슷하게 만들었지 만 Google에서 아무런 언급도 찾지 못하면 나는 이렇게 생각합니다.

3

Windows 네트워크에서는 IP 0.0.0.0을 사용하고 포트 67 (또는 어쩌면 68)의 UDP 소켓을 열고 SMB 브로드 캐스트 메시지가 IP 주소를 알아낼 때까지 기다릴 수 있습니다. 거기에서 ARP 패킷을 사용하여 해당 IP에 가까운 주소의 장치를 검색 할 수 있습니다.

네트워크가 255.255.255.0보다 작은 넷 마스크를 사용하는 경우 원래 IP (동일한 상위 비트)에 가깝게 사용되지 않는 주소를 찾으십시오. 사용하지 않은 IP를 찾으면 장치에 대해 소유권을 주장하고 무상 ARP를 보냅니다.

이제 ARP 검사를 계속하고 응답하는 장치를 찾을 때마다 임시로 기본 게이트웨이로 설정하고 인터넷에서 응답 할 장치의 알려진 IP 주소로 핑 (ping)을 시도합니다. 응답을 받으면 게이트웨이를 찾았습니다.

DHCP를 사용하면 99 %의 시간이 소요됩니다.