如何在不信任域名的情况下读取 VPN 套接字
进程旁边的域名是对一个地址的猜测。在责怪 VPN 客户端之前,请先读数值端点、连接状态和持有套接字的 PID。
你的端点查看器把一个 VPN 进程列在一家广告公司的域名旁边,而这种配对开启了一个数据无法支撑的故事。那个名字是画在数值端点之上的一次反向查询,查询一变,它就会变。经得起推敲的列是地址、连接状态,以及持有该套接字的 PID。
套接字表格里没有任何东西描述连接内部经过了什么。任何带域名的东西,都已经替你先解读过了。
解析出的名字是翻译,不是字段
查看器请解析器把一个地址变成名字,方式与 DNS 里的 PTR 查询相同。答案可能来自本地缓存、hosts 文件里的条目、邻居发现公告,或者来自上周把该地址交给别人的服务商,而工具没有办法区分这些来源。两台机器观察同一条连接,可能为同一个对端地址打印出不同的名字;如果你相信名字是从线路上来的,这就很难解释。请把标签当作给人眼看的便利,而不是关于谁收到字节的陈述。
TCPView 文档描述了端点、状态和进程这几列,也记录了如何关闭已解析的名字;在从域名里读出任何含义之前,值得先这样做。关掉解析是把不确定性变得可见,而不是把它创造出来:你手里仍然是一个地址,而判断它意味着什么的工作,只是回到了你这边。
按顺序读取数值列
从左往右看,在第一个回答你问题的列停下来。本地端点显示进程绑定了什么,远端端点显示是否真的存在对端,状态显示这条关联是否还活着,而 PID 把这一行与一个可执行文件连起来。
下面三条观察是示意性的形态,而不是在这里任何机器上抓到的输出。它们按各自能支撑什么来分组,因为那才是人们真正会向一行套接字提出的问题:
| What the row shows | What it rules out | What it cannot show |
|---|---|---|
| An open listener with no peer address | Any remote party; nothing beyond this host has reached the port | Whether the local service is well configured, or who is allowed to use it |
| An association in the open state | That the entry is cosmetic; a peer address exists and was accepted | Which application data crossed it, or whether that peer is trustworthy |
| An association whose counters move | That the conversation is idle or already stale | What was requested, what came back, or who started it |
一个别的机器够不到的、绑定在回环地址上的开放监听,正是许多 VPN 客户端暴露自身控制通道的方式。通配绑定意味着进程在所有接口上都接受了连接,而这是否危险取决于主机防火墙,而不是这一行本身。只有真实存在并带着计数器的那种关联,才像人们通常想提出的指控;即便是那一行,也在载荷之前就停住了。
在点名之前先核实归属
进程身份正是大多数指控真正失败的地方。PID 会被复用,更新程序和浏览器辅助进程会生出短命的子进程,而 VPN 客户端可能把自己的流量交给一个有特权的系统服务。请比较可执行文件的路径和父进程,而不是显示名称,因为显示名称是由构建该二进制的人挑选的。
tcpvcon -n -a
Get-Process -Id 4188 | Select-Object Id, ProcessName, Path
同样的读法在 Linux 上也存在:当你有足够权限查看其他用户的套接字时,套接字统计可以带上进程信息。查询绑定到或来自 443 端口的已建立套接字,可以把输出收窄到真正重要的那些行:
ss -tunp state established '( sport = :443 or dport = :443 )'
把时间戳和这一行一起记下来。单独的 PID 是一个会移动的参照物,因为等你打开进程管理器时,套接字可能已经属于后继进程,而你查看的路径也可能并不是当初持有连接的那个。把端点对、状态和 PID 记成同一条观察,这样结论才能经得起重启或第二意见。
名字还有什么价值
域名并非毫无价值的证据。它记录了有人在某个时刻把那个地址和那个名字关联过。当该地址属于一家服务成千上万互不相关客户的服务商时,这种关联值得注意。它比目的地更弱,而这也是标签唯一能支撑的主张。
当名字看起来不对时,把地址与服务商公布的范围对照一下,然后问那一刻进程在做什么:检查更新、调用许可证、发送遥测,还是做隧道握手。这些活动留下的连接形态各不相同,把形态与时刻对上,比把名字与你怀疑的公司对上更有信息量。
在终止一个共用辅助程序或卸载任何东西之前,先把这一行保存下来。站得住的结论只覆盖一个被观察到的端点、它的状态和它的所有者;建立在已解析标签之上的全品牌判决不是证据,而「熟悉的下载主机一定无害」这种安慰同样不是证据。