我正在尝试使用scapy嗅探出站的HTTP数据包,在其中添加一些新的HTTP标头,然后将其发送出去。这里的目的是仅插入新的报头,同时保持数据包完好无损。如果需要,最大应进行任何校验和重新计算。
已经解决了关于SO的几乎所有问题,但并未完全找到解决方案。
以下是我所做的。
def parse(pkt):
if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
pkt = pkt / "New Header:value\r\n\r\n"
# OR i tried this
#pkt = pkt.getlayer(Raw).load / Raw.load(load="New Header:value\r\n\r\n")
#pkt.getlayer(Raw).load("New Header:value\r\n\r\n")
pkt.show()
#del pkt[IP].chksum
send(pkt)
#end parse function
# start sniffing
a=sniff(filter="tcp and ( port 80 )", prn=parse)
问题在于上面的代码将插入一个新的原始有效负载部分,而不是添加一个普通的标头。已经有双换行符\ r \ n \ r \ n来指示根据HTTP标准的标头终止。
为了克服这个问题,我尝试通过执行以下操作删除最后一个\ r \ n
#pkt = pkt.getlayer(Raw).load[-2:] / Raw.load(load="New Header:value\r\n\r\n")
但这会剥离所有先前存在的标头,仅保留“新标头”。
我已经在Linux Mint上尝试过了。
更新:我正在尝试创建一个新的http负载,其中将包含以前的标头,我将添加一些。 有人可以帮忙删除现有图层吗
如果我理解正确,那么您遇到的问题是您想使用新的标头更新现有的HTTP请求。您想要的是就地更新一个字符串,Python无法直接这样做(字符串是不可变的)。
因此,您应该采取的是HTTP标头:
old_hdr = pkt[Raw]
要么 old_hdr = pkt[TCP].payload
并像字符串一样操作它:
new_hdr = 'New Header: value'
hdr = old_hdr.split('\r\n') # This is a crappy hack. Parsing HTTP headers
hdr.insert(new_hdr, 2) # is a [solved problem][1].
send_hdr = '\r\n'.join(hdr)
pkt[TCP].payload = send_hdr
如果发现校验和没有更新,请在发送数据包之前将其删除:
del pkt[TCP].chksum
Scapy会以正确的价格将它们放回给您。
编辑:我只是注意到我的链接失败。这是解析HTTP标头的方法。
问题内容: 我已经开发了一个Restfull应用程序,我想添加另一个Web应用程序来使用其服务,因此我进行了以下Ajax调用: 我得到这个例外: 对象{readyState:0,状态:0,statusText:“ SyntaxError:无法执行’setRequestHeader’…-Origin: ‘不是有效的HTTP标头字段名称。”}错误DOMException:无法在’XMLHttpRequ
问题内容: 这是我的第一篇文章。 我刚刚开始学习Go和Angular,并且尝试将angular应用程序连接到go api。我已经写了这两本书,并且一直坚持找出问题的根源。我以为这是一个CORS问题,但是如果我在Angular http请求中不包含代码的标题行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,端口5000上的Go应用程序和4200端口上
我有一个Spring Boot应用程序,它依赖于spring-cloud-starter-sleuth-3.0.3和spring-cloud-sleuth-zipkin-3.0.3。 我需要在从webclient调用API时将跟踪id传递给请求头。 示踪剂。currentSpan()为null,因此引发NPE。 根据文档,给出了将跟踪id添加到响应头的方法https://docs.spring.i
问题内容: 我有一个角度应用程序,需要将其重定向到外部非角度html页面,所以我认为我可以使用将该角度应用程序重定向到我的外部站点。这实际上工作正常,但是,我有一个nodejs / express后端,在提供任何内容(甚至静态内容)之前检查auth令牌。 这要求在http请求的标头中发送身份验证令牌。现在的问题是: 可以/如何在发送前更改更改后的请求中添加身份验证令牌? 问题答案: 使用浏览器时,
我试图使用HttpClient将“Accept Encoding”参数添加到我的HTTP头中,如“gzip,deflate”。代码如下所示。但是,我在响应中遇到以下错误,无法添加header参数。响应不包含添加的标题字段 错误:内部服务器错误
我有以下代码: 但我得到了这个错误:导致:org.springframework.web.client.RestClientExcture:无法提取响应:没有合适的HttpMessageConzer找到响应类型[类com.xxx.test.YY]和内容类型[应用程序/xml; charset=ISO-8859-1] 如何添加MediaType。应用程序将JSON添加到标头,并将标头添加到restT