[Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

[Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP



  1. #1
    invited93be9e9

    [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP


    ------

    Bonjour merci d'avoir porter de l'importance a mon topic ^^

    bon voila je vous explique j'essaye de scaner une rangé d'ip sur un certain port par exemple de 192.168.0.0 a 192.168.255.255 en testant le port 161 qui est basé sur le service SNMP utilisant le protocole UDP

    donc voila enfaite j'envoye un simple datagramme sur l'ip et le port et si je recois un ICMP Unreachable c'est bon j'affiche l'ip et je l'entre dans un fichier .txt

    j'utilise un systeme de threading pour un scan + rapide

    le code :

    Code:
    #!/usr/bin/perl
     
        use Net::IP;
    	use Net::Ping;
    	use IO::Select;
    	use IO::Socket::INET;
        use Term::ANSIColor;
        use vars qw( $PROG );
        ( $PROG = $0 ) =~ s/^.*[\/\\]//;
        #Utilisation
        if ( @ARGV == 0 ) {
                print "Utilisation : perl $PROG.pl [Debut de la ranger] [Fin de la ranger] [Port] [Threads] [Delay] [Fichier.txt]\n";
            exit;
        }
        my $threads  = $ARGV[3];
        my @ip_team  = ();
        $|= 1;
        my $ip   = new Net::IP ("$ARGV[0] - $ARGV[1]") or die "Erreur ranger d adresse IP Invalide.". Net::IP::Error() ."\n";
     
     
        #on fork ^^
        while ($ip) {
        push @ip_team, $ip++ ->ip();
        if ( $threads == @ip_team ) { Scan(@ip_team); @ip_team = () }
        }
        Scan(@ip_team);
     
        #Scan
        sub Scan
        {
        my @Pids;
     
                foreach my $ip (@_)
                {
                my $pid        = fork();
                die "Fork impossible! $!\n" unless defined $pid;
     
                        if  (0 == $pid)
                        {
                                        alarm 1;
     
     
    									# temps d'attente du  "destination unreachable" packet
    my $icmp_timeout=2;
    # creation d'un icmp socket pour  "destination unreachable" packets
    $icmp_sock = new IO::Socket::INET(Proto=>"icmp");
    $read_set = new IO::Select();
    $read_set->add($icmp_sock);
     
    # le buffer a envoyer en UDP
    my $buf="hello";
     
     
     
     
          # crée un socket udp pour l'ip et le port
        my $sock = new IO::Socket::INET(PeerAddr=>$ip,
        PeerPort=>$ARGV[2],
        Proto=>"udp",
    	Timeout => $ARGV[4]);
         #on envoye le buffer et ferme le socket
        $sock->send("$buf");
        close($sock);
     
          # attente de recevoir les packets
        ($new_readable) = IO::Select->select($read_set, undef, undef, $icmp_timeout);
          # arrivé des flags
        $icmp_arrived = 0;
          # pour tout les socket on a recu un packet (seulement - icmp_socket)
        foreach $socket (@$new_readable)
        {
               # si nous avons reussi ce qui est probable nosu avons  "destination unreachable"
             if ($socket == $icmp_sock)
             {
                    # met le flags et nettoye le buffer et sockets
                  $icmp_arrived = 1;
                  $icmp_sock->recv($buffer,50,0);
             }
        }
     
     
     
     
     
                                        open (MYFILE, ">>$ARGV[5]");
                                if ( $icmp_arrived == 0 ) {
                        print MYFILE "$ip\n";
                         print "IP TROUVER  :  $ip\n";
                        close (MYFILE);}
                        exit
                        }
                        else
                        {
                        push @Pids, $pid
                        }
                }
     
        foreach my $pid (@Pids) { waitpid($pid, 0) }
        }


    Désolé d'avance pour l'organisation du code j'ai un gros probleme avec sa


    voila j'ai un serveur son ip = 37.59.250.17

    j'ai install SNMP et fait un nmap -sU -p 161 37.59.250.17 pour voir si le port est bien ouvert et oui il est open

    mais quand je scan de par exemple de 37.59.250.10 a 37.59.250.30 sa m'affiche aucune IP alors que le port de ma machine est bien Open

    Merci d'avance pour vos reponses

    -----

  2. #2
    JPL
    Responsable des forums

    Re : [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP

    192.168.0.0 et 192.168.255.255 ne sont pas de bonnes idées
    Bref le dernier octet à 0 ou à 255 sont des valeurs réservées.
    Dernière modification par JPL ; 17/06/2014 à 15h37.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    invited93be9e9

    Re : [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP

    Merci de ta reponse mais sa ne reponds pas a ma question ^^

  4. #4
    invite0bbe92c0

    Re : [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP problemes

    Je ne connais pas les syntaxe perl, mais le test sur le fork me semble incorrect (à moins que je n'ai pas compris la logique de ton code, ce qui est très possible) : il me semble que ton bloc ne s'exécute que dans le contexte du process père.

  5. A voir en vidéo sur Futura
  6. #5
    invited93be9e9

    Re : [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP

    le fork marche niquel, jene savais pas ou le postez ^^

  7. #6
    JPL
    Responsable des forums

    Re : [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP

    Fusion de deux discussions et suppression du doublon.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  8. #7
    polo974

    Re : [Perl] [Socket] [Reseau] [Threads] Scanner de ports ouverts UDP

    Bonjour,
    il y a (au moins) 2 trucs qui me chagrinent ici (en dehors du fait que ce soit en perl que je ne pratique pas):
    fork, c'est une duplication de process, très lourd, et ce n'est pas du tout un thread (qui reste dans le même process).
    utiliser des threads (ou pire des forks), juste pour paralléliser des petites requêtes (quasi identiques), c'est vraiment pas le top (sauf à avoir un quad core, hyperthreading, double turbo, injection directe à distribution desmodromique et une carte réseau 10Gbits/s). D'autant qu'il y a déjà une amorce de l'usage d'un select...

    Bref, tout dans un seul process, mono thread avec usage du select(), et l'affaire est dans le sac...

    (enfin, sauf, si c'est un exo sur les forks et/ou threads, bien sûr...)


    Sinon, le premier truc serait de toute façon de le faire en mono-tâche pour vérifier la logique de base fonctionne pour une adresse, ensuite, //isation...
    Dernière modification par polo974 ; 22/06/2014 à 09h29.
    Jusqu'ici tout va bien...

Discussions similaires

  1. Grave: ports usb HS=pas de clavier ni connection réseau
    Par invitea02bba29 dans le forum Matériel - Hardware
    Réponses: 6
    Dernier message: 14/11/2012, 16h46
  2. Réseau XP mort suite ouverture des ports
    Par invite29d61b2d dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 0
    Dernier message: 15/06/2010, 12h13
  3. Réseau XP mort suite ouverture des ports
    Par invite29d61b2d dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 15/06/2010, 11h37
  4. Ports ouverts avec Z A
    Par inviteb88e7c48 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 10
    Dernier message: 16/06/2006, 19h50
  5. Ports ouverts : est-ce grave ?
    Par invite24357dd0 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 07/02/2005, 19h04