2011-05-03 3 views
5

여기 새로와서, 포트 스캐닝을위한 프로그램을 작성 중입니다. TCP는 잘 작동하지만, UDP 포트 스캐닝을 어떻게하는지 모릅니다. 이 LAN에있는 다른 호스트의 UDP 포트 XXXX가 열려 있는지 여부를 알고 싶습니다. 이 코드가 작동합니까? 그렇지 않다면 무엇이 문제입니까?, UDP 포트 스캐닝을 달성하는 방법?

protected String scanUDP(InetAddress IP, int port) 
{ 
    try{ 
     byte [] bytes = new byte[128]; 
     DatagramSocket ds = new DatagramSocket(); 
     DatagramPacket dp = new DatagramPacket(bytes, bytes.length, IP, port); 
     ds.setSoTimeout(1000); 
     ds.send(dp); 
     dp = new DatagramPacket(bytes, bytes.length); 
     ds.receive(dp); 
     ds.close(); 
    } 
    catch(InterruptedIOException e){ 
     return "CLOSED"; 
    } 
    catch(IOException e){ 
     return "CLOSED"; 
    } 
    return "OPEN"; 
} 

아직 배우는 초보자. 덕분에 !

답변

8

UDP는 연결이 없으므로 반드시 응답 패킷을 기대할 수 없습니다. 포트가 폐쇄되면 ICMP 오류 메시지가 표시 될 수 있습니다 (예 : 방화벽이 자동으로 패킷을 삭제할 수 있음).

+0

감사하지만 어떻게 ICMP 오류 메시지를 캡처합니까? – ralphxiaoz

+4

DatagramSocket # send는 잡을 수있는 PortUnreachableException을 던집니다. 덕분에 – artbristol

+0

! 정말 도움이 – ralphxiaoz

3

UDP Port Scanning is possible 그러나 TCP 검색보다 어렵습니다.

파이썬에서 사용한 한 가지 방법은 3 개 또는 4 개의 높은 번호의 UDP 포트에서 호스트를 천천히 스캔하고 해당 호스트에서 ICMP 포트 도달 불가능 메시지가 있는지 확인하는 것입니다. 그 중 하나를 얻으면 경로에서 ICMP 메시지가 허용된다는 것을 알기 때문에 응답이없는 포트가 열린 포트라고 신뢰할 수 있다고 추측 할 수 있습니다. 높은 포트 번호가 모두 실패하면 성공을 보장하기 위해 응용 프로그램 인식 기술을 사용해야합니다. 호스트 수준의 ICMP 속도 제한 가능성을 줄이려면이 작업을 천천히 (매초마다 한 번) 수행해야합니다.

+0

덕분에, 내가 알게 될거야하지만 난 자바, 어떤 아이디어에서 그것을 달성하는 방법을 알아? – ralphxiaoz

관련 문제