Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    décembre 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : décembre 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Scapy: attendre plusieurs réponses

    Bonjour,

    Je dois réaliser une connexion HTTP avec un GET en Scapy. Le but étant de pouvoir relever les différents temps de chaque phase (échange, SYN, SYN ACK, ACK, request, response, etc).

    Lorsque j'envoi mon paquet tcp contenant mon GET, 3 paquets doivent revenir:
    - Un packet ACK pour mon GET
    - La réponse du GET (les data quoi) a priori: HTTP/1.0 200 OK
    - Et enfin un FIN ACK disant que la transmission est finie

    Il faut que je puisse récuper ces 3 paquets de façon automatique, pour cela j'ai trouvé 2 façons:

    => 1) la fonction sr() avec l'option multi=1

    => 2) utiliser sniff juste apres mon GET

    1) Pour sr(), le problème est d'arreter la capture, si je met multi=1, il attend plusieurs réponses au stimuli, mais ne sais pas quand s'arreter, il n'y a pas d'option "count" pour lui dire de s'arreter à 3 réponses.
    Une solution serait d'utiliser un timeout, sauf que vu que ce script marchera sur des sites très différents, il est possible qu'un jour une réponse excède mon timeout. Et si le timeout est trop grand, c'est handicapant en terme de perfo.

    2) Si j'utilise sniff, pas de problème vu que je peux utilser "count" et lui dire de s'arreter a 3 paquets, l'ennui est qu'il capte tous les paquets entrant et pas seulement les réponses de mon stimuli. Donc il faut faire un filtre pour preciser quel paquet exact je recherche. Seulement je ne suis pas sûr de pouvoir faire un filtre assez precis pour que jamais un paquet "batar" d'un autre protocole ne s'interpose.
    De plus, un autre problème est qu'il arrive parfois qu'entre la ligne:
    send(GET_PACKET) qui envoie mon paquet TCP GET
    et la ligne juste en dessous:
    answers=sniff(...))
    certains paquets aient deja été envoyé avant l'activation du sniff, du coup quand je lis le 3è paquets reçu, ce n'est pas le FIN ACK.

    L'idée serait de pouvori utiliser sr() de sorte qu'il s'arrete à un nombre de paquets donnés.

    Une meilleure solution serait de seulement attendre le paquet FIN ACK car des fois la réponse au GET est découpée en plusieurs paquets, du coup au total j'ai:
    1 ACK
    "N" GET response
    1 FIN ACK

    il y a peut etre d'autres façon auxquelles je n'ai pas pensé, je ne suis pas expert en scapy,
    mon but est de relever 4 temps:
    DNS resolution (facile)
    Connect resolution (facile: delta entre l'envoi du SYN et la reception du SYN ACK)
    Response (delta entre l'envoi du GET et la réception du ACK)
    Data (delta entre la reception du premier paquet de reponse et la réception du dernier (le FIN ACK)

    Si quelqu'un a une idée ce serait super

    Merci

  2. #2
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 23
    Points : 53
    Points
    53

    Par défaut

    Bonjour, tout d'abord :

    http://www.thice.nl/creating-ack-get...ts-with-scapy/

    la fonction sr1() envoie un packet et s'arrete dès la reception du premier packet qui repond au "stimuli" donc pratique pour le tcp handshake, après pour la reception du get........ je cherche je cherche.......

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •