是否可以通过scapy创建HTTP响应

时间:2016-06-13 09:13:24

标签: python http tcp scapy

我想通过scapy将HTTP响应发送到目标系统。我知道scapy使用分层实现来创建像IP / TCP / ETHER这样的数据包。要发送一个简单的TCP数据包,我们可以使用以下scapy脚本。

#!/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响应数据包时,我尝试了很多方法。

3 个答案:

答案 0 :(得分:2)

Scapy没有本机HTTP层解析器,但是,您可以轻松发送HTTP请求/响应,因为它是一个文本协议:

Execute

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 是先前进行的3次握手(SYN,SYN-ACK,ACK)的第三段,因为在通过TCP发送数据之前这是必要的。

答案 1 :(得分:1)

虽然,Scapy没有对HTTP Layer的原生支持,但有一个python模块可用于扩展Scapy的功能以支持HTTP层。模块名称为“scapy-http”,可以在invernizzi/scapy-http的github上找到。

您可以使用pip安装它:

    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数据包而无需发送自己的文本数据。

答案 2 :(得分:0)

正如Jeff Bencteux的回答所提到的,http层现在可以在scapy上使用。可以很容易地做到这一点,这是一个示例:

>>>import scapy.all as S

>>>S.load_layer("http") # without this, http might not be loaded as default
>>> pkg = S.IP() / S.TCP() / HTTP() / HTTPResponse(Server="exampleServer") / "<html></html>"

最后一行末尾的字符串是原始数据。回声pkg,您将得到:

>>> pkg
<IP  frag=0 proto=tcp |<TCP  sport=http dport=http |<HTTP  |<HTTPResponse  Server='exampleServer' |<Raw  load='<html></html>' |>>>>>

您应该read the doc ,并可能嗅探一些http响应以了解您需要修改哪些字段

相关问题