2016-07-22 13 views
0

ich weiß, es ist eine dumme Frage. aber glauben Sie mir - ich suchte ich das ganze Internet und ich bekam keine Antwort. zunächst, mein Code ist:Wie bekomme ich http Daten von einer Website von scapy

def Make_Get(): 
     synR = IP(dst = 'www.google.com', ttl = 64)/TCP(dport = 80, flags = 'S') 
     synAckAN = sr1(synR) 
     getStr = 'GET /index.html HTTP/1.0 \n\n' 
     req = (IP(dst = 'www.google.com', ttl = 64)/TCP(dport = 80, sport = synAckAN[TCP].dport, seq = synAckAN[TCP].ack, ack = synAckAN[TCP].seq+1, flags = 'A')/getStr) 

     ans, unans = sr(req) 
     return ans, unans 

, wenn ich diese Funktion ausführen und Tring die „ans“ (erster Parameter) drucken - its me, ohne dass die Daten eine Antwort zu geben. Blick: 1 Pakete empfangen, bekam 1 Antworten, Rest 0 Pakete

###[ IP ]### 
    version = 4L 
    ihl  = 5L 
    tos  = 0x0 
    len  = 40 
    id  = 9784 
    flags  = 
    frag  = 0L 
    ttl  = 128 
    proto  = tcp 
    chksum = 0xc02f 
    src  = 216.58.210.4 
    dst  = 192.168.233.128 
    \options \ 
###[ TCP ]### 
    sport  = http 
    dport  = ftp_data 
    seq  = 2116250139 
    ack  = 28 
    dataofs = 5L 
    reserved = 0L 
    flags  = A 
    window = 64240 
    chksum = 0x77bc 
    urgptr = 0 
    options = {} 
###[ Padding ]### 
     load  = '\x00\x00\x00\x00\x00\x00' 
None 

gibt es keine irgendwelche Daten ....... , aber wenn ich die transmition in Wireshark schnupperte, würde ich ein HTML bekam Code in einem Paket.

meine Frage ist - wie kann ich eine Get-Anfrage schicken wie ich, und den HTML-Code von der Website speichern (um es zu drucken, oder in eine Datei .. doesnt metter ..)

Antwort

0

Ich würde empfehle sehr, scapy-http zu verwenden, die eine scapy Erweiterung ist, die Ihnen hilft, HTTP zu unterstützen.

+0

Ich kann es verwenden .. aber ich möchte wissen, wie HTTP REQ ohne es zu tun. Das Problem ist, dass die Antwort, die ich bekomme, wenn ich das tue, Ack ist und kein HTML-Code. Du weißt nicht warum, oder? – jony

+0

Sie müssen zuerst die TCP-Verbindung herstellen, dann führen Sie Ihre HTTP-Anforderung im Hauptteil der TCP-Payload aus. Also, zuerst ein SYN, erhalte ein ACK und dann ein SYN/ACK. Danach können Sie das HTTP im Body der TCP-Payload senden, und dann hoffentlich erhalten Sie es – StephenG

+0

Das ist genau das, was ich in dem Code, den ich gesendet habe, getan habe – jony

Verwandte Themen