/ / Czy mogę przyspieszyć proces portu skanowania? - Java, wydajność, sieci

czy mogę przyspieszyć proces skanowania portów? - Java, wydajność, networking

import java.net.*;

import java.io.IOException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PortScanner {

public static void main(String[] args) {
InetAddress ia=null;
String host=null;
try {

host=JOptionPane.showInputDialog("Enter the Host name to scan:n example: example.com");
if(host!=null){
ia = InetAddress.getByName(host);
scan(ia); }
}
catch (UnknownHostException e) {
System.err.println(e );
}
System.out.println("Bye from NFS");
//System.exit(0);
}

public static void scan(final InetAddress remote) {
//variables for menu bar

int port=0;
String hostname = remote.getHostName();

for ( port = 70; port < 65536; port++) {
try {
Socket s = new Socket(remote,port);
System.out.println("Server is listening on port " + port+ " of " + hostname);
s.close();
break;
}
catch (IOException ex) {
// The remote host is not listening on this port
System.out.println("Server is not listening on port " + port+ " of " + hostname);
}
}//for ends
}
}

proszę pomóż mi.

Odpowiedzi:

3 dla odpowiedzi № 1

Nie jestem pewien, czy to przyspieszy, aleponieważ każde gniazdo, które tworzysz, jest niezależne od następnego gniazda, czy próbowałeś zrobić więcej wątków, aby móc tworzyć nowe gniazda, gdy starsze gniazda czekają na zakończenie uzgadniania.


0 dla odpowiedzi nr 2

Zamiast używać linii

Socket s = new Socket(remote,port);

Powinieneś użyć

Socket s = new Socket();
int timeout = 100; // milliseconds
s.connect( new InetSocketAddress( remote, port ), timeout );

W ten sposób nie będziesz musiał czekać na domyślny limit czasu TCP, aby zobaczyć, że ten port jest blokowany przez zaporę ogniową bez żadnej odpowiedzi.