Question

J'ai une adoption concernant la numérisation des ports. Je scanne les ports UDP de certaines adresses IP dans Java.in mon programme (en supposant que tout va bien), je ne trouve qu'un seul port UDP ouvert. Dans les autres mains, la numérisation de port sur "NMAP", j'obtiens 4 ports UDP ouverts. Quelqu'un peut-il me dire pourquoi je ne peux pas trouver plus d'un ports via le code Java? Au fait, je peux trouver le vrai port ouvert dans mon code.

int startPortRange=1;
    int stopPortRange=1024;
    InetAddress address = InetAddress.getByName("bigblackbox.cs.binghamton.edu");
    int counter=0;
    for(int i=startPortRange; i <=stopPortRange; i++)
    {
        counter++;      
       try{


            byte [] bytes = new byte[128];
            DatagramSocket ds = new DatagramSocket();
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
            ds.setSoTimeout(100);
            ds.connect(address, i);
            ds.send(dp);
            ds.isConnected();
            dp = new DatagramPacket(bytes, bytes.length);
            ds.receive(dp);
            ds.close();
            System.out.println("open");
            System.out.println(counter);
        }
        catch(InterruptedIOException e){
            //System.out.println("closed");
        }
        catch(IOException e){
            //System.out.println("closed");
        }       
    }

La sortie du code ci-dessus est 135 ouverte

Lorsque je fais la même opération dans la ligne de commande à l'aide de NMAP, j'obtiens plus de ports ouverts. Je n'ai pas pu télécharger une image parce que je suis un nouvel utilisateur. Mercienter image description here

Était-ce utile?

La solution

Il est impossible de fournir une réponse concrète, sauf si vous fournissez au moins:

  • Le code source de votre programme.

  • Un exemple de la sortie (incorrecte) que vous obtenez.

  • La sortie attendue pour le même scénario.

Sans ces informations, il n'y a aucun moyen pour nous de vous dire ce qui ne va pas. Pour tout ce que nous savons, cela pourrait même être un cas simple de votre programme se terminant prématurément après avoir trouvé un port ouvert. Ou un cas du port ouvert qui a été trouvé pour la dernière fois écrasant les entrées des précédents avant d'être affichés.

Dans tous les cas, il pourrait être utile d'enquêter sur ce qui est envoyé et reçu en utilisant un renifleur de réseau, tel que Wireshark. En comparant un nmap Session avec une session créée par votre programme, vous pourrez peut-être repérer une différence significative qui aiderait à identifier le problème.

ÉDITER:

Après avoir regardé votre code et comparé avec nmap, il semble que vous gérez par erreur le cas d'un SocketTimeoutException En tant que port fermé, alors qu'il pourrait simplement être le port d'un serveur qui refuse de répondre au paquet que vous avez envoyé.

Edit 2:

Voici l'histoire complète:

Lorsqu'un port est correctement fermé, le serveur renvoie un Paquet de destination ICMP inaccessible avec le Port inaccessible code d'erreur. Java interprète cette erreur à un IOException que vous envisagez correctement pour indiquer un port fermé.

Un port ouvert, en revanche, peut entraîner deux réponses différentes du serveur:

  • Le serveur renvoie un paquet UDP, qui est reçu par votre programme et indique certainement un port ouvert. Les serveurs DNS, par exemple, répondent souvent par un Erreur de format réponse. nmap montre que ces ports sont open.

  • Le serveur ignore votre paquet de sonde car il est mal formé au service fourni. Il en résulte un délai d'expiration du réseau et un SocketTimeoutException dans votre programme.

Malheureusement, il n'y a aucun moyen de savoir si un délai d'expiration du réseau est dû au fait qu'un serveur actif a ignoré un paquet de sonde mal formé ou parce qu'un filtre de paquet a coupé la sonde. C'est pourquoi nmap Affiche les ports ce moment-là comme open|filtered.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top