2016-06-13 180 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报文,不把你自己的文本数据。

相关问题