Linux 如何重新排序HTTP头?
我想知道在返回web服务器之前,是否有办法对浏览器发送的HTTP头重新排序 由于标题的顺序留下了某种“指纹”,请参见和,我正在考虑使用MITMProxy(我想是使用内联脚本)动态修改标题。这可能吗 如何做到这一点?Linux 如何重新排序HTTP头?,linux,nginx,http-headers,mitmproxy,Linux,Nginx,Http Headers,Mitmproxy,我想知道在返回web服务器之前,是否有办法对浏览器发送的HTTP头重新排序 由于标题的顺序留下了某种“指纹”,请参见和,我正在考虑使用MITMProxy(我想是使用内联脚本)动态修改标题。这可能吗 如何做到这一点? 注意:我正在寻找一个可以编写脚本的方法,而不是使用像Burp套件这样的图形工具的方法(尽管已知Burp能够重新排序标题) 我愿意接受建议。也许NGINX也会来帮忙 编辑:我应该更具体一点,举个例子 假设我使用的是Firefox。通过使用一个时髦的附加组件,我正在欺骗我的用户代理,使其
注意:我正在寻找一个可以编写脚本的方法,而不是使用像Burp套件这样的图形工具的方法(尽管已知Burp能够重新排序标题) 我愿意接受建议。也许NGINX也会来帮忙 编辑:我应该更具体一点,举个例子 假设我使用的是Firefox。通过使用一个时髦的附加组件,我正在欺骗我的用户代理,使其“看起来”像一个Chrome浏览器。但是如果我测试我的浏览器,我的浏览器的“签名”仍然是Firefox的签名,即使我伪造的用户代理显示“Chrome” 因此,在这种特定情况下,解决方案应该是以与Chrome相同的方式重新排列HTTP头
如何做到这一点?根据记录,HTTP头的顺序应该根本不重要。但是现在你已经问了。。。这可以在mitmproxy中完成,如下所示:
import random
def request(context, flow):
# flow.request.headers.fields is a tuple of (name, value) header tuples.
h = list(flow.request.headers.fields)
random.shuffle(h)
flow.request.headers.fields = tuple(h)
有关更多详细信息,请参阅上的mitmproxy文档
有很多方法可以按照您的意愿对其重新排序:
def reorder(headers, header_order=["Host","User-Agent","Accept"]):
lines = []
for name in header_order: # add existing headers in the specified order
if name in headers:
lines.extend(headers.get_all(name))
del headers[name]
lines.extend(headers.fields) # all other headers
return lines
request.headers.fields = reorder(request.headers)
谢谢你!但是我已经将我的问题编辑得更具体了(如果我想按我想要的顺序排列标题,怎么办?)我想这可能是一个好的开始?
标题。字段
只是标题列表,因为它们将通过网络发送,您可以根据需要重新排列它们。我在上面添加了一个小例子。谢谢Maximilian,我将在本周末试用你的代码。您认为我可以将您的脚本按原样保存(显然是在添加了更多的头之后)到.py文件中,然后它就可以“加载”到MITMproxy了吗?还需要什么吗?(我这样说是因为,我是一个十足的傻瓜,当涉及到Python时)namererror:name'request'没有定义
:这是我在尝试加载这个小脚本时收到的错误消息。也许我们遗漏了什么?我正在使用Python 3.5.1,非常感谢您的帮助。。。我应该在脚本的开头添加导入行还是“from”行?