IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

[Python] [Scapy] Recevoir de la Data [Expert Network & Python Only]


Sujet :

Développement

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 13
    Points
    13
    Par défaut [Python] [Scapy] Recevoir de la Data [Expert Network & Python Only]
    bonjour voila mon projet est de pouvoir envoyer un packet avec scapy avec un port de destination tres special (genre 80 ou 22 ou 161 ou 123 ...)
    et si l'ip repond au packet envoyer c'est bon cela veux dire que le port est ouvert


    bon voila je sais comment envoyer le packet
    dans l'exemple j'ai choisis le protocole UDP (port 161) lié au service SNMP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #!/usr/bin/env python
    from scapy.all import *
    import socket
    import subprocess
    import sys
    from datetime import datetime
    
    
    subprocess.call('clear', shell=True)
    
    
    adresseIP    = raw_input("Adresse IP : ")
    
    data ="\x14"
    packet = IP(dst=adresseIP)/UDP(dport=161)/Raw(load=data) 
    send(packet)
    Bon voila la j'ai envoyer le packet mais comment obtenir la reponse et savoir si on recoit quelque chose ou pas pour savoir si le port est ouvert ou fermer


    j'ai penser a cette fonction sr1()

    en codant ce code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/env python
    import socket
    import subprocess
    import sys
    from scapy.all import *
    from datetime import datetime
    
    subprocess.call('clear', shell=True)
    
    adresseIP    = raw_input("Adresse IP : ")
    
    pingr = IP(dst=adresseIP)/UDP(dport=161)
    sr1(pingr)
    La aussi le probleme est que meme sur des machines ou j'ai installer snmp et activer via un service snmpd restart et où le port 161 est open (test via nmap) je got aucun packet

    mais genre si je tape www.google.com je recois quelque chose


    Des idée pour m'aider a recevoir la reponse d'un packet envoyer sur le port 161 ?


    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il me semble avoir répondu à ta question :

    http://www.developpez.net/forums/d14...tcp-problemes/

    Mais bon, je vais laisser un "Expert Network & Python Only" répondre

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 13
    Points
    13
    Par défaut Merci
    Oui j'ai vu merci mais sa m'a l'air vraiment compliquer j'ai trouver un script utilisant le import nmap

    le voici : http://pastebin.com/2jvJUurb

    qu'en pensez vous ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SmoZy Voir le message
    Oui j'ai vu merci mais sa m'a l'air vraiment compliquer j'ai trouver un script utilisant le import nmap

    le voici : http://pastebin.com/2jvJUurb

    qu'en pensez vous ?
    Et selon toi, que fais nmap pour scanner des ports UDP ?

    Il émet un datagramme UDP vers le port en question et considère le port fermé lorsqu'il reçoit un ICMP Port Unreachable.

    Dans le cas contraire (à savoir il reçoit une réponse ou il ne reçoit aucune réponse), il considère le port comme filtré/ouvert.

    Steph

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 13
    Points
    13
    Par défaut
    Merci Steph de toi aide !

    essaye le scripts que j'ai trouver il ne fais rien du tout

    python scan.py

    aucun resultat



    Merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 13
    Points
    13
    Par défaut
    J'ai trouver sa en perl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #!/usr/bin/perl
    
    use Net::Ping;
    use IO::Select;
    use IO::Socket::INET;
    
    # IP address to scan
    my $ip = '10.0.0.1';
    
    # First we will send a ping to make sure the scanned host is exist
    my $p = Net::Ping->new( "icmp", 1, 64 );
    if ( $p->ping($ip) ) {
     print "$ip answered ping , Start scanning ....\n";
    } else {
     print "$ip did not answer ping\n";
    exit 5;
    }
    # Time  to wait for the "destination unreachable" package.
    my $icmp_timeout=2;
    # Create the icmp socket for the "destination unreachable" packages  
    $icmp_sock = new IO::Socket::INET(Proto=>"icmp");
    $read_set = new IO::Select();
    $read_set->add($icmp_sock);
    
    # Buffer to send via UDP
    my $buf="hello";
    
    # Scan all the ports .....
    for ( $i=1 ; $i <= 65535 ; $i++ ) {      # Create UDP socket to the remote  host and port    
        my $sock = new IO::Socket::INET(PeerAddr=>$ip,
        PeerPort=>$i,
        Proto=>"udp");
          # Send the buffer and close the UDP socket.
        $sock->send("$buf");
        close($sock);
    
          # Wait for incoming packets.
        ($new_readable) = IO::Select->select($read_set, undef, undef, $icmp_timeout);
          # Set the arrival flag.
        $icmp_arrived = 0;
          # For every socket we had received packets (In our case only one - icmp_socket)
        foreach $socket (@$new_readable)
        {
               # If we have captured an icmp packages, Its probably "destination unreachable"
             if ($socket == $icmp_sock)
             {
                    # Set the flag and clean the socket buffers
                  $icmp_arrived = 1;
                  $icmp_sock->recv($buffer,50,0);
             }
        }
        if ( $icmp_arrived == 0 )
        {
             print "Open  UDP port : $i\n";
        }
    }
    # Close the icmp sock
    close($icmp_sock);
    print "End !!\n";

    c'est exactement sa ! mais apres le coder en python ^^

  7. #7
    Invité
    Invité(e)
    Par défaut
    Personne n'étant parfait, je ne fais plus de développement

    En revanche, j'attire ton attention sur cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # Scan all the ports .....
    for ( $i=1 ; $i <= 65535 ; $i++ ) {      # Create UDP socket to the remote  host and port    
        my $sock = new IO::Socket::INET(PeerAddr=>$ip,
        PeerPort=>$i,
        Proto=>"udp");
          # Send the buffer and close the UDP socket.
        $sock->send("$buf");
        close($sock);
    
    
          # Wait for incoming packets.
        ($new_readable) = IO::Select->select($read_set, undef, undef, $icmp_timeout);
          # Set the arrival flag.
        $icmp_arrived = 0;
          # For every socket we had received packets (In our case only one - icmp_socket)
        foreach $socket (@$new_readable)
        {
               # If we have captured an icmp packages, Its probably "destination unreachable"
             if ($socket == $icmp_sock)
             {
                    # Set the flag and clean the socket buffers
                  $icmp_arrived = 1;
                  $icmp_sock->recv($buffer,50,0);
             }
        }
        if ( $icmp_arrived == 0 )
        {
             print "Open  UDP port : $i\n";
        }
    }
    Certains stacks IP, et c'est généralement le cas pour les hosts Linux/Unix récents mais aussi certains switches/routeurs, sont configurés par défaut pour limiter le nombre d'ICMP émis par seconde...

    Ce qui signifie que tu risques d'attendre trèèèèèèèèèèès loooooongtemps quand ton programme va scanner 65535 ports UDP

    Steph

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 13
    Points
    13
    Par défaut
    Ouai j'ai tester

    je l'ai recoder en utilisant un systeme de scan d'ip avancer par exemple on peut scanner toute les IP's d'internet de 0.0.0.0 a 255.255.255.255 il suffit juste d'indiquer les 2 ranger (debut et fin)

    le voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    	
    
        #!/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) }
        }


    utilisation : perl prog.pl [Debut de la ranger] [Fin de la ranger] [Port] [Threads] [Delay] [Fichier.txt]


    le delay est le delais en ms / ip
    le fichier .txt il faut mettre un fichier ou seront inserer les IP repondant au datagramme



    Mais bon comme il y a toujours un probleme ^^

    j'ai scanner vite fais mon serveur (37.59.250.17) en ranger j'ai mis 37.59.250.10 a 37.59.250.30 mais mon Serveur ne reponds pas



    Mince alors tout ce travaille pour rien :/ (le systeme de threads est utiliser pour un scan plus rapide) si tu veux tester le scripts je te conseilel de mettre 2 ou 3 thread max cela depends de ta ram et ton processeur

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par IP_Steph Voir le message
    Certains stacks IP, et c'est généralement le cas pour les hosts Linux/Unix récents mais aussi certains switches/routeurs, sont configurés par défaut pour limiter le nombre d'ICMP émis par seconde...
    Il me semble avoir vu un rfc qui disait justement qu il était parfaitement légal de limiter jusqu'à 2 paquets icmp par seconde (impossible de me rappeler le rfc)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    2 paquets icmp par seconde (impossible de me rappeler le rfc)
    RFC1812 - Requirements for IP Version 4 Routers, paragraphe 4.3.2.8
    La RFC2463 ICMPv6 en parle également (concernant les attaques ICMPv6 notamment).

    Steph

  11. #11
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 13
    Points
    13
    Par défaut
    Une aide pour mon script s'il vous plait ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/04/2015, 22h35
  2. Python => Aide sur les fonctions min() et max() de Python
    Par PythonNovices dans le forum Général Python
    Réponses: 2
    Dernier message: 30/12/2014, 16h28
  3. [Python Scapy]Extraction CRC Ethernet
    Par Moskito dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 02/03/2010, 09h23
  4. python C API: convertir une struct C en Class python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 11
    Dernier message: 25/06/2008, 16h30
  5. Python et Scapy : Questions diverses
    Par Dschub dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 01/05/2008, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo