【发布时间】:2021-09-18 14:31:37
【问题描述】:
我正在使用 Curl 实用程序向 www.google.com 发送 HTTP/2 请求,并且服务器正在合法响应。在此之后,我使用 tcpdump 捕获请求数据包(数据包使用 PolarProxy 解密)。然后我的 python 脚本(tls 包装器)使用 scapy 读取这些请求数据包的有效负载,然后使用 tls 包装器将其发送到www.google.com(参见下面的代码)。但是,尽管我正在重播使用 curl 发送的完全相同的请求,但 Google 正在返回 400 Bad request 错误。此方法适用于某些网站(twitter、天猫等),但不适用于 google、youtube 等网站。以下是在curl_wwwgoogle.pcap 文件中捕获的 HTTP/2 请求数据包的屏幕截图。
我的python脚本是:
import socket
import ssl
import requests
from scapy.all import *
from hpack import Encoder, Decoder
p=rdpcap('curl_wwwgoogle.pcap')
HOST, PORT = 'www.google.com', 443
payload=p[3][Raw].load+p[4][Raw].load+p[5][Raw].load+p[6][Raw].load
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
wrappedSocket = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_TLS)
try:
wrappedSocket.connect((HOST, PORT))
wrappedSocket.send(payload)
response = wrappedSocket.recv(1280)
http_response = repr(response)
http_response_len = len(http_response)
except:
print("Connection error")
print(http_response)
wrappedSocket.close()
【问题讨论】:
标签: python ssl web scapy http2