You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket握手Host头与目标不一致及Linear应用复现问题排查

问题描述

我正在拦截名为Linear的车库门开启应用(iOS/Android)的WebSocket流量,从域名(trafficmanager.net、cloudapp.net等)推测其使用Azure服务。该应用升级WebSocket的初始HTTP请求发送至https://linr-cs-tm-prod.trafficmanager.net:8080,但Host头为11323322-00AC-55F0-C09E-A903E123A25C。

我尝试用以下Python代码复现该请求时出现TimeoutError:

SERVICE_URL = "ws://linr-cs-tm-prod.trafficmanager.net:8080/Message.svc"
class Linear:
    """Class used for a Linear account."""

    message_id = 0

    async def login(self: Linear, email: str, password: str):
        """Login to a linear account."""
        async with websockets.connect(
            SERVICE_URL,
            origin="LinAccess-Android/1.3.16",
            open_timeout=30,
        ) as websocket:
            print("connected!")

    async def get_sites():
        """Get sites available under this account."""

我已尝试提取CA证书作为SSL上下文、移除Host头、关闭SSL、将ws改为wss等操作,现咨询三个问题:

  • 应设置什么Host值?
  • 为何如此设置Host?
  • 该ID是Burp的产物还是Azure的要求?
解决方案与解释

1. 应设置的Host值

直接使用你拦截到的UUID 11323322-00AC-55F0-C09E-A903E123A25C 作为Host头的值,同时要把代码里的ws://改为wss://(因为原请求基于HTTPS,对应加密WebSocket协议)。修改后的连接代码示例:

async with websockets.connect(
    "wss://linr-cs-tm-prod.trafficmanager.net:8080/Message.svc",
    origin="LinAccess-Android/1.3.16",
    open_timeout=30,
    extra_headers={"Host": "11323322-00AC-55F0-C09E-A903E123A25C"}
) as websocket:

2. 为何要这么设置Host

这是Azure Traffic Manager的路由规则要求。Traffic Manager作为Azure的流量负载均衡服务,需要通过请求的Host头识别要转发到的后端服务实例。这个UUID是Linear绑定的后端服务(比如Azure App Service)的内部标识或自定义路由标识,只有携带这个Host头,Traffic Manager才能将请求正确路由到Linear的实际WebSocket服务节点,否则会因找不到目标服务导致超时。

3. 该ID的来源

这个UUID不是Burp的产物,是Azure服务架构的要求。Burp只是捕获到了Linear应用与Azure通信时必须携带的Host头值——这个值是Linear应用预设的,用于让Azure Traffic Manager完成正确的流量路由。

内容的提问来源于stack exchange,提问作者IceBotYT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:15:32