Как сканировать порт удаленного хоста, который используется? - PullRequest
1 голос
/ 01 декабря 2009

это код, который я так далеко ...

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 система использует порт 25, и мне нужно сканировать порт на удаленном клиенте, который подключен к серверу SMTP. как я могу это сделать?

, пожалуйста, помогите мне.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2009

Ваш код должен выглядеть так:

    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);
            }
    }
1 голос
/ 02 декабря 2009

Если я понял вашу проблему:

  • процесс S выполняется на компьютере A и прослушивает порт P для входящих соединений
  • процесс C выполняется на машине B и подключается от порта T к P на A
  • ваша программа F работает на машине A
  • F не S

Хотите открыть для себя T в F, используя Java? Вы не можете!

Вы должны прочитать таблицу операционных систем с открытыми сокетами. Это операция, зависящая от операционной системы, и она не поддерживается Java.

В противном случае, если F - S, вы можете изменить код S для обнаружения T. Если S использует класс java.net.ServerSocket, вы можете выполнить поиск ServerSocket.accept () и обнаружить T с помощью getPort () в возвращенном экземпляре Socket. .

ТОО, Андреа

0 голосов
/ 01 декабря 2009

Во-первых, существуют некоторые методологические проблемы с этим способом, поскольку порт может использоваться, но не прослушивать.

Если вы на самом деле просто ищете прослушивающие порты и хотите использовать описанный выше подход, по крайней мере порождайте некоторые потоки, чтобы вам не приходилось ждать, когда для каждого порта истекает время ожидания последовательно.

Лучшим способом было бы имитировать что-то вроде сканирования синхронизации, а не делать полное TCP-рукопожатие, но я не уверен, что вы можете получить это близко к металлу в Java.

Хороший вопрос.

...