Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Сканер


Автор: knox 4.12.2007, 19:18
как определить открытые и закрытые порты,
Код

for (int i=1; i<=3000; i++){
    try{
      ServerSocket s = new ServerSocket(i);
      System.out.println(i+" port open");
    }
    catch(IOException e){
      System.out.println(i+" port close");        
    }     
}

если делать таким образом сканирует быстро все норм, но вот номера портов не совпадают с номерами если сканировать другими сканерами

если вместо ServerSocket, использовать класс Socket номера портов совпадают вот только сканирование идет очень долго, помогите разобраться кто знает

Код

for (int i=1; i<=3000; i++){
    try{
      Socket s = new Socket(i);
      System.out.println(i+" port open");
    }
    catch(IOException e){
      System.out.println(i+" port close");        
    }     
}

Автор: kkorsakoff 5.12.2007, 00:28
Второй вариант сканирования правильный. Долго идет скорее всего из-за таймаута на коннект, если порт свободен - сначала выжидается таймаут перед тем, как выбрасывается SocketException...или что там, забыл уже.
Попробуй выставлять в качестве таймаута какое-нибудь маленькое значение (ты же локалхост сканируешь).
Делается это до открытия сокета:
1. сначала создаешь сокет конструктором без параметров
2. делаешь connect() с указанием таймаута (почитай javadoc на класс Socket)

Автор: Kangaroo 5.12.2007, 00:48
Цитата(kkorsakoff @  4.12.2007,  23:28 Найти цитируемый пост)
Делается это до открытия сокета:
1. сначала создаешь сокет конструктором без параметров
2. делаешь connect() с указанием таймаута (почитай javadoc на класс Socket) 

Вот так получилось:
Код

for (int i=1; i<=3000; i++){
            try{
              Socket s = new Socket();
              s.connect(new InetSocketAddress(i), 20);
              System.out.println(i+" port open");
            }
            catch(IOException e){
              System.out.println(i+" port close");        
            }     
        }

Вроде работает. smile

Автор: knox 5.12.2007, 15:51
спасибо за помощь только я в конструктроре добавил еще хост

Автор: kkorsakoff 7.12.2007, 00:38
В конструкторе никакой хост не добавлен. Очевидно, вы перепутали.
И кстати не забываем закрывать открытые сокеты  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)