2009-12-01 3 views
1

이 내가 지금까지 얻을 코드 ... SMTP 서버에 예를 들어 시스템 사용 포트 25에 대한사용중인 원격 호스트 포트를 검사하는 방법은 무엇입니까?

import java.net.*; 

public class PortScanner { 

    public static void main(String args[]) { 
     int startPortRange = 0; 
     int stopPortRange = 0; 

     startPortRange = Integer.parseInt(args[0]); 
     stopPortRange = Integer.parseInt(args[1]); 

     for (int i = startPortRange; i <= stopPortRange; i++) { 
      try { 
       Socket ServerSok = new Socket("127.0.0.1", i); 

       System.out.println("Port in use: " + i); 

       ServerSok.close(); 
      } catch (Exception e) { 

      System.out.println("Port not in use: " + i); 
     } 
    } 
} 

} 이며, 내가 SMTP 서버에 연결된 원격 클라이언트에서 포트를 스캔 할 필요가있다. 내가 어떻게 할 수 있니?

도와주세요.

+2

마지막 문장에서 정확히 무엇을 의미합니까? 원격 클라이언트에서 * this * machine에서 사용중인 포트를 감지하려고합니까? 일반적으로 원격 포트를 감지하는 방법에 대한 조언을 원하십니까? 아니면 "대상"컴퓨터에서 포트 가용성을 게시 하시겠습니까? 나는 당신의 질문을 이해하지 못한다고 생각합니다. –

+0

나는이 포트를 클라이언트가 받아들이는데 사용하는 포트에 관심이 있다고 생각한다. – BalusC

+0

컴퓨터 A에 나는이 프로그램을 실행하고 컴퓨터 B에서 IP 주소를 넣는다. 어떻게 내가 포트를 알고 있는지 알 수있다. 컴퓨터 B (포트 정보는이 컴퓨터에 있음)에서 내 컴퓨터 (컴퓨터 A)로 전송합니다. 미안해, 내 영어가별로 좋지 않아. – Otip88

답변

0

먼저 포트가 사용 중이지만 수신 대기 중이므로이 방법으로는 방법 론적 문제가 있습니다.

실제로 수신 대기 포트를 찾고있는 경우 위의 방법을 사용하려면 각 포트가 순차적으로 시간 초과 될 때까지 기다릴 필요가 없도록 적어도 일부 스레드를 생성하십시오.

가장 좋은 방법은 전체 TCP 핸드 셰이크를 수행하는 것보다 syn 스캔과 유사하지만 Java에서 금속에 가까운 것을 얻을 수 있는지 확신 할 수 없습니다.

그래도 괜찮습니다.

2

코드는 다음과 같아야합니다

for (int i = startPortRange; i <= stopPortRange; i++) { 
      try { 
        Socket serverSok = new Socket("127.0.0.1", i); 

        System.out.println("Port in use: " + i); 

        serverSok.close(); 
      } catch (Exception e) { 
        System.out.println("Port not in use: " + i); 
      } 
    } 
+0

작은 문제는 ... – Otip88

+0

이 문제가 있었습니까? 아니면 다른 것이 있습니까? –

+0

예, 그 밖의 무엇인가. 내 컴퓨터에 연결된 다른 컴퓨터의 포트 번호를 알아야합니다. – Otip88

1

나는 당신의 문제를 이해하는 경우 :

  • S가 시스템 A에서 실행하고 들어오는 연결
  • 프로세스에 대한 포트 P에서 수신 대기하는 프로세스 C는 시스템 B에서 실행되고 A에서 포트 T에서 P로 연결됩니다.
  • 프로그램 F는 시스템 A에서 실행됩니다.
  • F가 S가 아님

Java에서 T in F를 찾고 싶습니까? 당신은 할 수 없다!

개방형 소켓의 작동 시스템 테이블을 읽어야합니다. 이는 운영 체제 종속 작업이며 java에서 지원되지 않습니다.

그렇지 않으면 F가 S 인 경우 S 코드를 변경하여 T를 찾습니다. S가 java.net.ServerSocket 클래스를 사용하는 경우 ServerSocket.accept()를 검색하고 반환 된 소켓에서 getPort()를 사용하여 T를 검색 할 수 있습니다. 예.

LLP, Andrea

관련 문제