2016-06-13 48 views
0

我想通過scapy向目標系統發送HTTP響應。我知道scapy使用分層實現來創建一個像IP/TCP/ETHER的數據包。要發送一個簡單的TCP數據包,我們可以使用下面的scapy腳本。是否可以通過scapy創建HTTP響應

#!/usr/bin/python 
from scapy.all import * 

ip=IP(src="10.10.1.207", dst="10.10.1.60") 

payload="Hello World" 
PUSH=TCP(sport=80, dport=3389, flags="F") 
send(ip/PUSH/payload) 

有什麼辦法,我們可以將這種一個HTTP層? 但是,我每次收到一個TCP數據包,而不是目標機器上的HTTP響應數據包時,我嘗試了很多方法。

+1

通過響應數據包我的意思是,當我們嘗試訪問任何url的基本信息時,我們會發送一個get請求(HTTP),並且作爲響應,我們收到一個響應數據包,其頭部像「HTTP 1.1 200 OK ... etc」通過scapy(或任何其他工具)創建此響應數據包並將其發送到目標系統。 – prash

回答

1

Scapy的不具有本機HTTP層剝離器,但是,可以很容易地發送一個HTTP請求/響應,因爲它是一個文本協議:

RESP = "HTTP/1.1 200 OK\r\n" 
RESP += "Server: exampleServer\r\n" 
RESP += "Content-Length: 6\r\n" 
RESP += "\r\n" 
RESP += "A body" 

IP(src="10.10.1.207", dst="10.10.1.60")/TCP(sport=80, dport=3389, flags="A", seq=ACK.ack, ack=ACK.seq)/RESP 

ACK是先前製備的3路第三段握手(SYN,SYN-ACK,ACK),因爲這在通過TCP發送數據之前是必需的。

+0

謝謝傑夫,當我將身體保持在1460字節(即標題+正文)內時,此工作正常。你也可以建議我發送大小超過1460字節的數據(對於相同的響應,多個數據包)?如果大小超過了MTU,那麼幀就會下降,這很好。然而,有沒有辦法通過超過1460字節的scapy向目標系統發送HTTP響應? – prash

+0

是的,使用多個TCP段。如果我是你,我會首先計算我的HTTP響應的長度,將它除以我的MTU,它會給我必要的段數('segments_nb = len(HTTP_resp)/ MTU'),小心其餘部分該部門),然後做一個循環,發送他們與權利序列號。使用Scapy迫使您手動分段數據。 –

1

儘管Scapy沒有對HTTP Layer的本地支持,但有一個python模塊可用於擴展Scapy的功能以支持HTTP層。模塊名稱是「scapy-http」,可以在github上找到invernizzi/scapy-http

可以使用畫中畫安裝:

 sudo pip install scapy-http

這裏是從GitHub存儲庫中的示例代碼:

  
    #!/usr/bin/env python 
    try: 
     import scapy.all as scapy 
    except ImportError: 
     import scapy 

    try: 
     # This import works from the project directory 
     import scapy_http.http 
    except ImportError: 
     # If you installed this package via pip, you just need to execute this 
     from scapy.layers import http 

    packets = scapy.rdpcap('example_network_traffic.pcap') 
    for p in packets: 
     print '=' * 78 
     p.show() 

使用這個模塊,您可以生成HTTP報文,不把你自己的文本數據。

相關問題