2012-07-04 2 views
0

주어진 호스트에서 포트 443이 열려 있는지 확인하는 다음 코드가 있습니다.Java에서 포트 443 스캔 속도를 높이는 방법

import java.net.*; 
import java.io.IOException; 

public class Scan { 

    public static void main (String[] args) { 
     String host="put hostname here"; 
     int port=443; 

     try{ 
      Socket s = new Socket(host,port); 
      System.out.println("Can listen on port "+port+ 
         " in host "+host+" is open"); 

     } //end try 
     catch (IOException ex) 
     { 
      //remote host is not listening on port 443 
      System.out.println("Can not listen on port "+port+ 
         " of host "+host); 
     } //end catch 
    } 
} 

내 질문은 : 포트 443는 특정 호스트에서 열려 있지 않은 경우 나 호스트의 그룹을 확인해야합니다,이, 내 프로그램은 매우 느리게합니다. 같은 시간에 안정성을 유지하면서 포트 443 스캔 속도를 높이기 위해 코드를 개선 할 수있는 방법이 있습니까? java 프로그래밍을 사용하여 소켓을 사용하는 것 이외의 포트 스캐닝을하는 방법이 있습니까?

내가 검사 한 호스트 이름이 연결되어 있으므로 검사를 시작하기 전에 ping을 수행하지 마십시오. 포트 443이 열려 있거나 닫혀 있는지 확인하면됩니다.

+2

[소켓에 대한 시간 초과 설정] (0120-388-305) – assylias

+0

실제로 중복 된 정확한 내용은 아닙니다. 다른 호스트 (즉, 병렬)에서 다른 호스트를 검색 할 수 있습니다. – assylias

답변

2

호스트 그룹을 검사해야하는 경우 별도의 스레드에서 각 검사를 실행하십시오. 이렇게하면 한 호스트가 다른 호스트를 처리하지 못하도록합니다.

길고 독립적 인 IO 작업은 멀티 스레딩을위한 고전적인 사용법입니다. 네트워크 응답을 기다리는 동안 실제적으로 아무것도 수행하지 않으므로 시스템의 CPU 수를 걱정할 필요조차 없습니다. 다른 사람들이 제안한 것처럼 타임 아웃을 추가하는 것도 합리적인 추가 작업이며 멀티 스레딩과 함께 사용할 수 있습니다.

+0

또한 시간 초과를 추가하십시오. 서버가 20 초 이내에 응답해야한다는 것을 안다면 오래 기다릴 필요가 없습니다. – carlspring

관련 문제