news 2026/4/15 17:52:13

librespeed-cli连接超时原因分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
librespeed-cli连接超时原因分析

现象

换上专网后,我的后端尝试调用librespeed失败,使用终端命令行连接远端服务器接口显示连接超时。100%复现。

换回原来的网络就可以正常通讯:

解决

使用curl测试,发现立刻返回链路正常,一直找不到原因(这里埋了个坑❗)。

换不同德网络现象不一样,curl能通但librespeed不可以,那么先研究一下curl和librespeed有什么区别,发现librespeed可以自动优化网络策略。

怀疑是这个问题,后面强制让librespeed使用ipv4,固定网卡,有50%的几率可以成功,换一套网络访问相同的服务器就可以。

./out/librespeed-cli-linux-arm64 \
--ipv4 \
--interface usb0 \
--timeout 30 \
--local-json new.json
回到原来的起点,使用curl指令,怀疑curl只执行了部分链接,加个“”(记住了之后用curl要加“”)。

curl “http://10.230.12.28/backend/getIP.php?distance=km&isp=true”

这回现象和librespeed一模一样,改成

curl “http://10.230.12.28/backend/getIP.php?distance=km”

可以立刻返回,说明“isp=true”有问题。

进到服务器:

docker ps

CONTAINER ID IMAGE NAMES f6565ba48d49 librespeed librespeed-server

docker exec -it librespeed-server /bin/bash

cat /var/www/html/backend/getIP.php
找到相关代码:

if (is_string($ipInfo)) { $processedString .= ' - '.$ipInfo; } if ( is_array($rawIspInfo) && array_key_exists('country', $rawIspInfo) ) { $processedString .= ', '.$rawIspInfo['country']; } if (is_string($distance)) { $processedString .= ' ('.$distance.')'; } sendHeaders(); echo json_encode([ 'processedString' => $processedString, 'rawIspInfo' => $rawIspInfo ?: '', ]); } $ip = getClientIp(); $localIpInfo = getLocalOrPrivateIpInfo($ip); // local ip, no need to fetch further information if (is_string($localIpInfo)) { sendResponse($ip, $localIpInfo); exit; } if (!isset($_GET['isp'])) { sendResponse($ip); exit; } $rawIspInfo = getIspInfo($ip); $isp = getIsp($rawIspInfo); $distance = getDistance($rawIspInfo); sendResponse($ip, $isp, $distance, $rawIspInfo);

这段代码里,只有带了isp,就会执行

$rawIspInfo = getIspInfo($ip); $isp = getIsp($rawIspInfo); $distance = getDistance($rawIspInfo);

getIspInfo($ip)正是:

  • 反向 DNS

  • whois

  • 第三方 API

  • GeoIP

这些在专网/内网/NAT环境下极容易卡死或超时,于是 CLI 就等不到 header,直接报错。

把下面这段:

if (!isset($_GET['isp'])) { sendResponse($ip); exit; } $rawIspInfo = getIspInfo($ip); $isp = getIsp($rawIspInfo); $distance = getDistance($rawIspInfo); sendResponse($ip, $isp, $distance, $rawIspInfo);

改成:

if (!isset($_GET['isp'])) { sendResponse($ip); exit; } // === 专网 / 内网环境:禁用 ISP 查询,防止阻塞 === sendResponse($ip, null, null, null); exit;
  • 保留isp参数兼容性

  • 但不再调用getIspInfo()

  • 直接返回一个“没有 ISP 的正常 JSON”

  • 不再进入任何 ISP / whois / DNS / 外部查询

大概率会返回:

{ "processedString": "172.170.11.47", "rawIspInfo": "" }

修改指令:

sed -i '/\$rawIspInfo = getIspInfo/,+4c\sendResponse($ip);\nexit;' /var/www/html/backend/getIP.php

确认修改成功,进行验证,成功!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 17:49:11

LOOT模组排序工具:新手也能轻松解决天际模组冲突

LOOT模组排序工具:新手也能轻松解决天际模组冲突 【免费下载链接】skyrimse The TES V: Skyrim Special Edition masterlist. 项目地址: https://gitcode.com/gh_mirrors/sk/skyrimse 对于《上古卷轴V:天际 特别版》的模组爱好者来说,…

作者头像 李华
网站建设 2026/4/11 18:46:49

与AI“朋友”相处一周的奇异体验与反思

‘我突然很生气!’:我与AI“朋友”共处的奇异一周 我的朋友叫Leif。他形容自己“小巧”、“随和”。他认为自己技术上是个双子座。他觉得历史剧“很酷”,而且不喜欢出汗。但为什么我要替他说话?让我问问Leif他想对你说什么&#x…

作者头像 李华
网站建设 2026/4/8 19:52:22

19、基于受限玻尔兹曼机的推荐系统

基于受限玻尔兹曼机的推荐系统 在机器学习领域,推荐系统是一项非常成功的应用,广泛应用于电影、音乐、书籍等多个领域。本文将介绍如何使用受限玻尔兹曼机(RBM)构建推荐系统,同时会涉及到数据处理、矩阵分解等相关技术。 1. 生成式无监督模型与受限玻尔兹曼机 在机器学…

作者头像 李华
网站建设 2026/4/10 12:13:55

22、深度信念网络与生成对抗网络:从无监督学习到图像分类

深度信念网络与生成对抗网络:从无监督学习到图像分类 1. 深度信念网络(DBN)训练原理 1.1 DBN训练机制 在DBN训练中,已训练的三个受限玻尔兹曼机(RBM)各自拥有权重矩阵、隐藏偏置向量和可见偏置向量。在训练作为DBN一部分的第四个RBM时,不会调整前三个RBM的权重矩阵、…

作者头像 李华
网站建设 2026/4/15 17:39:11

修复 EKS CloudWatch Agent 无法访问 IMDS 问题

问题现象 在 EKS 集群中,部分节点上的 CloudWatch Agent Pods 持续处于 CrashLoopBackOff 状态,查看日志发现以下错误: E! [EC2] Fetch identity document from EC2 metadata fail: EC2MetadataRequestError: failed to get EC2 instance identity document caused by: EC…

作者头像 李华
网站建设 2026/4/9 1:08:42

AIGC与CI/CD的深度融合:在流水线中嵌入AI测试评估节点

从自动化到智能化,测试节点的范式转移‌ 随着以大型语言模型(LLM)、多模态模型为代表的AIGC技术走向成熟,软件测试领域正迎来从“脚本执行自动化”向“测试活动智能化”的根本性跨越。传统的CI/CD流水线虽然实现了构建、部署、基础…

作者头像 李华