如图,似乎设置的 Host 并没有生效,想问问各位大佬问题出在哪里?
1
ch2 2021-05-16 22:27:57 +08:00
host 是由你的 url 决定的,你自己覆盖无效
|
2
chenyu0x00 2021-05-17 00:43:24 +08:00
@ch2 我测试没有问题,可以使用 headers 覆盖 Host
|
3
chenyu0x00 2021-05-17 00:45:55 +08:00
我把 IP 地址换成 182.61.200.7,楼主的代码就能正常访问了。
|
4
chenyu0x00 2021-05-17 00:49:04 +08:00
我好像不能放图,代码基本上是这样的:
``` r = requests.get('http://182.61.200.7', headers={'Host': 'www.baidu.com'}) r.encoding = 'utf-8' print(r.text) ``` 我用 wireshark 抓包,发送的 HTTP 请求中的 Host 字段被正确修改为了 www.baidu.com 。 我的测试环境是 Ubuntu,Python 3.6.9 。 |
5
LeeReamond 2021-05-17 03:13:49 +08:00
同,win 平台测试下返回值是正常的百度首页。不过原理上来说,如果你期望以指定 IP 来获得不同的路由,那么封包和直接发送肯定有某种区别,记得以前看过一些引擎开发的说法是(在讨论 host 序列化攻击时),引擎要识别目标访问的 host 实际是一件困难的事,意指其不可靠性,所以如果对方没有按照你期望的方法识别,不识别也是正常的。我手头没有抓包工具,具体封包区别还请楼上老哥解惑了
|
6
keyword233 OP 谢谢各位,同样的代码换了台电脑解决了,似乎只有这台电脑遇到了这个问题 :(
@ch2 在其他设备上测试过,这是的确是有效的。 @chenyu0x00 谢谢实践!这俩都是百度的 ip,应该没有区别;问题主要在于 Host 字段不能正确被重写。(但是 headers 指定的其它参数又是正常的,有点迷) @LeeReamond 虽然没有明白你在说什么...不过还是谢谢了! |