python - 如何创建 HTTP GET 请求 Scapy?

标签 python http get scapy

我需要创建 HTTP GET 请求并保存数据响应。 我试着用这个:

    syn = IP(dst=URL) / TCP(dport=80, flags='S')
    syn_ack = sr1(syn)
    getStr = 'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n'
    request = IP(dst='www.google.com') / TCP(dport=80, sport=syn_ack[TCP].dport,
            seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1, flags='A') / getStr
    reply = sr1(request)
    print reply.show()

但是当我打印 reply 时,我没有看到任何数据响应。 此外,当我检查“Wireshark”时,我收到了 SYN、SYN/ACK,但没有收到 ACK。

图片: The problem

编辑:

我现在尝试这样做:

# Import scapy
from scapy.all import *

# Print info header
print "[*] ACK-GET example -- Thijs 'Thice' Bosschert, 06-06-2011"

# Prepare GET statement
get='GET / HTTP/1.0\n\n'

# Set up target IP
ip=IP(dst="www.google.com")

# Generate random source port number
port=RandNum(1024,65535)

# Create SYN packet
SYN=ip/TCP(sport=port, dport=80, flags="S", seq=42)

# Send SYN and receive SYN,ACK
print "\n[*] Sending SYN packet"
SYNACK=sr1(SYN)

# Create ACK with GET request
ACK=ip/TCP(sport=SYNACK.dport, dport=80, flags="A", seq=SYNACK.ack, ack=SYNACK.seq + 1) / get

# SEND our ACK-GET request
print "\n[*] Sending ACK-GET packet"
reply,error=sr(ACK)

# print reply from server
print "\n[*] Reply from server:"
print reply.show()

print '\n[*] Done!'

但是它打印我作为服务器的回复;

0000 IP / TCP 192.168.44.130:23181 > 216.58.208.164:http A / Raw ==> IP / TCP 216.58.208.164:http > 192.168.44.130:23181 A / Padding None

我需要基于行的文本数据:text/html。

最佳答案

您正在发送一个 RST 段以响应 SYN-ACK,因为您的内核不知道您通过 Scapy 发送的 SYN(参见 here)。这可以通过 iptable 规则解决:

iptables -A OUTPUT -p tcp --tcp-flags RST RST -s <your ip> -j DROP

因为您要结束与该 RST 段的连接,所以当您发送 HTTP 请求时,端点也会使用 RST 进行应答,因为连接未建立,因此您正在使用 show()在没有数据的 RST 段上,这就是您看不到任何东西的原因。

关于python - 如何创建 HTTP GET 请求 Scapy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683026/

相关文章:

ruby-on-rails - 使用 Ruby Controller 读取 Instagram JSON 并使用 HTTParty gem 传递到 View

php - 在 URL 中传递 base64 编码的字符串

python - python 3.6 中不支持的操作数类型

python - 如何确定页面是否被重定向

python - 如何使用 "for"语句引用 Python 中具有相似名称的多个脚本?

http - 反向代理背后的 WebDAV

javascript - 使 AJAX "get"功能同步/如何获得结果?

c# - 在 C# 中定义集合访问器时如何避免堆栈溢出错误

Python Scikit - LinearRegression 和 Ridge 返回不同的结果

python - 使用 df.dropna() 返回 NoneType 对象