你打开客户端的日志,满屏都是以 EOF 结尾的报错,网页一个也打不开,或者打开一半就停住。EOF 是 end of file 的缩写,Go 标准库用它表示“读到头了,没有更多数据”。代理内核在等节点回数据时读到了 EOF,意思是对面已经把连接关了,可该来的数据还没来。谁关的、为什么关,从这一行看不出来,所以处理时按一个固定顺序排除,先做花几分钟就能确认的,再做需要等或者需要换的。
梯子EOF的六步处理顺序
下面这张表是本站排的顺序,排序依据是每一步要花的时间和对别的设置的影响。前四步都在你自己的设备上做,后两步才涉及节点和机场。
| 步骤 | 做什么 | 看到什么算解决 | 没解决就 |
|---|---|---|---|
| 1 | 让系统重新对时,再拿手机上的时间比一遍 | 同步后再测,日志不再出现 EOF | 进第 2 步 |
| 2 | 在客户端里手动更新订阅 | 节点列表有变化,换上新节点后能打开网页 | 进第 3 步 |
| 3 | 核对客户端内核支不支持订阅里的协议 | 换内核或升级后,原先报错的节点能用 | 进第 4 步 |
| 4 | 核对系统代理和浏览器里填的本地端口 | 端口和客户端设置页一致后能打开网页 | 进第 5 步 |
| 5 | 在列表里挑一个别的地区的节点再试 | 换后正常,原节点单独有问题 | 进第 6 步 |
| 6 | 去机场面板看公告,再看本站跑路预警页的记录 | 面板有维护通知,或检测记录显示官网连续无法访问 | 等通知或换一家 |
第一步先校时间
时间放在第一步,因为改一次只要一分钟,又常常被忽略。VMess 协议把时间当作身份校验的一部分,V2Fly 的 VMess 文档写明,客户端和服务端的 UTC 时间误差要在 90 秒以内。超出这个范围,服务端认不出你的请求,会直接断开,客户端这边读到的就是 EOF。
打开系统的日期和时间设置,把自动设置时间关掉再打开,让它重新同步一次。再拿手机上的时间对照,分钟数要一致。时区选错也会让 UTC 时间偏出去,时区一栏同样要看。改完回到客户端,重新测一次延迟,再打开网页。
订阅里全是 Trojan、VLESS 这类协议的节点,时间不是它们校验的一部分,这一步做完没变化很正常,直接往下走。
再核对协议与端口
时间对了还报 EOF,下一步看客户端和节点在“说同一种话”没有。三个地方要核对。
第一处,订阅内容是不是旧的。机场换过节点的端口或者协议,你的客户端还拿着旧配置,连过去对不上,节点会直接关掉连接。手动更新一次订阅,列表里的节点名或数量有变化,就是之前的配置过期了。
第二处,内核支不支持订阅里的协议。本站在 Clash Verge Rev 教程里记下,1.x 自带的 Premium 内核(截图里版本显示 2023.08.17)不支持 VLESS 和 Hysteria2,2.x 起只带 mihomo 内核。订阅里这几种协议的节点在旧内核上会连不上,报错可能是 EOF,也可能是别的。升级到 2.x,或者在设置里把内核换成 mihomo。
第三处,本地端口有没有填错。系统代理和浏览器插件要指向客户端在本机开的端口。本站在 Windows 上走 Clash Verge 教程时,设置页的端口显示 7897;NekoRay 3.26 的状态栏则把 Socks 2080 和 HTTP 2081 分开列出。把 HTTP 代理指到只收 Socks 的端口,或者反过来,两边对不上,连接会被关掉。打开客户端的设置页抄下端口号,去系统代理设置里逐字核对,类型也要对上。
最后才换节点、看机场
前四步都做完,日志里还是 EOF,就轮到节点。节点所在的服务器被重置或者被干扰时,连接会在半路被切断,日志里 EOF 和 connection reset 常常一起出现。原来用日本节点的改选新加坡或美国,换了就好,说明问题只在那一个节点,等机场修复或者以后避开它。
换了好几个地区都一样,去机场面板看公告,有维护通知就等通知里写的时间。面板也打不开,去 机场跑路预警 找这家,本站的程序定时访问各家官网,历次结果都排在那一页,多久访问一次、上次是什么时候,页面顶部的状态区写着。检测点在海外,那组记录反映不出国内网络访问时的情况。
什么时候这个答案不成立
- 报错是 timeout,没有 EOF。等待超时和连接被关掉是两类问题,顺序不一样,看下面第一个链接。
- 90 秒这个数字只适用于 VMess。Shadowsocks、Trojan、VLESS 对时间的要求以各自的协议文档为准。
- 闭源客户端。Shadowrocket、Quantumult X、Surge 的日志里报错怎么写本站没有核对,文中的报错写法取自 mihomo 这类 Go 语言内核。
- 端口号和内核版本。7897、2080、2081 这几个数是本站教程截图里的值,你改过设置或者用的是其他版本,以客户端设置页为准。内核支持哪些协议也会随版本变,以你手里那个版本的发布说明为准。
- 公司、学校或路由器上的网络。中间设备主动断开连接也会让客户端读到 EOF,这类环境本站没有走过。
接下来去哪
- 日志里写的是 timeout,想先弄清卡在哪一段,看 梯子timeout是什么意思。
- 所有节点都连不上,报错五花八门,按 梯子全部节点超时怎么办 从订阅到期日查起。
- 第三步发现内核太旧,想换一个还在更新的客户端,去 梯子客户端 按系统挑。
延伸问题
正文没展开、但和这个问题挨着的几条。点问题展开答案。
EOF 和 unexpected EOF 有什么不同
Go 标准库里 EOF 表示正常读到了结尾,unexpected EOF 表示数据读到一半连接就断了。在代理客户端的日志里两者处理顺序相同,后者更常见于传输中途被断开,按本文从校时间开始查就行。
只有某一个网站报 EOF 怎么办
其他网站都正常、只有一个网站报 EOF,问题多半在节点到那个网站这一段。换一个地区的节点再打开这个网站,换了能开就不用动本机设置。所有节点都打不开,看那个网站本身能不能访问。
参考
相关问答
- 梯子timeout是什么意思:连接、读取、测速三种超时各在哪一段梯子timeout的意思是客户端等回应等过了上限,主动放弃了这一次请求。
- 梯子全部节点超时怎么办:先查订阅是否过期,再查本机梯子全部节点超时,先回机场面板看订阅是否过了到期日、流量条是否见底,多数情况出在这两项。