Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何重新排序HTTP头?_Linux_Nginx_Http Headers_Mitmproxy - Fatal编程技术网

Linux 如何重新排序HTTP头?

Linux 如何重新排序HTTP头?,linux,nginx,http-headers,mitmproxy,Linux,Nginx,Http Headers,Mitmproxy,我想知道在返回web服务器之前,是否有办法对浏览器发送的HTTP头重新排序 由于标题的顺序留下了某种“指纹”,请参见和,我正在考虑使用MITMProxy(我想是使用内联脚本)动态修改标题。这可能吗 如何做到这一点? 注意:我正在寻找一个可以编写脚本的方法,而不是使用像Burp套件这样的图形工具的方法(尽管已知Burp能够重新排序标题) 我愿意接受建议。也许NGINX也会来帮忙 编辑:我应该更具体一点,举个例子 假设我使用的是Firefox。通过使用一个时髦的附加组件,我正在欺骗我的用户代理,使其

我想知道在返回web服务器之前,是否有办法对浏览器发送的HTTP头重新排序

由于标题的顺序留下了某种“指纹”,请参见和,我正在考虑使用MITMProxy(我想是使用内联脚本)动态修改标题。这可能吗

如何做到这一点?
注意:我正在寻找一个可以编写脚本的方法,而不是使用像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”行?