HTTP中的Host字段

    说白了,HTTP还是TCP协议,所以发起http请求也就是建立TCP连接并发送的过程,也就是说connect-->send。

    TCP在connect的时候必须要知道对方我IP地址和监听端口。比如我们要发起对www.baidu.com的请求,那第一步就是得到www.baidu.com对应的IP地址,然后connect,进而send。

    在http1.1中新增了一个Host头,那大家有没有想过Host的作用是什么。因为在connect的时候已经指定了IP,也就是说connect后已经知道主机了,那还用Host做什么。另外需要说明的是Host是1.1中才有的,Http1.1中如果没指定Host,则返回404。

    用curl做一个实验

 

curl -I "http://220.195.19.18/app/index.php?i=4&c=entry&p=designer&pageid=1&m=ewei_shop&do=plugin" -H "host: www.hao23.net" -v

 

        可以看到,服务器返回了200,表示成功。在这里通过-H 指定了host字段,在请求头中也确实看到了有host字段,而且可以看到确实Http1.1。再ping一下host

 

ping www.hao23.net

 

         能ping通host,那也就是说host确实存在。

    再看看curl时的那个URL,在URL指定了主机ip(220.195.19.18),再看上面ping的结果,www.hao23.net的ip为119.147.253.16,这是两个ip,换句话说在一个请求中出现了两个不同的主机IP,这是怎么回事?

 

curl -I "http://220.195.19.18/app/index.php?i=4&c=entry&p=designer&pageid=1&m=ewei_shop&do=plugin" -v

 

         当不用-H指定host时,curl会自动讲host字段填充为url中的主机(域名),但最后返回的却是404。

    再换一种方法,用-H中的host替换URL中的主机。

 

curl -I "http://www.hao23.net/app/index.php?i=4&c=entry&p=designer&pageid=1&m=ewei_shop&do=plugin" -v   

 

    我们将URL中的220.195.19.18替换成了-H中的www.hao23.net,发现最后的返回是200,也就说最后真正访问的主机是www.hao23.net。为什么会这样?

    猜想一下:这里出现了两个主机,一个较明显,一个较隐蔽,而真正访问的是教隐蔽的一个,感觉有点像总分结构————可以让所有的URL一样,但Host不同,可以根据不同的Host将同一个请求定向到不同发主机,从而达到分布均衡的效果。

    事实上,Host的存在就是为了实现虚拟WEB服务器,我的理解就是实现负载均衡。

<think>好的,用户现在的问题是,如何通过过滤host字段来定位关键API在网络数据包分析中。根据用户提供的历史对话和引用内容,我需要综合之前的信息来给出答案。首先,回顾用户的上一次问题,他们询问了如何用抓包工具捕获和分析APP数据包,其中步骤4提到了定位关键API需要过滤host字段。现在用户进一步询问如何具体操作这个过滤过程,可能需要详细步骤和不同工具的使用方法。 查看用户提供的三个引用:-引用[1]提到Wireshark使用libpcap作为引擎,具有图形界面和强大的分析功能。 -引用[2]比较了Mitmproxy和Wireshark的优势,特别是Wireshark在协议分析、过滤和可视化方面的优势,以及Mitmproxy的HTTPS解密能力。-引用[3]给出了具体的过滤方案,比如使用http.request.uricontains和端口组合过滤,以及追踪TCP流的方法。用户现在的问题是如何过滤host字段定位关键API,所以需要结合这些引用来组织答案。需要覆盖不同工具(Wireshark、Fiddler、tcpdump)的具体过滤方法,可能还要提到高级技巧如正则表达式和流量统计。另外,用户之前的问题中提到了使用Wireshark的过滤示例,如http.request.method =="GET"等,现在需要扩展host过滤的语法。引用[3]中的例子是http.request.uricontains,但host过滤可能不同,比如http.host== "example.com"。还要考虑用户可能的场景,比如在大量数据包中快速找到目标API,可能需要组合过滤条件,比如host和路径的组合。此外,引用[3]提到的追踪TCP流也是一个有用的技巧,应该包含在回答中。需要确保回答结构清晰,分步骤说明不同工具的使用方法,并引用提供的引用内容来支持回答。例如,在Wireshark部分引用[1]和[2]关于其过滤和可视化功能,Mitmproxy部分引用[2]的HTTPS解密优势,tcpdump部分结合之前的adb命令。同时,用户可能需要知道如何处理加密流量,但当前问题主要聚焦于host过滤,所以可能简要提及需要先解密HTTPS,如安装证书等,但重点在过滤方法。最后,生成相关问题需要考虑用户可能遇到的后续问题,比如过滤无效、处理加密、高级过滤技巧等。</think>### 如何通过过滤host字段定位关键API? #### 一、Wireshark过滤方法 1. **基础过滤语法** ```bash http.host == "api.example.com" # 精确匹配特定域名[^2] http.host contains "example" # 模糊匹配域名片段[^3] ``` - 使用`&&`组合条件: ```bash http.host == "api.example.com" && http.request.method == "POST" ``` 2. **高级协议分析** - 在协议分层视图中展开`HTTP`层,直接查看`Host`头字段[^1] - 右击目标数据包 -> `Follow -> HTTP Stream`,观察完整会话内容[^3] 3. **统计工具辅助定位** ```bash Statistics -> HTTP -> Hosts # 查看所有Host的请求量分布[^2] ``` #### 二、Mitmproxy专用方法 ```python # 在mitmproxy控制台输入过滤命令 ~h "api.example.com" # 拦截包含该Host的流量[^2] ``` - 支持正则表达式: ```python ~h ^api.*\.example\.com$ # 匹配以api开头的子域名 ``` #### 三、命令行工具过滤(tcpdump) ```bash # 捕获特定HostHTTP请求 adb shell tcpdump -i any -A -s0 'tcp port 80 and (host api.example.com)' ``` - 添加`-w`参数保存数据包,后续用Wireshark分析[^1] #### 四、Fiddler/Charles过滤技巧 1. **Filter设置** - 在`Filters`标签页勾选`Hosts`,输入目标域名 - 支持通配符:`*.example.com` 2. **自定义脚本** ```jscript // FiddlerScript示例(修改请求前拦截) if (oSession.host == "api.example.com") { oSession["ui-color"] = "red"; // 高亮显示关键API }[^3] ``` #### 五、实战案例 **场景**:分析电商APP的订单查询API 1. 捕获流量后输入过滤条件: ```bash http.host == "mall.api.com" && http.request.uri contains "/order/detail" ``` 2. 右键选择`Export Objects -> HTTP`,导出API响应数据[^1] 3. 使用`Statistics -> Conversations`查看该API的TCP连接耗时[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值