Blog

  • jichangtuijian

    2025 翻墙机场推荐

    2025 年流行的翻墙机场推荐,机场梯子适合已经翻墙很久,掌握了一些翻墙知识的同学。机场一般采用专用的翻墙协议,如 Shadowsocks、ShadowsocksR、V2ray(Vmess)、Trojan 等, 适配于 Clash、Shadowrocket、Quantumult X、Stash、Surge、V2rayN、Surfboard 等多种客户端。翻墙机场不是VPN,但胜过VPN。Clash 翻墙机场推荐
    翻墙机场不同于一键VPN,采用针对GFW开发的翻墙协议,在速度和稳定性方面表现十分优异。需要注册账号购买订阅并搭配第三方软件使用,下面是各常用平台翻墙软件安装地址。 注意:你个人的订阅链接中包含连接信息,等同于账号密码,切记不要泄露。若发现自己的订阅套餐流量异常,请即时前往机场网站重置订阅链接。

    2025 好用的翻墙机场 – SS/SSR/V2ray/Trojan 协议梯子

    ClashSub 博客精选了好用的翻墙机场梯子,支持 Clash、Shadowrocket、Quantumult X、Stash、Surge、V2ray 等多种流行客户端。排名不分先后顺序。建议翻墙者购买月付套餐,满意之后再决定购买更长时间套餐,另外,一定要有备用的翻墙梯子,避免完全失联。 WgetCloud 机场官网

    1.WgetCloud 全球加速 – 2025 稳定翻墙机场首选

    WgetCloud (原 GaCloud) 是一家主打稳定翻墙的机场服务商,采用国内优质服务器接入,亚马逊 Global Accelerator 专线加速。WgetCloud 由海外团队运作,除了支持常见的 Shadowsocks 协议外,也支持 V2ray、SSR 和 Trojan 协议,套餐价格相对偏贵,属于高端翻墙机场,适合追求极致稳定的翻墙用户,如外贸工作、开发人员使用。支持定制套餐,重度翻墙用户或团队用户可在官网「增值服务」中进行流量和设备数量自定义套餐。套餐定制也支持流量包和限时1年时长的按量付费套餐。
    套餐价格:

    • 基础专线:月付:¥59/月,140G流量/月。季付:¥162/季,200G流量/月。年付:¥588/年,240G流量/月。
    • 优质专线:月付:¥69/月,160G流量/月。季付:¥195/季,220G流量/月。年付:¥708/年,280G流量/月。
    • 精品专线:月付:¥79/月,180G流量/月。季付:¥228/季,240G流量/月。年付:¥828/年,320G流量/月。

    WgetCloud 机场官网WgetCloud 全球加速怎么样?

    悠兔机场官网

    2.悠兔机场

    • Shadowsocks 机场
    • IPLC专线翻墙机场

    悠兔机场创立于 2022 年 8 月,机场主身处海外,Shadowsocks 协议节点,国内有多个入口并做了负载,过境线路有公网隧道和 IPLC 专线。悠兔机场注册可免费试用,新用户还可使用8折优惠券:888
    套餐价格:

    • 基础套餐:¥20/月,100G流量。
    • 进阶套餐:¥30/月,200G流量。
    • 高级套餐:¥50/月,500G流量。
    • 至尊套餐:¥100/月,1000G流量。

    悠兔机场官网悠兔机场怎么样?

    SSRDOG 机场官网

    3.SSRDOG 机场 – 2025 稳定专线机场

    • V2ray 翻墙机场
    • IPLC/IEPL 专线机场
    • 9折优惠码:999

    SSRDOG 是一家运营始于2022年的翻墙机场,采用V2ray安全协议,线路有 IEPL 和 IPLC 专线,对 Netflix、Disney+ 流媒体解锁支持度也很好。SSRDOG 机场有定制的一键翻墙VPN客户端,支持安卓、Mac 和 Windows 。iOS 用户推荐使用 Clash for iOS – Stash 代理软件。SSRDOG 机场注册可免费试用,除了常规包月套餐外,也有不限时长的按量付费流量包套餐,套餐年付均有优惠。
    套餐价格:

    • 轻量套餐:¥25/月,150G流量,限速300Mbps。
    • 标准套餐:¥35/月,300G流量,限速500Mbps。
    • 企业套餐:¥75/月,850G流量,限速1000Mbps。

    SSRDOG 机场官网SSRDOG 机场怎么样?

    Totoro Cloud 龙猫云

    4.龙猫云机场 — 2025 性价比专线

    • Shadowsocks 机场
    • IPLC专线翻墙机场

    Totoro Cloud 龙猫云是一家低调的专线机场,海外团队运营,Shadowsocks 协议节点,IPLC 多入口负载专线网络,颇具实力。Totoro Cloud 机场支持 Netflix、Disney+、Youtube Premium 和 ChatGPT 解锁,目前优惠力度较大,可使用优惠码获取最低 5 折优惠,名额有限。针对第一次扬帆出海的新手用户,Totoro Cloud 机场还提供远程一对一的指导,小白新手也不用有任何担心。 线路特点:IPLC 专线;深圳电信、广州电信入口
    套餐价格:

    • VIP1:¥15/月,100G流量/月。
    • VIP2:¥30/月,200G流量/月。
    • VIP3:¥60/月,400G流量/月。

    龙猫云机场官网龙猫云机场怎么样?

    椰皮机场官网

    5.YepFast 机场

    • Shadowsocks 机场
    • 性价比中转机场
    • 注册免费试用

    YepFast 椰皮加速机场是一家提供 Shadowsocks 加速协议的翻墙机场,线路为内中转加速,套餐起始价格低,提供多个国家和地区的家庭宽带 IP 节点,有 YouTube 免广告节点,整体而言很有性价比的机场,同时机场本身对流媒体平台的支持度也十分不错,解锁 Netflix、Disney+、TikTok 和 ChatGPT 等服务。

    线路特点:公网隧道;广东移动多组入口
    套餐价格:

    • 轻量丨椰汁 Lv.1:¥11.9/月,160G流量/月。30+节点。
    • 普通丨椰肉 Lv.2:¥25.9/月,388G流量/月。40+节点。
    • 高级丨椰奶 Lv.3:¥29.9/月,600G流量/月。40+节点。
    • 旗舰丨椰油 Lv.4:¥69.9/月,1800G流量/月。40+节点。

    椰皮加速机场椰皮加速机场怎么样?

    桔子云机场官网

    6.桔子云 – 便宜老牌翻墙机场

    • 老牌翻墙机场
    • 稳定中转机场
    • IPLC专线翻墙机场

    桔子云(橘子云) 是一家老牌翻墙机场梯子,提供SSR和V2ray翻墙协议节点,国内中转和IPLC内网专线。IPLC专线不经过 GFW,即便是敏感时期,稳定性也有保证,不担心被封锁。此外,桔子云(橘子云)机场也常有优惠活动,套餐包年优惠额度比较大。
    套餐价格:

    • 入门版:¥19.9/月,100G流量,限速60M,限3台设备。不可使用IPLC专线节点。
    • 基础版:¥29.9/月,200G流量,限速150M,限5台设备。不可使用IPLC专线节点。
    • 标准版:¥39.9/月,350G流量,限速300M,限8台设备。不可使用IPLC专线节点。
    • 旗舰版:¥59.9/月,600G流量,不限速,限16台设备。包含IPLC在内的全节点解锁。
    • 旗舰版:¥99/月,1200G流量,不限速,限16台设备。包含IPLC在内的全节点解锁。

    橘子云官网桔子云机场怎么样?

    闪电猫 SpeedCAT 机场官网

    7.SpeedCAT 闪电猫机场

    • IPLC 专线节点
    • 高端翻墙机场
    • Shadowsocks 翻墙机场

    闪电猫 SpeedCAT 机场是一家主推高端稳定IPLC专线的翻墙机场,采用 Shadowsocks专用翻墙协议。SpeedCAT 机场除了支持免费试用之外,也常有优惠活动推出,年付还有一定程度优惠。此外,SpeedCAT 机场有针对企业的套餐,适合外贸工作。
    套餐价格:

    • 迷你猫:¥19/月,70G流量/月,限速100Mbps,限2台设备。¥103/半年,¥183/年。
    • 闪电猫:¥39/月,150G流量/月,限速300Mbps,限2台设备。¥375/年,限5台设备。
    • 霹雳猫:¥79/月,300G流量/月,限速700Mbps,限10台设备。¥427/半年,320G流量/月。¥759/年。
    • 雷神猫:¥159/月,650G流量/月,不限速,限15台设备。¥859/半年。¥1529/年。

    闪电猫机场官网闪电猫机场怎么样?

    速云梯VPN机场

    8.速云梯 – 2025 便宜翻墙机场

    • 稳定中转机场
    • IPLC专线翻墙机场
    • SSR/V2ray 机场

    速云梯提供海量 SSR/V2ray 翻墙协议节点,有国内中转和IPLC内网专线。IPLC专线不经过 GFW,即便是敏感时期,稳定性也有保证,不担心被封锁。年付用户可使用8折优惠码:ac888
    套餐价格:

    • 入门版:¥15.9/月,100G流量,限速60M,限3台设备。不可使用IPLC专线节点。
    • 基础版:¥25.9/月,200G流量,限速150M,限5台设备。不可使用IPLC专线节点。
    • 标准版:¥35.9/月,350G流量,限速300M,限8台设备。不可使用IPLC专线节点。
    • 旗舰版:¥55.9/月,600G流量,不限速,限16台设备。包含IPLC在内的全节点解锁。

    速云梯官网速云梯机场怎么样?

    Flying Bird 飞鸟机场

    9.FlyingBird 飞鸟机场

    • Shadowsocks 翻墙机场
    • IPLC 内网专线加速

    FlyingBird 飞鸟机场是一家新晋 Shadowsocks 翻墙服务商,采用国内中转和IEPL内网专线节点,服务稳定可靠。电脑和安卓系统可以使用推荐的 Clash 客户端,iOS需要搭配第三方付费软件如 Shadowrocket 或 Stash 使用。FlyingBird 飞鸟机场对年付套餐优惠力度较大,所有套餐季付9折,半年85折,年付8折。除了优惠力度大之外,飞鸟机场对 Netflix、Disney+ 流媒体解锁支持度也很好。
    套餐价格:

    • 青铜套餐:¥15/月,100G流量/月,不限速不限设备。
    • 白银套餐:¥30/月,200G流量/月,不限速不限设备。
    • 黄金套餐:¥75/月,500G流量/月,不限速不限设备。
    • 钻石套餐:¥150/月,1000G流量/月,不限速不限设备。

    FlyingBird 官网FlyingBird 飞鸟机场怎么样?

    BoostNet 机场官网

    10.BoostNet 机场

    • SS 翻墙机场
    • IEPL 专线

    Boost Net 机场属于高端机场之一,提供 50+ 深港 IEPL 专线节点,Shadowsocks 翻墙节点,主打精品稳定,对 Netflix、Disney+ 流媒体解锁支持度也很好。新用户注册 Boost Net 可领取 8 折优惠,优惠码:boost
    套餐价格:

    • ¥39/月,200G流量/月。
    • ¥58/月,400G流量/月。
    • ¥108/月,1000G流量/月。
    • ¥500/月,3000G流量/月。

    BoostNet 官网BoostNet 机场怎么样?

    精灵学院机场机场官网

    11.精灵学院机场

    • SS/Reality/hysteria 多协议机场
    • 注册免费试用

    Riolu443 精灵学院机场是一家提供 Shadowsocks、Shadowsocks-2022、Vless+Reality、TUIC v5、hysteria(2) 多协议的翻墙机场,线路为大陆直连和国内中转加速,套餐起始价格低,可以说是一家很有性价比的机场,除了包月套餐也有不限时长按量付费提供。由于并非所有客户端都支持新协议,iOS 需使用 Shadowrocket 或 sing-box,其他平台需要使用 Clash Meta 内核客户端。精灵学院机场有定制的 EMBY 资源服务器,同时机场本身对流媒体平台的支持度也十分不错,解锁 Netflix、Disney+、TikTok 和 ChatGPT 等服务。
    套餐价格:

    • Iron:¥6/月,30G流量/月。
    • Copper:¥12/月,120G流量/月。
    • Silver:¥24/月,240G流量/月。
    • Gold:¥36/月,360G流量/月。
    • Platinum:¥48/月,480G流量/月。
    • Diamond:¥60/月,600G流量/月。

    精灵学院机场官网精灵学院机场怎么样?

    Nexitally 奶昔机场

    12.Nexitally 奶昔机场 – 2025 高端翻墙加速

    • Shadowsocks/Trojan 翻墙机场
    • 高端翻墙机场
    • 稳定专线机场

    Nexitally 奶昔机场是一家成立于2017年的翻墙机场,支持 Shadowsocks、Trojan 多种专用翻墙协议。Nexitally 不同于那些采用 SSpanel和V2board 面板的机场,其面板为自主开发,彰显技术实力,同时采用高端专线出墙,国内多线服务器接入,保证任何时候都可以顺利翻墙出海,非常适合办公等商务需求的用户。针对个人用户,Nexitally 也能很好的满足观影需求,支持Netflix、Disney+等流媒体解锁。
    套餐价格:

    • Smart Air:¥71/月;¥360/半年;¥624/年。200G/月,至多2个IP。
    • Smart Access:¥111.87/月;¥577.2/半年;¥1048.92/年。500G/月,至多2个IP。

    Nexitally 机场官网Nexitally 奶昔机场怎么样?

    肥猫云机场官网

    13.FATCAT 肥猫云机场

    • Shadowsocks机场
    • IPLC/IEPL 专线机场

    肥猫云 FATCAT Cloud 是一家性价比中转机场,海外团队运营,Shadowsocks 协议节点,多入口负载,支持 Netflix、Disney+、Youtube Premium 和 ChatGPT 解锁。
    套餐价格:

    • 肥猫小包:¥72/年,60G流量/月。
    • 基础版:¥20/月,200G流量/月。
    • 标准版:¥40/月,400G流量/月。
    • 旗舰版:¥100/月,1000G流量/月。

    肥猫云机场官网肥猫云机场怎么样?

    Web3 机场

    14.Web3VPN

    Web3VPN 是一家成立于2021年下半年的翻墙机场,采用 Shadowsocks 协议,有隧道中转和 IPLC 专线节点提供。注册可免费试用1天。网站可直接使用 Metamask 加密货币钱包进行登录,并且支持加密货币付款方式。
    套餐价格:

    • VIP1:¥14.9/月,15G流量/月。
    • VIP2:¥25/月,100G流量/月。

    Web3VPN 官网Web3VPN 怎么样?

    MESL机场

    15.MESL Cloud

    • Shadowsocks 机场
    • 丰富的落地节点
    • IPLC 专线网络

    MESL Cloud 机场是一家创立于 2022 年的新晋机场服务商,采用 Shadowsocks 协议,国内有多个电信运营商入口,优质的 BGP 入口,IPLC 内网专线传输,有不错的流媒体解锁和 ChatGPT 支持,是一家很有实力的大机场。MESL 机场注册支持试用。
    套餐价格:

    • Premium 100G:¥72/季度,100G流量/月。
    • Premium 200G:¥50/月,200G流量/月。
    • Premium 300G:¥70/月,300G流量/月。
    • Premium 500G:¥110/月,500G流量/月。
    • Premium 1024G:¥210/月,1024G流量/月。

    MESL 官网MESL 机场怎么样?

    泡泡狗机场

    16.泡泡狗机场

    • Trojan 翻墙机场
    • IEPL 专线机场

    泡泡 Dog 泡泡狗机场是一家精品小众机场,拥有多个国内入口的专线机场。泡泡狗机场采用 Shadowsocks 协议,对 Netflix、Disney+ 流媒体及 ChatGPT 解锁提供了很好的支持。泡泡狗机场有全平台的定制客户端,iOS 用户无需再单独付费购买 Shadowrocket 等第三方工具。除了包月套餐泡泡狗也有不限时长的按量付费套餐。
    套餐价格:

    • ¥8.8/月,70G流量/月。
    • ¥12.5/月,110G流量/月。
    • ¥20/月,210G流量/月。
    • ¥45/月,600G流量/月。

    泡泡狗机场官网泡泡狗机场怎么样?

    库洛米 Kuromis 机场官网

    17.Kuromis 库洛米机场

    • Shadowsocks/Trojan 翻墙机场
    • 唯云专线机场

    Kuromis 库洛米是一家提供优质专线节点的新晋翻墙机场,支持 Shadowsocks、Trojan 多种协议,少有的唯云专线机场,和著名的 Nexitally 奶昔机场属于同一上游,稳定性出众。此外,Kuromis 库洛米也是 Netflix 、Disney+ 流媒体平台解锁支持度比较好的机场之一。
    套餐价格:

    • Kuromis Air:¥40/月;¥216/半年;¥384/年。50G/月,至多3个IP。
    • Kuromis Basic:¥45/月;¥243/半年;¥459/年。200G/月,至多3个IP。
    • Kuromis Ultra:¥75/月;¥405/半年;¥765/年。500G/月,至多3个IP。

    库洛米机场官网 | 库洛米机场怎么样?
    CATNET 机场

    18.CATNET – 老牌翻墙机场

    • 老牌翻墙机场
    • IEPL 专线翻墙

    CATNET 是一家老牌翻墙机场,BGP内网跨境专线,Cloud Connect 云连接技术加持,Shadowsocks 协议节点。CATNET 属于高端机场,套餐设置简单,不打价格战,节点方面除了常用的香港、日本、新加坡、美国节点外,还有一些小众冷门地区节点提供,对 Netflix、Disney+ 和 Youtube Premium 解锁支持度也十分不错。
    套餐价格:

    • 普通订阅:¥25/月,100G流量。
    • 进阶订阅:¥50/月,300G流量。

    CATNET 官网CATNET 机场怎么样?

    白月光机场加速器官网

    19.白月光机场

    • IEPL 翻墙机场
    • Shadowsocks 翻墙机场
    • 便宜翻墙机场

    白月光机场加速器是一家2021年开业的新机场,采用 Shadowsocks 专用翻墙协议,专线节点,负载均衡,稳定性不错,对 Netflix、Disney+ 流媒体解锁支持度也很好。白月光除了常规套餐之外,也有一次性流量包套餐,按量付费想用就用。
    套餐价格:

    • 小包:¥66/季度,140G流量/月。
    • 中包:¥84/季度,230G流量/月。
    • 大包:¥120/季度,400G流量/月。
    • 超大包:¥180/季度,750G流量/月。
    • 不差钱:¥230/季度,900G流量/月。
    • 旗舰包:¥2500/年,2.5T流量/月。

    白月光官网月光加速器怎么样?

    SS-ID 机场官网

    20.SS-ID 机场

    • Shadowsocks 翻墙机场
    • 注册免费试用
    • IEPL 专线机场

    SS-ID 机场加速器是一家新晋机场,采用 Shadowsocks 专用翻墙协议,IEPL 专线节点,负载均衡,带宽冗余充足,稳定性不错,提供国内几大常用地区节点,Netflix、Disney+、TikTok、ChatGPT 全套解锁。SS-ID 机场注册可免费试用半天,3G 免费流量。
    套餐价格:

    • ¥15/月,100G流量。
    • ¥25/月,200G流量。
    • ¥35/月,300G流量。
    • ¥65/月,600G流量。

    SS-ID 机场官网SS-ID 机场怎么样?
    Naiu 机场

    21.Naiu 机场

    • Shadowsocks 翻墙机场
    • 中转/IEPL 专线

    NaiU 机场 Naiu Net,海外团队运营机场,正常节点IEPL专线接入,同时搭配0.2X的高质量公网隧道中转,Shadowsocks 协议,流媒体使用动态V6+家宽来解锁,支持 Netflix、Disney+、Youtube Premium 和 ChatGPT ,几乎支持节点当地所有内容。

    线路特点:IEPL 专线、公网隧道;广东移动、联通、电信三线入口
    套餐价格:

    • Nano:¥15.9/月,100G流量。
    • Micro:¥25.9/月,200G流量。
    • Small:¥35.9/月,350G流量。
    • Medium:¥55.9/月,700G流量。
    • Large:¥95.9/月,1500G流量。

    Naiu 机场官网Naiu 机场怎么样?

    OKANC 机场官网

    22.OKANC 机场

    • Shadowsocks 机场
    • BGP 入口专线机场
    • 注册免费试用

    OKANC 是一家创立于 2023 年的新晋机场服务商,由专业的海外团队运营,翻墙协议采用流行的 Shadowsocks 协议,国内采用 BGP 服务器入口,IEPL 专线网络跨境传输。OKANC 机场出道即巅峰,属于高端机场的行列,主要面向流媒体和商务群体,对 Netflix、Disney+ 和 Youtube Premium、TikTok、ChatGPT 解锁支持度十分不错。OKANC 机场注册可免费试用,满意后再付费。
    线路特点:IEPL 专线;广东移动入口
    套餐价格:

    • Pro:¥46/月,328G流量/月。
    • Max:¥52/月,600G流量/月。
    • Max+:¥88/月,1024G流量/月。

    OKANC 机场官网OKANC 机场怎么样?

    更多–翻墙机场推荐汇总

    翻墙机场常见问题

    翻墙机场选哪一个?

    机场网站

    如果你使用过多个翻墙机场,可能会发现他们的网站有一些相似性,这里并不要觉得太奇怪,翻墙机场一般采用开源面板,从而可以将更多精力放在优化翻墙线路上,用户也可因此获得便宜又稳定的翻墙线路。机场选择就是要多尝试,尽可能选择更短的付款周期,不要贪图小便宜被一家机场给锁死了,并且一定要有备用的机场或VPN梯子。

    翻墙协议

    使用翻墙机场,一般无需纠结使用哪一种翻墙协议,Shadowsocks、V2ray、Trojan 在稳定性和速度方面的表现差异不大。Shadowsocks、V2ray 和 Trojan 协议,哪一种翻墙协议最好?

    线路

    很多机场可能会宣传他们的IPLC、IEPL专线有多么稳定,这里其实完全不用在意,不管是直连、中转还是内网专线节点,只要能保证稳定性,就是好的线路。并非所谓的专线就比普通中转节点体验更好,这个只有实际体验,才能得出结论。

    测速

    网络上的测速仅供参考,一切请以实际体验为准。不要过分在意速度峰值表现,没有任何意义,基本上速度能跑到50Mbps以上,少有发生断流显现,实际的用户体验就是十分优异的。除了测速,流媒体解锁情况也是如此,可能经常会发生变动,之前承诺解锁 Netflix、Disney+的节点可能过两天就无法正常观看了。 翻墙机场使用流程

    翻墙机场的使用会比傻瓜式一键翻墙VPN麻烦一些,不过也很简单。 > 网站注册 — 购买套餐 — 下载软件 — 导入订阅 — 开启软件

    其中的订阅链接等同于账户密码,不要公开发布在网络上。一旦发现流量使用异常,需要及时登录机场网站进行订阅链接重置。

    iOS 系统翻墙的特殊性

    苹果公司早在2017年就下载了中国区应用商店中的VPN应用,包含我们使用翻墙机场需要使用的 Shadowrocket、Quantumult X等软件。 所以目前为止,中国区苹果用户下载 VPN 或 Shadowrocket 一类代理软件,都需要通过在 App Store 中切换账号到非中国区才能顺利下载应用进而翻墙。 我们最常用的非中国区苹果账号一般是美区,可以根据网上的教程自己注册美区苹果账号,也可以直接购买现成的已购入 Shadowrocket 软件的美区账号,此方式更加简单快捷,推荐大多数翻墙者使用。

    我应该选择什么客户端?

    客户端的选择依赖于翻墙者选择什么样的翻墙服务。如果是选择一键翻墙VPN服务,如快连VPN,那么只能使用他们官方的应用程序的对应版本。如果选择翻墙机场,能够选择的客户端就很多了,下面分不同的操作系统列举一下。
    iPhone 翻墙客户端
    目前iOS系统上最流行的翻墙软件非小火箭莫属了,小火箭英文为 Shadowrocket,售价2.99美元,中国区App Store 无法下载。想要在iPhone上使用小火箭,需要通过非中国区Apple ID购买,这个Apple ID我们可以自己注册,也可以通过第三方网站购买成品账号。不建议从淘宝购买,因为遇到黑卡的概率很大,可能会导致账号被封锁。 Stash 即 Clash for iOS 售价3.99美元,使用同样简单,支持一键导入和手动导入。更多 iOS 翻墙代理软件请自行谷歌研究。
    安卓手机翻墙客户端
    安卓手机比较流行的几个代理软件有 Clash、SagerNet 和 v2rayNG。一般选择翻墙机场,那么最推荐使用Clash,直接导入订阅链接即可使用,Clash软件简单易用,且比较美观。如果你是自建翻墙节点,选择 SagerNet 或 v2rayNG 可能更为方便,可以通过二维码或SS/V2ray/Trojan 链接直接导入。
    电脑翻墙客户端
    不管是Windows还是macOS系统,最流行的都是 Clash,只是不同平台的Clash由不同开发者提供,所以名字也不太一样,同样使用机场的订阅链接导入即可使用。Windows 系统上,翻墙者最喜欢使用 Clash for Windows,新上线的 Clash Verge 也是不错的选择。在macOS系统上,翻墙者最喜欢使用的是 ClashX。
    翻墙客户端下载地址汇总

    尽量备用多个翻墙工具

    不同的翻墙机场应对中国防火墙的力度不同,为了防止购买的机场VPN被完全封锁而导致无法顺利翻墙出海,ClashSub博客建议购买备用翻墙服务,或者将一些翻墙服务的免翻墙地址收藏到本地。一般而言,只有一个翻墙机场是不足以应付伟大的防火长城的,特别是遇上一些敏感时期。
    收藏梯子,当然是多多益善,Clash Sub 分享的机场数量不多,如果想要直接搜藏海量机场库,可以订阅 Telegram 上的机场列表频道,品云测速频道,访问爱机场博客这个机场推荐与评测网站。

    善用翻墙机场客服和官网帮助文档

    大部分的付费翻墙机场服务商都提供了即时聊天客服和详细的帮助文档,基本上你在使用过程中遇到的任何问题都可以得到解决。阅读文档后有不懂的可以善用谷歌,实在不行可以发送工单或找翻墙服务的客服寻求解决方案。 如果经历上述的方式你的问题也没有得到解决,也可以加入第三方独立的翻墙讨论区,和广大翻墙网友一同寻求解决方案。 #翻墙机场 #翻墙机场推荐 # 2025 机场推荐 #机场推荐 2025 #SS机场 #V2ray机场 #V2ray 机场推荐 #Trojan机场 #老牌翻墙机场 #高端翻墙机场

    Visit original content creator repository https://github.com/lynkco01/jichangtuijian
  • jichangtuijian

    2025 翻墙机场推荐

    2025 年流行的翻墙机场推荐,机场梯子适合已经翻墙很久,掌握了一些翻墙知识的同学。机场一般采用专用的翻墙协议,如 Shadowsocks、ShadowsocksR、V2ray(Vmess)、Trojan 等, 适配于 Clash、Shadowrocket、Quantumult X、Stash、Surge、V2rayN、Surfboard 等多种客户端。翻墙机场不是VPN,但胜过VPN。Clash 翻墙机场推荐
    翻墙机场不同于一键VPN,采用针对GFW开发的翻墙协议,在速度和稳定性方面表现十分优异。需要注册账号购买订阅并搭配第三方软件使用,下面是各常用平台翻墙软件安装地址。 注意:你个人的订阅链接中包含连接信息,等同于账号密码,切记不要泄露。若发现自己的订阅套餐流量异常,请即时前往机场网站重置订阅链接。

    2025 好用的翻墙机场 – SS/SSR/V2ray/Trojan 协议梯子

    ClashSub 博客精选了好用的翻墙机场梯子,支持 Clash、Shadowrocket、Quantumult X、Stash、Surge、V2ray 等多种流行客户端。排名不分先后顺序。建议翻墙者购买月付套餐,满意之后再决定购买更长时间套餐,另外,一定要有备用的翻墙梯子,避免完全失联。 WgetCloud 机场官网

    1.WgetCloud 全球加速 – 2025 稳定翻墙机场首选

    WgetCloud (原 GaCloud) 是一家主打稳定翻墙的机场服务商,采用国内优质服务器接入,亚马逊 Global Accelerator 专线加速。WgetCloud 由海外团队运作,除了支持常见的 Shadowsocks 协议外,也支持 V2ray、SSR 和 Trojan 协议,套餐价格相对偏贵,属于高端翻墙机场,适合追求极致稳定的翻墙用户,如外贸工作、开发人员使用。支持定制套餐,重度翻墙用户或团队用户可在官网「增值服务」中进行流量和设备数量自定义套餐。套餐定制也支持流量包和限时1年时长的按量付费套餐。
    套餐价格:

    • 基础专线:月付:¥59/月,140G流量/月。季付:¥162/季,200G流量/月。年付:¥588/年,240G流量/月。
    • 优质专线:月付:¥69/月,160G流量/月。季付:¥195/季,220G流量/月。年付:¥708/年,280G流量/月。
    • 精品专线:月付:¥79/月,180G流量/月。季付:¥228/季,240G流量/月。年付:¥828/年,320G流量/月。

    WgetCloud 机场官网WgetCloud 全球加速怎么样?

    悠兔机场官网

    2.悠兔机场

    • Shadowsocks 机场
    • IPLC专线翻墙机场

    悠兔机场创立于 2022 年 8 月,机场主身处海外,Shadowsocks 协议节点,国内有多个入口并做了负载,过境线路有公网隧道和 IPLC 专线。悠兔机场注册可免费试用,新用户还可使用8折优惠券:888
    套餐价格:

    • 基础套餐:¥20/月,100G流量。
    • 进阶套餐:¥30/月,200G流量。
    • 高级套餐:¥50/月,500G流量。
    • 至尊套餐:¥100/月,1000G流量。

    悠兔机场官网悠兔机场怎么样?

    SSRDOG 机场官网

    3.SSRDOG 机场 – 2025 稳定专线机场

    • V2ray 翻墙机场
    • IPLC/IEPL 专线机场
    • 9折优惠码:999

    SSRDOG 是一家运营始于2022年的翻墙机场,采用V2ray安全协议,线路有 IEPL 和 IPLC 专线,对 Netflix、Disney+ 流媒体解锁支持度也很好。SSRDOG 机场有定制的一键翻墙VPN客户端,支持安卓、Mac 和 Windows 。iOS 用户推荐使用 Clash for iOS – Stash 代理软件。SSRDOG 机场注册可免费试用,除了常规包月套餐外,也有不限时长的按量付费流量包套餐,套餐年付均有优惠。
    套餐价格:

    • 轻量套餐:¥25/月,150G流量,限速300Mbps。
    • 标准套餐:¥35/月,300G流量,限速500Mbps。
    • 企业套餐:¥75/月,850G流量,限速1000Mbps。

    SSRDOG 机场官网SSRDOG 机场怎么样?

    Totoro Cloud 龙猫云

    4.龙猫云机场 — 2025 性价比专线

    • Shadowsocks 机场
    • IPLC专线翻墙机场

    Totoro Cloud 龙猫云是一家低调的专线机场,海外团队运营,Shadowsocks 协议节点,IPLC 多入口负载专线网络,颇具实力。Totoro Cloud 机场支持 Netflix、Disney+、Youtube Premium 和 ChatGPT 解锁,目前优惠力度较大,可使用优惠码获取最低 5 折优惠,名额有限。针对第一次扬帆出海的新手用户,Totoro Cloud 机场还提供远程一对一的指导,小白新手也不用有任何担心。 线路特点:IPLC 专线;深圳电信、广州电信入口
    套餐价格:

    • VIP1:¥15/月,100G流量/月。
    • VIP2:¥30/月,200G流量/月。
    • VIP3:¥60/月,400G流量/月。

    龙猫云机场官网龙猫云机场怎么样?

    椰皮机场官网

    5.YepFast 机场

    • Shadowsocks 机场
    • 性价比中转机场
    • 注册免费试用

    YepFast 椰皮加速机场是一家提供 Shadowsocks 加速协议的翻墙机场,线路为内中转加速,套餐起始价格低,提供多个国家和地区的家庭宽带 IP 节点,有 YouTube 免广告节点,整体而言很有性价比的机场,同时机场本身对流媒体平台的支持度也十分不错,解锁 Netflix、Disney+、TikTok 和 ChatGPT 等服务。

    线路特点:公网隧道;广东移动多组入口
    套餐价格:

    • 轻量丨椰汁 Lv.1:¥11.9/月,160G流量/月。30+节点。
    • 普通丨椰肉 Lv.2:¥25.9/月,388G流量/月。40+节点。
    • 高级丨椰奶 Lv.3:¥29.9/月,600G流量/月。40+节点。
    • 旗舰丨椰油 Lv.4:¥69.9/月,1800G流量/月。40+节点。

    椰皮加速机场椰皮加速机场怎么样?

    桔子云机场官网

    6.桔子云 – 便宜老牌翻墙机场

    • 老牌翻墙机场
    • 稳定中转机场
    • IPLC专线翻墙机场

    桔子云(橘子云) 是一家老牌翻墙机场梯子,提供SSR和V2ray翻墙协议节点,国内中转和IPLC内网专线。IPLC专线不经过 GFW,即便是敏感时期,稳定性也有保证,不担心被封锁。此外,桔子云(橘子云)机场也常有优惠活动,套餐包年优惠额度比较大。
    套餐价格:

    • 入门版:¥19.9/月,100G流量,限速60M,限3台设备。不可使用IPLC专线节点。
    • 基础版:¥29.9/月,200G流量,限速150M,限5台设备。不可使用IPLC专线节点。
    • 标准版:¥39.9/月,350G流量,限速300M,限8台设备。不可使用IPLC专线节点。
    • 旗舰版:¥59.9/月,600G流量,不限速,限16台设备。包含IPLC在内的全节点解锁。
    • 旗舰版:¥99/月,1200G流量,不限速,限16台设备。包含IPLC在内的全节点解锁。

    橘子云官网桔子云机场怎么样?

    闪电猫 SpeedCAT 机场官网

    7.SpeedCAT 闪电猫机场

    • IPLC 专线节点
    • 高端翻墙机场
    • Shadowsocks 翻墙机场

    闪电猫 SpeedCAT 机场是一家主推高端稳定IPLC专线的翻墙机场,采用 Shadowsocks专用翻墙协议。SpeedCAT 机场除了支持免费试用之外,也常有优惠活动推出,年付还有一定程度优惠。此外,SpeedCAT 机场有针对企业的套餐,适合外贸工作。
    套餐价格:

    • 迷你猫:¥19/月,70G流量/月,限速100Mbps,限2台设备。¥103/半年,¥183/年。
    • 闪电猫:¥39/月,150G流量/月,限速300Mbps,限2台设备。¥375/年,限5台设备。
    • 霹雳猫:¥79/月,300G流量/月,限速700Mbps,限10台设备。¥427/半年,320G流量/月。¥759/年。
    • 雷神猫:¥159/月,650G流量/月,不限速,限15台设备。¥859/半年。¥1529/年。

    闪电猫机场官网闪电猫机场怎么样?

    速云梯VPN机场

    8.速云梯 – 2025 便宜翻墙机场

    • 稳定中转机场
    • IPLC专线翻墙机场
    • SSR/V2ray 机场

    速云梯提供海量 SSR/V2ray 翻墙协议节点,有国内中转和IPLC内网专线。IPLC专线不经过 GFW,即便是敏感时期,稳定性也有保证,不担心被封锁。年付用户可使用8折优惠码:ac888
    套餐价格:

    • 入门版:¥15.9/月,100G流量,限速60M,限3台设备。不可使用IPLC专线节点。
    • 基础版:¥25.9/月,200G流量,限速150M,限5台设备。不可使用IPLC专线节点。
    • 标准版:¥35.9/月,350G流量,限速300M,限8台设备。不可使用IPLC专线节点。
    • 旗舰版:¥55.9/月,600G流量,不限速,限16台设备。包含IPLC在内的全节点解锁。

    速云梯官网速云梯机场怎么样?

    Flying Bird 飞鸟机场

    9.FlyingBird 飞鸟机场

    • Shadowsocks 翻墙机场
    • IPLC 内网专线加速

    FlyingBird 飞鸟机场是一家新晋 Shadowsocks 翻墙服务商,采用国内中转和IEPL内网专线节点,服务稳定可靠。电脑和安卓系统可以使用推荐的 Clash 客户端,iOS需要搭配第三方付费软件如 Shadowrocket 或 Stash 使用。FlyingBird 飞鸟机场对年付套餐优惠力度较大,所有套餐季付9折,半年85折,年付8折。除了优惠力度大之外,飞鸟机场对 Netflix、Disney+ 流媒体解锁支持度也很好。
    套餐价格:

    • 青铜套餐:¥15/月,100G流量/月,不限速不限设备。
    • 白银套餐:¥30/月,200G流量/月,不限速不限设备。
    • 黄金套餐:¥75/月,500G流量/月,不限速不限设备。
    • 钻石套餐:¥150/月,1000G流量/月,不限速不限设备。

    FlyingBird 官网FlyingBird 飞鸟机场怎么样?

    BoostNet 机场官网

    10.BoostNet 机场

    • SS 翻墙机场
    • IEPL 专线

    Boost Net 机场属于高端机场之一,提供 50+ 深港 IEPL 专线节点,Shadowsocks 翻墙节点,主打精品稳定,对 Netflix、Disney+ 流媒体解锁支持度也很好。新用户注册 Boost Net 可领取 8 折优惠,优惠码:boost
    套餐价格:

    • ¥39/月,200G流量/月。
    • ¥58/月,400G流量/月。
    • ¥108/月,1000G流量/月。
    • ¥500/月,3000G流量/月。

    BoostNet 官网BoostNet 机场怎么样?

    精灵学院机场机场官网

    11.精灵学院机场

    • SS/Reality/hysteria 多协议机场
    • 注册免费试用

    Riolu443 精灵学院机场是一家提供 Shadowsocks、Shadowsocks-2022、Vless+Reality、TUIC v5、hysteria(2) 多协议的翻墙机场,线路为大陆直连和国内中转加速,套餐起始价格低,可以说是一家很有性价比的机场,除了包月套餐也有不限时长按量付费提供。由于并非所有客户端都支持新协议,iOS 需使用 Shadowrocket 或 sing-box,其他平台需要使用 Clash Meta 内核客户端。精灵学院机场有定制的 EMBY 资源服务器,同时机场本身对流媒体平台的支持度也十分不错,解锁 Netflix、Disney+、TikTok 和 ChatGPT 等服务。
    套餐价格:

    • Iron:¥6/月,30G流量/月。
    • Copper:¥12/月,120G流量/月。
    • Silver:¥24/月,240G流量/月。
    • Gold:¥36/月,360G流量/月。
    • Platinum:¥48/月,480G流量/月。
    • Diamond:¥60/月,600G流量/月。

    精灵学院机场官网精灵学院机场怎么样?

    Nexitally 奶昔机场

    12.Nexitally 奶昔机场 – 2025 高端翻墙加速

    • Shadowsocks/Trojan 翻墙机场
    • 高端翻墙机场
    • 稳定专线机场

    Nexitally 奶昔机场是一家成立于2017年的翻墙机场,支持 Shadowsocks、Trojan 多种专用翻墙协议。Nexitally 不同于那些采用 SSpanel和V2board 面板的机场,其面板为自主开发,彰显技术实力,同时采用高端专线出墙,国内多线服务器接入,保证任何时候都可以顺利翻墙出海,非常适合办公等商务需求的用户。针对个人用户,Nexitally 也能很好的满足观影需求,支持Netflix、Disney+等流媒体解锁。
    套餐价格:

    • Smart Air:¥71/月;¥360/半年;¥624/年。200G/月,至多2个IP。
    • Smart Access:¥111.87/月;¥577.2/半年;¥1048.92/年。500G/月,至多2个IP。

    Nexitally 机场官网Nexitally 奶昔机场怎么样?

    肥猫云机场官网

    13.FATCAT 肥猫云机场

    • Shadowsocks机场
    • IPLC/IEPL 专线机场

    肥猫云 FATCAT Cloud 是一家性价比中转机场,海外团队运营,Shadowsocks 协议节点,多入口负载,支持 Netflix、Disney+、Youtube Premium 和 ChatGPT 解锁。
    套餐价格:

    • 肥猫小包:¥72/年,60G流量/月。
    • 基础版:¥20/月,200G流量/月。
    • 标准版:¥40/月,400G流量/月。
    • 旗舰版:¥100/月,1000G流量/月。

    肥猫云机场官网肥猫云机场怎么样?

    Web3 机场

    14.Web3VPN

    Web3VPN 是一家成立于2021年下半年的翻墙机场,采用 Shadowsocks 协议,有隧道中转和 IPLC 专线节点提供。注册可免费试用1天。网站可直接使用 Metamask 加密货币钱包进行登录,并且支持加密货币付款方式。
    套餐价格:

    • VIP1:¥14.9/月,15G流量/月。
    • VIP2:¥25/月,100G流量/月。

    Web3VPN 官网Web3VPN 怎么样?

    MESL机场

    15.MESL Cloud

    • Shadowsocks 机场
    • 丰富的落地节点
    • IPLC 专线网络

    MESL Cloud 机场是一家创立于 2022 年的新晋机场服务商,采用 Shadowsocks 协议,国内有多个电信运营商入口,优质的 BGP 入口,IPLC 内网专线传输,有不错的流媒体解锁和 ChatGPT 支持,是一家很有实力的大机场。MESL 机场注册支持试用。
    套餐价格:

    • Premium 100G:¥72/季度,100G流量/月。
    • Premium 200G:¥50/月,200G流量/月。
    • Premium 300G:¥70/月,300G流量/月。
    • Premium 500G:¥110/月,500G流量/月。
    • Premium 1024G:¥210/月,1024G流量/月。

    MESL 官网MESL 机场怎么样?

    泡泡狗机场

    16.泡泡狗机场

    • Trojan 翻墙机场
    • IEPL 专线机场

    泡泡 Dog 泡泡狗机场是一家精品小众机场,拥有多个国内入口的专线机场。泡泡狗机场采用 Shadowsocks 协议,对 Netflix、Disney+ 流媒体及 ChatGPT 解锁提供了很好的支持。泡泡狗机场有全平台的定制客户端,iOS 用户无需再单独付费购买 Shadowrocket 等第三方工具。除了包月套餐泡泡狗也有不限时长的按量付费套餐。
    套餐价格:

    • ¥8.8/月,70G流量/月。
    • ¥12.5/月,110G流量/月。
    • ¥20/月,210G流量/月。
    • ¥45/月,600G流量/月。

    泡泡狗机场官网泡泡狗机场怎么样?

    库洛米 Kuromis 机场官网

    17.Kuromis 库洛米机场

    • Shadowsocks/Trojan 翻墙机场
    • 唯云专线机场

    Kuromis 库洛米是一家提供优质专线节点的新晋翻墙机场,支持 Shadowsocks、Trojan 多种协议,少有的唯云专线机场,和著名的 Nexitally 奶昔机场属于同一上游,稳定性出众。此外,Kuromis 库洛米也是 Netflix 、Disney+ 流媒体平台解锁支持度比较好的机场之一。
    套餐价格:

    • Kuromis Air:¥40/月;¥216/半年;¥384/年。50G/月,至多3个IP。
    • Kuromis Basic:¥45/月;¥243/半年;¥459/年。200G/月,至多3个IP。
    • Kuromis Ultra:¥75/月;¥405/半年;¥765/年。500G/月,至多3个IP。

    库洛米机场官网 | 库洛米机场怎么样?
    CATNET 机场

    18.CATNET – 老牌翻墙机场

    • 老牌翻墙机场
    • IEPL 专线翻墙

    CATNET 是一家老牌翻墙机场,BGP内网跨境专线,Cloud Connect 云连接技术加持,Shadowsocks 协议节点。CATNET 属于高端机场,套餐设置简单,不打价格战,节点方面除了常用的香港、日本、新加坡、美国节点外,还有一些小众冷门地区节点提供,对 Netflix、Disney+ 和 Youtube Premium 解锁支持度也十分不错。
    套餐价格:

    • 普通订阅:¥25/月,100G流量。
    • 进阶订阅:¥50/月,300G流量。

    CATNET 官网CATNET 机场怎么样?

    白月光机场加速器官网

    19.白月光机场

    • IEPL 翻墙机场
    • Shadowsocks 翻墙机场
    • 便宜翻墙机场

    白月光机场加速器是一家2021年开业的新机场,采用 Shadowsocks 专用翻墙协议,专线节点,负载均衡,稳定性不错,对 Netflix、Disney+ 流媒体解锁支持度也很好。白月光除了常规套餐之外,也有一次性流量包套餐,按量付费想用就用。
    套餐价格:

    • 小包:¥66/季度,140G流量/月。
    • 中包:¥84/季度,230G流量/月。
    • 大包:¥120/季度,400G流量/月。
    • 超大包:¥180/季度,750G流量/月。
    • 不差钱:¥230/季度,900G流量/月。
    • 旗舰包:¥2500/年,2.5T流量/月。

    白月光官网月光加速器怎么样?

    SS-ID 机场官网

    20.SS-ID 机场

    • Shadowsocks 翻墙机场
    • 注册免费试用
    • IEPL 专线机场

    SS-ID 机场加速器是一家新晋机场,采用 Shadowsocks 专用翻墙协议,IEPL 专线节点,负载均衡,带宽冗余充足,稳定性不错,提供国内几大常用地区节点,Netflix、Disney+、TikTok、ChatGPT 全套解锁。SS-ID 机场注册可免费试用半天,3G 免费流量。
    套餐价格:

    • ¥15/月,100G流量。
    • ¥25/月,200G流量。
    • ¥35/月,300G流量。
    • ¥65/月,600G流量。

    SS-ID 机场官网SS-ID 机场怎么样?
    Naiu 机场

    21.Naiu 机场

    • Shadowsocks 翻墙机场
    • 中转/IEPL 专线

    NaiU 机场 Naiu Net,海外团队运营机场,正常节点IEPL专线接入,同时搭配0.2X的高质量公网隧道中转,Shadowsocks 协议,流媒体使用动态V6+家宽来解锁,支持 Netflix、Disney+、Youtube Premium 和 ChatGPT ,几乎支持节点当地所有内容。

    线路特点:IEPL 专线、公网隧道;广东移动、联通、电信三线入口
    套餐价格:

    • Nano:¥15.9/月,100G流量。
    • Micro:¥25.9/月,200G流量。
    • Small:¥35.9/月,350G流量。
    • Medium:¥55.9/月,700G流量。
    • Large:¥95.9/月,1500G流量。

    Naiu 机场官网Naiu 机场怎么样?

    OKANC 机场官网

    22.OKANC 机场

    • Shadowsocks 机场
    • BGP 入口专线机场
    • 注册免费试用

    OKANC 是一家创立于 2023 年的新晋机场服务商,由专业的海外团队运营,翻墙协议采用流行的 Shadowsocks 协议,国内采用 BGP 服务器入口,IEPL 专线网络跨境传输。OKANC 机场出道即巅峰,属于高端机场的行列,主要面向流媒体和商务群体,对 Netflix、Disney+ 和 Youtube Premium、TikTok、ChatGPT 解锁支持度十分不错。OKANC 机场注册可免费试用,满意后再付费。
    线路特点:IEPL 专线;广东移动入口
    套餐价格:

    • Pro:¥46/月,328G流量/月。
    • Max:¥52/月,600G流量/月。
    • Max+:¥88/月,1024G流量/月。

    OKANC 机场官网OKANC 机场怎么样?

    更多–翻墙机场推荐汇总

    翻墙机场常见问题

    翻墙机场选哪一个?

    机场网站

    如果你使用过多个翻墙机场,可能会发现他们的网站有一些相似性,这里并不要觉得太奇怪,翻墙机场一般采用开源面板,从而可以将更多精力放在优化翻墙线路上,用户也可因此获得便宜又稳定的翻墙线路。机场选择就是要多尝试,尽可能选择更短的付款周期,不要贪图小便宜被一家机场给锁死了,并且一定要有备用的机场或VPN梯子。

    翻墙协议

    使用翻墙机场,一般无需纠结使用哪一种翻墙协议,Shadowsocks、V2ray、Trojan 在稳定性和速度方面的表现差异不大。Shadowsocks、V2ray 和 Trojan 协议,哪一种翻墙协议最好?

    线路

    很多机场可能会宣传他们的IPLC、IEPL专线有多么稳定,这里其实完全不用在意,不管是直连、中转还是内网专线节点,只要能保证稳定性,就是好的线路。并非所谓的专线就比普通中转节点体验更好,这个只有实际体验,才能得出结论。

    测速

    网络上的测速仅供参考,一切请以实际体验为准。不要过分在意速度峰值表现,没有任何意义,基本上速度能跑到50Mbps以上,少有发生断流显现,实际的用户体验就是十分优异的。除了测速,流媒体解锁情况也是如此,可能经常会发生变动,之前承诺解锁 Netflix、Disney+的节点可能过两天就无法正常观看了。 翻墙机场使用流程

    翻墙机场的使用会比傻瓜式一键翻墙VPN麻烦一些,不过也很简单。 > 网站注册 — 购买套餐 — 下载软件 — 导入订阅 — 开启软件

    其中的订阅链接等同于账户密码,不要公开发布在网络上。一旦发现流量使用异常,需要及时登录机场网站进行订阅链接重置。

    iOS 系统翻墙的特殊性

    苹果公司早在2017年就下载了中国区应用商店中的VPN应用,包含我们使用翻墙机场需要使用的 Shadowrocket、Quantumult X等软件。 所以目前为止,中国区苹果用户下载 VPN 或 Shadowrocket 一类代理软件,都需要通过在 App Store 中切换账号到非中国区才能顺利下载应用进而翻墙。 我们最常用的非中国区苹果账号一般是美区,可以根据网上的教程自己注册美区苹果账号,也可以直接购买现成的已购入 Shadowrocket 软件的美区账号,此方式更加简单快捷,推荐大多数翻墙者使用。

    我应该选择什么客户端?

    客户端的选择依赖于翻墙者选择什么样的翻墙服务。如果是选择一键翻墙VPN服务,如快连VPN,那么只能使用他们官方的应用程序的对应版本。如果选择翻墙机场,能够选择的客户端就很多了,下面分不同的操作系统列举一下。
    iPhone 翻墙客户端
    目前iOS系统上最流行的翻墙软件非小火箭莫属了,小火箭英文为 Shadowrocket,售价2.99美元,中国区App Store 无法下载。想要在iPhone上使用小火箭,需要通过非中国区Apple ID购买,这个Apple ID我们可以自己注册,也可以通过第三方网站购买成品账号。不建议从淘宝购买,因为遇到黑卡的概率很大,可能会导致账号被封锁。 Stash 即 Clash for iOS 售价3.99美元,使用同样简单,支持一键导入和手动导入。更多 iOS 翻墙代理软件请自行谷歌研究。
    安卓手机翻墙客户端
    安卓手机比较流行的几个代理软件有 Clash、SagerNet 和 v2rayNG。一般选择翻墙机场,那么最推荐使用Clash,直接导入订阅链接即可使用,Clash软件简单易用,且比较美观。如果你是自建翻墙节点,选择 SagerNet 或 v2rayNG 可能更为方便,可以通过二维码或SS/V2ray/Trojan 链接直接导入。
    电脑翻墙客户端
    不管是Windows还是macOS系统,最流行的都是 Clash,只是不同平台的Clash由不同开发者提供,所以名字也不太一样,同样使用机场的订阅链接导入即可使用。Windows 系统上,翻墙者最喜欢使用 Clash for Windows,新上线的 Clash Verge 也是不错的选择。在macOS系统上,翻墙者最喜欢使用的是 ClashX。
    翻墙客户端下载地址汇总

    尽量备用多个翻墙工具

    不同的翻墙机场应对中国防火墙的力度不同,为了防止购买的机场VPN被完全封锁而导致无法顺利翻墙出海,ClashSub博客建议购买备用翻墙服务,或者将一些翻墙服务的免翻墙地址收藏到本地。一般而言,只有一个翻墙机场是不足以应付伟大的防火长城的,特别是遇上一些敏感时期。
    收藏梯子,当然是多多益善,Clash Sub 分享的机场数量不多,如果想要直接搜藏海量机场库,可以订阅 Telegram 上的机场列表频道,品云测速频道,访问爱机场博客这个机场推荐与评测网站。

    善用翻墙机场客服和官网帮助文档

    大部分的付费翻墙机场服务商都提供了即时聊天客服和详细的帮助文档,基本上你在使用过程中遇到的任何问题都可以得到解决。阅读文档后有不懂的可以善用谷歌,实在不行可以发送工单或找翻墙服务的客服寻求解决方案。 如果经历上述的方式你的问题也没有得到解决,也可以加入第三方独立的翻墙讨论区,和广大翻墙网友一同寻求解决方案。 #翻墙机场 #翻墙机场推荐 # 2025 机场推荐 #机场推荐 2025 #SS机场 #V2ray机场 #V2ray 机场推荐 #Trojan机场 #老牌翻墙机场 #高端翻墙机场

    Visit original content creator repository https://github.com/lynkco01/jichangtuijian
  • Get-It

    Get It

    A macOS video/audio downloader. Think of it as a youtube downloader that works on many sites.

    Note: Get It requires Homebrew. The required dependencies will be installed with Homebrew.

    Installation

    Download it here, unzip it and open it. To install the dependencies required to run the software, please open the settings in the app and click on ‘Install/update software’. This will not update Get It, but it will update all dependencies.

    dependencies

    Install or Update

    Get It requires the following dependencies which you can install and/or update using the command line (see below).
    The following list is required:

    • xcode-select
    • brew
    • python
    • python3
    • pycrypt
    • youtube-dl
    • libav
    • ffmpeg

    To install the dependencies, open the Terminal app and paste the following commands to install and/or update the respective tools.

    xCode command line tools

    if ! xcode-select -v &> /dev/null; then xcode-select --install; fi

    Homebrew

    if brew -v &> /dev/null; then brew update; else echo /usr/bin/ruby -e '$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)'; fi

    Python

    if brew ls --versions python &> /dev/null; then brew upgrade python; else brew install python; brew link python; fi

    Python 3

    if brew ls --versions python3 &> /dev/null; then brew upgrade python3; else brew install python3; fi

    PyCrypt

    if pip2.7 list | grep -i pycrypt &> /dev/null; then pip2.7 install pycrypt --upgrade; else pip2.7 install pycrypt; fi

    Youtube-dl

    if youtube-dl --version &> /dev/null; then brew upgrade youtube-dl; else brew install youtube-dl; fi

    LibAV

    if brew list libav &> /dev/null; then brew upgrade libav; else brew install libav; fi

    FFMPEG

    if brew list ffmpeg &> /dev/null; then brew upgrade ffmpeg; else brew install ffmpeg; fi

    Uninstall

    Each component can be installed if it is not used by another program on your Mac. To completely clean everything that is brew related: https://github.com/Homebrew/install#uninstall-homebrew

    To uninstall the developer tools:

    sudo rm -rf /Library/Developer/CommandLineTools

    About

    Get It will download audio and/or movies from many websites such as YouTube, BBC, Instagram, … It’s a GUI round the popular YouTube-DL command-line program but with an easy to use interface. It will save your settings dynamically or you can restore the default settings. The default settings will download the audio from a video, convert it to an MP3 and save it to you downloads folder. This was, in my opinion, the mostly used setting.

    Common issues

    Because this is a simple GUI wrapper for the youtube-dl command, most issues can be traced back to the binary. The following common issues exists and can be solved easily:

    • ‘Something went wrong’: An example can be found in #25. The can usually be resolved by simply updating youtube-dl as follows: sudo youtube-dl --update.

    Submit a bug

    You can submit a bug here on Github. Please provide the following:

    • The URL(s) that you try to download.
    • Your settings.

    Also, open the Terminal app on your MacBook and issue the following command:

    cat /tmp/getit_logs
    

    Provide the output of the first command of you have an issue while installing the required software and provide the output of the second command of you have problems while downloading your URLs.

    THANKS

    Thanks to youtube-dl authors for creating such an amazing tool.

    Visit original content creator repository https://github.com/Kevin-De-Koninck/Get-It
  • PlayWithFHIR

    FHIR structure

    Playing around with FHIR resources.

    Is possible to test it agains a FHIR server.

    There is a public server availble here. I tested with this one.

    It’s also possible to test against local FHRI servers.


    Using local servers

    Starting local server

    Just run:

    docker run -p 8080:8080 hapiproject/hapi:latest

    Creating Patient resources

    Creating Patient 1

    curl --location 'http://localhost:8080/fhir/Patient' \
    --header 'Content-Type: application/json' \
    --data-raw '    {
            "resourceType": "Patient",
            "gender": "male",
            "name": [
                {
                    "use": "official",
                    "text": "Edsger Dijkstra",
                    "given": [
                        "Edsger",
                        "Barbosa"
                    ],
                    "family": "Dijkstra",
                    "prefix": ["Sr"]
                }
            ],
            "birthDate": "1910-01-01",
            "telecom": [
                {
                    "system": "phone",
                    "use": "mobile",
                    "value": "+55 85 9 9999 999",
                    "rank": 1
                },
                {
                    "system": "email",
                    "use": "home",
                    "value": "my-mail@gmail.com",
                    "rank": 2
                }
            ],
            "address": [
                {
                    "use": "home",
                    "type": "physical",
                    "country": "Brazil",
                    "city": "São Paulo",
                    "postalCode": "98765432",
                    "state": "São Paulo",
                    "line": ["256"],
                    "text": "Av Paulista. 500"
                }
            ]
        }'
    Creating Patient 2

    curl --location 'http://localhost:8080/fhir/Patient' \
    --header 'Content-Type: application/json' \
    --data-raw '    {
            "resourceType": "Patient",
            "gender": "male",
            "name": [
                {
                    "use": "official",
                    "text": "Bjarne Stroustrup",
                    "given": [
                        "Bjarne",
                        "Barbosa"
                    ],
                    "family": "Stroustrup",
                    "prefix": ["Sr", "Mr."]
                }
            ],
            "birthDate": "1910-01-01",
            "telecom": [
                {
                    "system": "phone",
                    "use": "mobile",
                    "value": "+55 85 9 9999 999",
                    "rank": 1
                },
                {
                    "system": "email",
                    "use": "home",
                    "value": "my-mail@gmail.com",
                    "rank": 2
                }
            ],
            "address": [
                {
                    "use": "home",
                    "type": "physical",
                    "country": "Brazil",
                    "city": "São Paulo",
                    "postalCode": "98765432",
                    "state": "São Paulo",
                    "line": ["256"],
                    "text": "Av Paulista. 500"
                }
            ]
        }'

    Searching for a Patient

    Just run:

    curl --location 'http://localhost:8080/fhir/Patient?address=Netherlands&_format=xml'

    Creating Bundle of Patients

    Just run:

    Creating Bundle

    curl --location 'http://localhost:8080/fhir' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "resourceType": "Bundle",
        "type": "transaction",
        "entry": [
            {
                "resource": {
                    "resourceType": "Patient",
                    "gender": "male",
                    "name": [
                        {
                            "use": "official",
                            "text": "Dijkstra",
                            "given": [
                                "Edsger",
                                "Dijkstra"
                            ],
                            "family": "Dijkstra",
                            "prefix": [
                                "Sr"
                            ]
                        }
                    ],
                    "birthDate": "1930-05-11",
                    "deceasedDateTime": "2002-08-06",
                    "telecom": [
                        {
                            "system": "phone",
                            "use": "mobile",
                            "value": "+55 85 9 9999 999",
                            "rank": 1
                        },
                        {
                            "system": "email",
                            "use": "home",
                            "value": "my-mail@gmail.com",
                            "rank": 2
                        }
                    ],
                    "address": [
                        {
                            "use": "home",
                            "type": "physical",
                            "country": "Netherlands",
                            "city": "Rotterdan",
                            "postalCode": "98765432",
                            "line": [
                                "256"
                            ],
                            "text": "Av Paulista. 500"
                        }
                    ]
                },
                "request": {
                    "method": "POST",
                    "url": "Patient"
                }
            },
            {
                "resource": {
                    "resourceType": "Patient",
                    "gender": "male",
                    "name": [
                        {
                            "use": "official",
                            "text": "Bjarne Stroustrup",
                            "given": [
                                "Bjarne"
                            ],
                            "family": "Stroustrup",
                            "prefix": [
                                "Sr",
                                "Mr."
                            ]
                        }
                    ],
                    "birthDate": "1950-12-30",
                    "telecom": [
                        {
                            "system": "phone",
                            "use": "mobile",
                            "value": "+55 85 9 9999 999",
                            "rank": 1
                        },
                        {
                            "system": "email",
                            "use": "home",
                            "value": "my-mail@gmail.com",
                            "rank": 2
                        }
                    ],
                    "address": [
                        {
                            "use": "home",
                            "type": "physical",
                            "country": "Denmark",
                            "city": "Aarhus",
                            "postalCode": "87654321",
                            "line": [
                                "256"
                            ],
                            "text": "Av Paulista. 500"
                        }
                    ]
                },
                "request": {
                    "method": "POST",
                    "url": "Patient"
                }
            }
        ]
    }'

    Visit original content creator repository
    https://github.com/tiagotele/PlayWithFHIR

  • fink

    Fink

    Build Status

    Fink (pronounced “Phpink”) is a command line tool, written in PHP, for checking HTTP links.

    • Check websites for broken links or error pages.
    • Asynchronous HTTP requests.

    recording

    Installation

    Install as a stand-alone tool or as a project dependency:

    Installing as a project dependency

    $ composer require dantleech/fink --dev

    Installing from a PHAR

    Download the PHAR from the Releases page.

    Building your own PHAR with Box

    You can build your own PHAR by cloning this repository and running:

    $ ./vendor/bin/box compile

    Usage

    Run the command with a single URL to start crawling:

    $ ./vendor/bin/fink https://www.example.com
    

    Use --output=somefile to log verbose information for each URL in JSON format, including:

    • url: The tested URL.
    • status: The HTTP status code.
    • referrer: The page which linked to the URL.
    • referrer_title: The value (e.g. link title) of the referring element.
    • referrer_xpath: The path to the node in the referring document.
    • distance: The number of links away from the start document.
    • request_time: Number of microseconds taken to make the request.
    • timestamp: The time that the request was made.
    • exception: Any runtime exception encountered (e.g. malformed URL, etc).

    Arguments

    • url (multiple) Specify one or more base URLs to crawl (mandatory).

    Options

    • --client-max-body-size: Max body size for HTTP client (in bytes).
    • --client-max-header-size: Max header size for HTTP client (in bytes).
    • --client-redirects=5: Set the maximum number of times the client should redirect (0 to never redirect).
    • --client-security-level=1: Set the default SSL security level
    • --client-timeout=15000: Set the maximum amount of time (in milliseconds) the client should wait for a response, defaults to 15,000 (15 seconds).
    • --concurrency: Number of simultaneous HTTP requests to use.
    • --display-bufsize=10: Set the number of URLs to consider when showing the display.
    • --display=+memory: Set, add or remove elements of the runtime display (prefix with - or + to modify the default set).
    • --exclude-url=logout: (multiple) Exclude URLs matching the given PCRE pattern.
    • --header="Foo: Bar": (multiple) Specify custom header(s).
    • --help: Display available options.
    • --include-link=foobar.html: Include given link as if it were linked from the base URL.
    • --insecure: Do not verify SSL certificates.
    • --load-cookies: Load from a cookies.txt.
    • --max-distance: Maximum allowed distance from base URL (if not specified then there is no limitation).
    • --max-external-distance: Limit the external (disjoint) distance from the base URL.
    • --no-dedupe: Do not filter duplicate URLs (can result in a non-terminating process).
    • --output=out.json: Output JSON report for each URL to given file (truncates existing content).
    • --publisher=csv: Set the publisher (defaults to json) can be either json or csv.
    • --rate: Set a maximum number of requests to make in a second.
    • --stdout: Stream to STDOUT directly, disables display and any specified outfile.

    Examples

    Crawl a single website

    $ fink http://www.example.com --max-external-distance=0
    

    Crawl a single website and check the status of external links

    $ fink http://www.example.com --max-external-distance=1
    

    Use jq to analyse results

    jq is a tool which can be used to query and manipulate JSON data.

    $ fink http://www.example.com -x0 -oreport.json
    
    $ cat report.json| jq -c '. | select(.status==404) | {url: .url, referrer: .referrer}' | jq
    

    Crawl pages behind a login

    # create a cookies file for later re-use (simulate a login in this case via HTTP-POST)
    $ curl -L --cookie-jar mycookies.txt -d username=myLogin -d password=MyP4ssw0rd https://www.example.org/my/login/url
    
    # re-use the cookies file with your fink crawl command
    $ fink https://www.example.org/myaccount --load-cookies=mycookies.txt
    

    note: its not possible to create the cookie jar on computer A, store it and read it in again on e.g. a linux server. you need to create the cookie file from the very same ip, because otherwise server side session handling might not continue the http-session because of a IP mismatch

    Exit Codes

    • 0: All URLs were successful.
    • 1: Unexpected runtime error.
    • 2: At least one URL failed to resolve successfully.
    Visit original content creator repository https://github.com/dantleech/fink
  • xmake-gendoc

    xmake-gendoc

    This repository contains xmake’s documentation (work in progress) and a script that generates a static HTML website from it.

    see Online Docs

    How to build

    Local test

    To generate the pages, you need to call the following command in this repository root:

    $ xmake gendoc -s ./html

    If you specify the same absolute path for both the -o (–outputdir) and -s options, you can easily test the links in local in your browser without the need to setup a server.
    ie.:

    $ xmake gendoc -o /tmp/xmakedoc -s /tmp/xmakedoc

    Open the generated html page to test it.

    $ xmake opendoc

    Deploy release site

    $ xmake gendoc
    $ open https://xmake.io

    The pages will be linked with each other by using absolute URLs. The default URL base is https://xmake.io. It can be changed by using the -s (–siteroot) option.
    ie.:

    $ xmake gendoc -s https://my-xmake-fork.com

    How to contribute

    Each page on the generated site is built by concatenating rendered markdown files.

    The pages are defined in doc/en-us/pages.lua (for american english pages). The pages are groupped by category, so that they are easily distinguished in the site left sidebar.

    A page is defined by a title (the page’s tab title and displayed name in the site left sidebar), and a docdir. The docdir is the path to the directory that contains the markdown files used to fill the page’s content. The paths are relative to the localization directory. For american english, docdir is relative to doc/en-us.

    Localization directories can be added, they will automatically be discovered and added to the generated site on build.
    Localization directories are completely independent from each other.

    API description

    In order to add an API documentation to a page, you can copy the template file to a page’s docdir and rename it. The markdown’s file name is important, as it determines the order in which the files are concatenated in the page.

    Next, you need to set this API a unique key in the file header/metadata. This key will be used to generate links from other API documentations or pages to this API. For the link to work, an anchor must be defined with the ${anchor key} value in the markdown file.

    Then, you should change the name metadata. This name is what will be used as replacement text when generating a link for this API.

    Links are defined with the ${link key} value in a markdown file.

    Optionally, you can specify a custom text for the link like so ${link key [text]}.

    ie.: ${link my_key Click Here!}. It works for both links and anchors.

    ⚠ The characters { and } can’t be used in the replacement text!


    Although partially obsolete, more information can be found here.

    Visit original content creator repository
    https://github.com/xmake-io/xmake-gendoc

  • androidx-bom

    Androidx Jetpack Bom

    说明

    因为在公司维护比较多的项目,最近总是出现最低版本编译(minCompileSdk)错误,所以决定创建相关BOM帮助自己的对一些老项目进行升级

    Dependency 'androidx.xxxxx' requires libraries and applications that
            depend on it to compile against version 34 or later of the Android APIs.

    本项目是基于Androidx Jetpack 进行的封装,方便自己的项目进行升级,不用每次都去查找对应的版本
    但是不是含有所有的Jetpack项目,只是一些常用的项目,如果有需要其他还是需要你自己去查找对应的版本,也可以对当前项目进行升级

    项目也是一个创建BOM的示例,如果这个技术或者项目对你们也有用的话,可以star项目一下。

    相关文档

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:34.1.0.1"))
    }

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:33.1.0.0"))
    }

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:32.1.0.0"))
    }

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:31.1.0.0"))
    }

    都已测试通过,对应的minCompileSdk >= 对应的BOM版本,更低的我好像用不到了

    使用案例

    • Step 1. Add the JitPack repository to your build file

    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            google()
            mavenCentral() //如果发布在本地
            maven("https://jitpack.io") //如果发布jitpack
        }
    }
    • Step 2. Add the dependency

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:${compileSdkVersion}.1.0.0"))
        implementation("androidx.core:core-ktx")
        implementation("androidx.appcompat:appcompat")
        implementation("com.google.android.material:material")
        implementation("androidx.constraintlayout:constraintlayout")
        implementation("androidx.recyclerview:recyclerview")
        implementation("androidx.metrics:metrics-performance")
        implementation("androidx.core:core-splashscreen")
        implementation("androidx.activity:activity:1.6.2")
        implementation("androidx.activity:activity-ktx:1.6.2")
        implementation("androidx.palette:palette")
        implementation("androidx.cardview:cardview")
        implementation("androidx.startup:startup-runtime")
        implementation("androidx.swiperefreshlayout:swiperefreshlayout")
        implementation("androidx.webkit:webkit")
        implementation("androidx.window:window")
        implementation("androidx.browser:browser")
        implementation("androidx.concurrent:concurrent-futures-ktx")
        implementation("androidx.test.espresso:espresso-core")
        implementation("androidx.preference:preference-ktx")
        implementation("androidx.test:runner")
        implementation("androidx.fragment:fragment-ktx")
        implementation("androidx.lifecycle:lifecycle-runtime-ktx")
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx")
        implementation("androidx.lifecycle:lifecycle-livedata-ktx")
        implementation("androidx.room:room-runtime")
        implementation("androidx.room:room-ktx")
        implementation("androidx.room:room-paging")
        implementation("androidx.work:work-runtime-ktx")
        implementation("androidx.work:work-multiprocess")
        implementation("androidx.navigation:navigation-fragment-ktx")
        implementation("androidx.navigation:navigation-ui-ktx")
        implementation("androidx.paging:paging-runtime-ktx")
        implementation("androidx.tracing:tracing-ktx")
        implementation("androidx.datastore:datastore-preferences")
        implementation("androidx.metrics:metrics-performance")
        implementation("androidx.media3:media3-session")
        implementation("androidx.media3:media3-ui")
        implementation("androidx.media3:media3-exoplayer")
        implementation("androidx.media3:media3-exoplayer-dash")
        implementation("androidx.media3:media3-exoplayer-hls")
        implementation("androidx.media3:media3-exoplayer-rtsp")
        implementation("androidx.media3:media3-datasource-rtmp")
        implementation("androidx.media3:media3-datasource-cronet")
        implementation("androidx.media3:media3-datasource-okhttp")
        kapt("androidx.room:room-compiler")
    }

    Visit original content creator repository
    https://github.com/SheTieJun/androidx-bom

  • androidx-bom

    Androidx Jetpack Bom

    说明

    因为在公司维护比较多的项目,最近总是出现最低版本编译(minCompileSdk)错误,所以决定创建相关BOM帮助自己的对一些老项目进行升级

    Dependency 'androidx.xxxxx' requires libraries and applications that
            depend on it to compile against version 34 or later of the Android APIs.

    本项目是基于Androidx Jetpack 进行的封装,方便自己的项目进行升级,不用每次都去查找对应的版本
    但是不是含有所有的Jetpack项目,只是一些常用的项目,如果有需要其他还是需要你自己去查找对应的版本,也可以对当前项目进行升级

    项目也是一个创建BOM的示例,如果这个技术或者项目对你们也有用的话,可以star项目一下。

    相关文档

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:34.1.0.1"))
    }

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:33.1.0.0"))
    }

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:32.1.0.0"))
    }

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:31.1.0.0"))
    }

    都已测试通过,对应的minCompileSdk >= 对应的BOM版本,更低的我好像用不到了

    使用案例

    • Step 1. Add the JitPack repository to your build file

    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            google()
            mavenCentral() //如果发布在本地
            maven("https://jitpack.io") //如果发布jitpack
        }
    }
    • Step 2. Add the dependency

    dependencies {
        implementation(platform("com.github.SheTieJun:androidx-bom:${compileSdkVersion}.1.0.0"))
        implementation("androidx.core:core-ktx")
        implementation("androidx.appcompat:appcompat")
        implementation("com.google.android.material:material")
        implementation("androidx.constraintlayout:constraintlayout")
        implementation("androidx.recyclerview:recyclerview")
        implementation("androidx.metrics:metrics-performance")
        implementation("androidx.core:core-splashscreen")
        implementation("androidx.activity:activity:1.6.2")
        implementation("androidx.activity:activity-ktx:1.6.2")
        implementation("androidx.palette:palette")
        implementation("androidx.cardview:cardview")
        implementation("androidx.startup:startup-runtime")
        implementation("androidx.swiperefreshlayout:swiperefreshlayout")
        implementation("androidx.webkit:webkit")
        implementation("androidx.window:window")
        implementation("androidx.browser:browser")
        implementation("androidx.concurrent:concurrent-futures-ktx")
        implementation("androidx.test.espresso:espresso-core")
        implementation("androidx.preference:preference-ktx")
        implementation("androidx.test:runner")
        implementation("androidx.fragment:fragment-ktx")
        implementation("androidx.lifecycle:lifecycle-runtime-ktx")
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx")
        implementation("androidx.lifecycle:lifecycle-livedata-ktx")
        implementation("androidx.room:room-runtime")
        implementation("androidx.room:room-ktx")
        implementation("androidx.room:room-paging")
        implementation("androidx.work:work-runtime-ktx")
        implementation("androidx.work:work-multiprocess")
        implementation("androidx.navigation:navigation-fragment-ktx")
        implementation("androidx.navigation:navigation-ui-ktx")
        implementation("androidx.paging:paging-runtime-ktx")
        implementation("androidx.tracing:tracing-ktx")
        implementation("androidx.datastore:datastore-preferences")
        implementation("androidx.metrics:metrics-performance")
        implementation("androidx.media3:media3-session")
        implementation("androidx.media3:media3-ui")
        implementation("androidx.media3:media3-exoplayer")
        implementation("androidx.media3:media3-exoplayer-dash")
        implementation("androidx.media3:media3-exoplayer-hls")
        implementation("androidx.media3:media3-exoplayer-rtsp")
        implementation("androidx.media3:media3-datasource-rtmp")
        implementation("androidx.media3:media3-datasource-cronet")
        implementation("androidx.media3:media3-datasource-okhttp")
        kapt("androidx.room:room-compiler")
    }

    Visit original content creator repository
    https://github.com/SheTieJun/androidx-bom

  • Nectar-Backend

    Build Status Dependency Status

    Nectar Backend

    Backend for Nectar app

    Copyright © 2017 The PSU CS Beeminder Capstone Team

    Remade and maintained by: Teal Dulcet

    Adapted from Gal Tsubery’s Quantifier.

    Nectar adds support for more integrations on Beeminder. Automatically gets data from supported integrations and adds it to Beeminder goals.

    Available for testing at: https://beemindernectar.herokuapp.com/.

    Requires Ruby 2.3 or greater, Rails 5.0.0.1 or greater and PostgreSQL 9.1 or greater. Must set all environment variables listed in: .env.local.


    Table of Contents


    Idea

    The idea behind the Nectar Backend is to provide a server for the Nectar Frontend Mobile app, that integrates naturally with the Beeminder website.

    Usage

    This app allows the user to do the following things for their Beeminder account

    • View a Goal
    • Add integration to a goal

    Supported Integrations

    The Nectar Backend supports the following integrations:

    • Beeminder
    • Austin Bcycle
    • Bitbucket
    • Blogger
    • Dropbox
    • Evernote
    • Facebook
    • Fitbit
    • Flickr
    • GitHub
    • Gmail
    • Google Calendar
    • Google Drive
    • Google Fit
    • Google+
    • Google Tasks
    • Instagram
    • KhanAcademy
    • LinkedIn
    • Microsoft Office365
    • Moves
    • Pocket
    • Quizlet
    • Remember The Milk
    • RunKeeper
    • Slack
    • Stack Overflow
    • Strava
    • Trello
    • Tumblr
    • Twitter
    • Typeracer
    • Wikipedia
    • World Community Grid
    • Wunderlist
    • YouTube

    Most of these integrations do not yet have metrics to track.

    Build

    The following instructions will enable you to download and compile the source into a working server:

    1. Install Ruby: https://www.ruby-lang.org/en/documentation/installation/
      1. Requires Ruby 2.3 or greater (because of this: https://en.wikipedia.org/wiki/Safe_navigation_operator#Ruby).
      2. Note: If you are using Windows, we highly recommend you use Bash on Windows 10 (https://msdn.microsoft.com/en-us/commandline/wsl/install_guide) and then follow the Linux instructions. If you install on windows, use the RailsInstaller to install Ruby, Rails and Bundler: http://railsinstaller.org/en. Here are some links to help solve some of the problems you may encounter:
        1. http://stackoverflow.com/a/35730896
        2. http://blog.cloud-mes.com/2014/08/19/how-to-install-gem-curb-in-windows/
        3. http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=-
      3. Note: If you are using Linux and your package manager provides an older version, you can use the Ruby Version Manager: https://rvm.io/.
    2. Install Rails: http://guides.rubyonrails.org/getting_started.html#installing-rails and Bundler
      1. Requires Rails 5.0.0.1 or greater.
    3. Install PostgreSQL: https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
      1. Requires PostgreSQL 9.1 or greater.
    4. Setup PostgreSQL by opening the GUI.
    5. Clone or Download the files: https://github.com/beeminder-capstone/Nectar-Backend and CD into the directory.
    6. Set all environment variables listed in: .env.local.
      1. The bottom six are required.
      2. Get the SECRET_KEY_BASE by running: rake secret.
    7. Run: bundle install. (On Windows or Mac, follow the instructions on the top of this file to install the pg gem: config/database.yml.)
      1. Note: If you are using Windows, you must set a System Environment Variable:
        1. Open “This PC” and find the installation folder for PostgreSQL. Mine was C:\Program Files\PostgreSQL\9.6.
        2. Open “This PC” > “Properties” > “Advanced system settings”, click “Environment Variables”.
        3. Under “User variables”, select the Path Variable, click “Edit…” > “New”. Type the path from step a + \bin.
    8. Run: rake db:create and rake db:migrate.
    9. Start the server: bin/rails server (on Windows: ruby bin\rails server).
    10. Go to: http://localhost:3000/.

    Contributing

    To contribute, simply fork and then create a pull request.

    License

    Copyright © 2017 The PSU CS Beeminder Capstone Team

    Originally made by:

    This code is available under the “MIT License”. Please see the file LICENSE in this distribution for license terms.

    Visit original content creator repository https://github.com/beeminder-capstone/Nectar-Backend
  • tflm_digits

    Tensorflow Lite for Microcontrollers documentation

    This example shows how to run Tensorflow Lite for Microcontrollers (TFLM) to take a picture from a camera, and run inferences on neural networks with varying sizes. The goal is to detect a single digit from a given image.

    Watch on youtube: https://youtu.be/s95ANzzGLiE

    Table of Contents

    Training the model

    See here for more information.

    Converting the model

    If you have converted the trained model to a quantized version, you must convert the model to a hexadecimal character array. On Linux and Mac, this is done through the following:

    xxd -i name_of_model.tflite > name_of_model.cpp
    

    To ensure proper alignment when running the model, you must add alignas(8) at the start of the definition.

    The .cpp file contains two variables, one containing the hexadecimal bytes of the model and the other one containing the length of the array (or the size of the model). Once created, you must add a header file with the same name and export their declarations. There are examples on how to do this with quant_model_small.h, quant_model_medium.h, quant_model_large.h

    Setting up the module with the camera

    The camera used alongside the NM180100 module was the Arducam Mega 3MP SPI Camera.

    There is a whole host of documentation online along with the specifications and diagram for the camera.

    Pay attention to where you connect each pin to the evaluation board (EVB). In bsp_pins.src, located within the bsp/nm180100evb folder, the following connections to the EVB are mentioned:

    • VCC (power source) connects to either 5V or 3.3V
    • GND (ground) connects to any ground pin named GND
    • SCK (clock signal) connects to pin 5
    • MISO (master in, slave out) connects to pin 6
    • MOSI (master out, slave in) connects to pin 7
    • CS (chip select) connects to pin 11

    Model settings

    See model_settings.cc and model_settings.h for more details.

    Any model imported will have different settings (i.e., different input and output tensors) depending on their use case. In order to prevent errors during runtime, you must explicitly declare the input and output dimensions, along with the output format.

    To figure out the correct dimensions and format, you must return back to your file from which you trained the model and check the interpreter’s dimensions. Alternatively, you can upload your file to this Colab file, or run the model_details.ipynb file located in this folder and determine the details from there.

    Running inferences on the model

    See tflm.cc for more details. We will tweak some of the instructions found within TFLM’s official documentation.

    TFLM requires the following libraries:

    #include "tensorflow/lite/micro/micro_error_reporter.h"
    #include "tensorflow/lite/micro/micro_interpreter.h"
    #include "tensorflow/lite/micro/system_setup.h"
    #include "tensorflow/lite/schema/schema_generated.h"
    

    TFLM offers two ways to import the resolver: importing specific operations required for the model, and importing all operations. For the former, import the library through #include "tensorflow/lite/micro/micro_mutable_op_resolver.h", and for the latter, #include "tensorflow/lite/micro/all_ops_resolver.h". More discussion found here on which solution to choose.

    For the purposes below, steps 1-8 will be done within the tflm_setup() function, whereas steps 9-11 will be done within the tflm_inference() function. This is because once the model has been loaded in the interpreter, the interpreter remains static between inferences until debugging ceases.

    1. Import the model. Include the header file after importing the libraries stated above. In addition, you must include the source file in the list of target sources under CMakeLists.txt. Assuming the path is the main folder, you can simply write the source file as name_of_model.cc. For example:

      ...
      target_sources(
       ${APPLICATION}
       PRIVATE
       ${TARGET_SRC}
       main.c
       application_task_cli.c
       application_task.c
       button_task.c
       camera_task.c
       camera_task_cli.c
       console_task.c
      
       drivers/arducam/ArducamAmbiqHAL.c
       drivers/arducam/ArducamCamera.c
       drivers/arducam/ArducamLink.c
       drivers/arducam/ArducamUart.c
      
       constants.cc
       model_settings.cc
       /* Add your model source file here */
       output_handler.cc
       tflm.cc
      
       utils/RTT/RTT/SEGGER_RTT.c
       utils/RTT/RTT/SEGGER_RTT_printf.c
      )
      ...
      

      In tflm.cc:

      #include "model_settings.h"
      #include "quant_model_medium.h"
      
    2. Set up logging. Similar to printf in C, we set up logging. Declare the error reporter in the tflm_setup function.

       static tflite::MicroErrorReporter micro_error_reporter;
       error_reporter = &micro_error_reporter;
      
    3. Load the model into the microcontroller and initialize the target. The model is currently in a char array within the model imported in Step 1. Verify that the model’s version is compatible with the schema.

       tflite::InitializeTarget();
      
       model = tflite::GetModel(quant_model_medium);
       if (model->version() != TFLITE_SCHEMA_VERSION)
       {
           TF_LITE_REPORT_ERROR(error_reporter,
                                "Model provided is schema version %d not equal "
                                "to supported version %d.",
                                model->version(),
                                TFLITE_SCHEMA_VERSION);
           return;
       }
      
    4. Instantiate operations within the resolver. See here.

    5. Allocate memory for the input, output and intermediate arrays using a uint8_t array. There is no set size required for the tensor arena size. TFLM will report errors if the tensor arena is too small. We recommend allocating the tensor arena based on the kilobyte (1024 bytes).

      constexpr int kTensorArenaSize = 300 * 1024;
      alignas(16) uint8_t tensor_arena[kTensorArenaSize];
      
    6. Instantiate the interpreter. Taking all the variables crated from Step 1-5, pass in the variables into the interpreter constructor.

      static tflite::MicroInterpreter static_interpreter(
           model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
      
    7. Allocate memory from the tensor arena to the model’s tensors.

      TfLiteStatus allocate_status = interpreter->AllocateTensors();
      
    8. Validate input shape. Obtain the pointer to the input tensor. We perform error checking on the input based on the model settings declared.

      input = interpreter->input(0);
      
    9. Copy the data from the camera into the model. Using memcpy, we copy the image data from the input buffer of the program to the input tensor. We also perform error checking on this as well.

      memcpy(input->data.int8, in, inlen);
      
    10. Run the model. Invoke the interpreter through calling the invoke() function on the MicroInterpreter instance.

      TfLiteStatus invoke_status = interpreter->Invoke();
      
    11. Obtain output and print out predictions. Access the output directly from the interpreter, and store the tensor data into the output buffer. Afterwards, you will print out the results coming from the model. The way predictions are returned vary from model to model, but it is imporant to know the format to accurately represent the inferences. You should define these details in some way in model_settings.cc and model_settings.h, and provide a readable format when providing the predictions.

      We show an example in how we print out the predictions through the prediction_results function.

    Discussions on importing operations for a resolver

    Resolvers define operations that the interpreter needs to access in order to run the model. At the time of writing, there are 71 operations allowed within TFLM. We do not recommend importing all operations due to high memory usage, and importing unused operations into the resolver is unacceptable. There are certain cases where this is acceptable: when the model’s layers are not explicitly defined (e.g., using a model developed by someone else), or during development (i.e., experimentation purposes).

    If you choose to only add the operations you need, you must understand which layers are required within your graph. You must either return back to the environment from which you built the model, or use a third-party service that explicitly outlines the layers for you, such as Netron. We have another discussion here.

    To instantiate the resolver, you must first declare the resolver using tflite::MicroMutableOpResolver<number_of_ops> class. Then, fill in the number of operations you will use under number_of_ops, and invoke the functions for each operaion you will use. For instance:

    #include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
    ...
    
    static tflite::MicroMutableOpResolver<9> resolver;
    resolver.AddConv2D();
    resolver.AddMaxPool2D();
    resolver.AddFullyConnected();
    resolver.AddSoftmax();
    resolver.AddRelu();
    resolver.AddReshape();
    resolver.AddAdd();
    resolver.AddMul();
    resolver.AddQuantize();
    

    If you choose to use an operation not currently within AllOpsResolver – that is, it exists in Tensorflow Core but not in Tensorflow Lite, you must first verify whether Tensorflow Lite already supports it. If it exists, you need to quantize the model with that given operation after training, and explicitly declare it using the function tflite::MicroMutableOpResolver AddCustom(). If you need to create a custom operator, you will need to follow the steps in building and testing your own before importing it into the model.

    In general, Tensorflow Lite does not recommend building your own operations unless needed for performance and size reasons.

    On the other hand, if you move forward with importing all of the resolver operations, you will declare the all_ops_resolver before declaring the interpreter:

    #include "tensorflow/lite/micro/all_ops_resolver.h"
    ...
    static tflite::AllOpsResolver resolver;
    

    How to use Netron

    Netron is a open-source project that allows you to view the different layers and operations of a model. To use the service, upload your generated .tflite model (whether quantized or not).

    Picture of Netron's app

    When you review the layers, you must identify all types of operations the model uses. At the time of writing, this includes the following:

    • Basic operations (usually shown in black)
    • Pooling layers (usually shown in green)
    • Convolutional layers (usually shown in blue)
    • Activation functions (usually shown in red)
    • Reshaping functions (usually shown in beige/peach color)

    The input and output layers colored in light gray (i.e., the first and last layer in the model) don’t need to be included. Once you identify all the operations, check within the micro_mutable_op_resolver.h file to see their respective operators. Each operation will have an Add prefix to them. Then, add them as described here.

    If you fail to add all of the layers, TFLM will give an error and you will not be able to run inferences.

    Running the build

    We assume you have already set up the microcontroller properly with the camera mounted, and plugged in to your computer.

    To build the executable files, follow the steps in nmapp2 to create the build.

    Once completed, follow instructions within nmapp2 to run debugging on the microcontroller. On Visual Studio Code, this is easy to do: go to Run -> Start Debugging.

    Once the debugging process has started, you need to communicate through serial. On MacOS, you can use the terminal:

    1. Open up a Terminal window.
    2. Find all of the available serial ports by running this command: ls /dev/tty.*. Assuming that the microcontroller is on and plugged in, you will likely see a unique name (on our end, it’s called /dev/tty.usbmodem0009000021581).
    3. Run the command: screen /dev/tty.<insert_name_of_usb_modem> 115200. screen is a command within Linux that allows you to open multiple terminals within one session. For our sake, we care only about monitoring the serial port regardless if the program is debugged or not. /dev/tty.<insert_name_of_usb_modem> is the name of the microcontroller’s serial port; replace the <insert_name_of_usb_modem with the actual name of the microcontroller. Lastly, 115200 refers to the baud rate; the speed at which communication can occur between the computer and the microcontroller. This is a fixed rate, and you will receive an error if the baud rate does not match.
    4. If you are already debugging, hit Enter a couple of times. You may see times printed out along with a > sign. If you have not started debugging, and you run debugging through VSCode, you will see Northern Mechatronics, NM180100 Command Console and then Completed setup. Both cases mean the program is working.
    5. To take pictures, center the images over the digit you want to recognize, and type in cam capture on the serial monitor or terminal. The inference should be quick (i.e., a couple of seconds), and you will be able to see the predictions.

    VSCode also has a serial monitor extension that you can use. The setup is relatively straightforward but the settings are as follows:

    • Monitor Mode: Serial
    • Port: /dev/tty.<insert_name_of_usb_modem>
    • Baud Rate: 115200
    • Toggle Terminal Mode is turned On

    You can then follow Steps 4 and 5 to verify that the setup works and run inferences.

    For Windows, we find that PuTTY is a useful tool for serial communication. Use the same settings as mentioned above.

    Possible errors related to running the build

    These errors vary depending on the system you are running the inferences. However, there are errors we have encountered before that prove useful to know.

    “Sorry, could not find a PTY” or “Cannot open line… for R/W: Resource busy” from MacOS terminal

    When you first open a screen terminal in MacOS, you should not close the terminal until you are done debugging your program with the microcontroller. Otherwise, you will not be able to reopen that same terminal with the screen command. To resolve this, simply turn off the microcontroller, and turn it back on again. Then, run the steps again in running the build.

    Possible errors directly related to TFLM

    See tflm.cc for how error checking is done when running the model.

    TFLM does not require explicit error checking since most of them are reported during runtime, and there are accompanying debug statements. However, it is your responsibility to know the model’s shapes and required operations, because they influence the predictions that come out of the model. You should be aware the requirements of running a model on a microcontroller are stricter than running one on a laptop or phone.

    AllocateTensors() failed

    If the tensor arena size is not large enough to fit the input and output tensors, then TFLM will return an error. You need to try different sizes through kTensorArenaSize in order to find the minimum needed to run the model.

    Poor alignment

    This may not necessarily be coming from TFLM but rather from the module. Ensure that you add alignas(8) at the beginning of the model’s definition:

    alignas(8) const unsigned char model_name = {
       ...
    }
    

    Also, in following TFLM’s convention, add alignas(16) at the beginning of declaring the tensor arena:

    constexpr int kTensorArenaSize = 100 * 1024;
    alignas(16) uint8_t tensor_arena[kTensorArenaSize];
    

    Declaring arrays in the inference function

    The input and output buffers provided within tflm_inference are sufficient when running an inference on the model. You may not declare static arrays nor dynamic arrays within the inference functions. This will cause the stack overflow hook within main.c to be called – the function’s signature is void vApplicationStackOverflowHook(TaskHandle_t pxTask, char *pcTaskName).

    Declaring static arrays in the setup function is allowed, but there is no real use in doing this because the setup function is intended to build the interpreter.

    Improper input and output tensor types

    Deploying models on microcontrollers require more work because the technical capabilities on a microcontroller are more limiting than other devices. Consequently, you must ensure the model’s input and output types are compatible with TFLM.

    During the quantization process, you will specify in the converter the inference input and output type. Currently, Tensorflow Lite supports three types of quantization: dynamic range quantization, full integer quantization and float16 quantization. For TFLM, full integer quantization is best suited for microcontrollers.

    Hybrid models are not allowed – that is, when the inference input type is different than the output type. As of the time of writing, we can properly run inferences when both the input and output types are either tf.uint8 or tf.int8.

    Whichever type you choose, check that you are copying the image and returning the data to the right data type. For instance, if the data type of both the input and output tensors are tf.int8:

    • The destination during memcpy should be input->data.int8
      memcpy(input->data.int8, in, inlen->bytes)
      
    • The output buffer out passed in as a parameter in tflm_inference should be set to int8_t in tflm.cc and tflm.h.

    For tf.uint8, the destination during memcpy should be input->data.uint8, and the output buffer out should be set to uint8_t. In tflm.cc, you should also adjust any error checking during setup and inferences so that the model does not return an error

    Improper input and output tensor shapes

    Error checking exists within tflm.cc to check the input and output shapes are correct. You will adjust this in model_settings.h.

    Input images typically have a 4D shape. In that shape, the first axis (i.e., input->data[0]) indicates how many images are being passed into the model. For inferences, this is always 1. The second and third axes (i.e., input->data[1] and input->data[2]) indicate the number of rows and columns respectively. The last axis (i.e., input->data[3]) indicates the number of channels or bytes within each pixel. For grayscale, the number is usually 1, and for RGB, the number is usually 3. You should verify this by checking the interpreter input and output details – see model settings for more details.

    Output tensors typically have a 2D shape. The first axis (i.e., output->data[0] ) reflects how many tensors are outputted. This number is always 1, because there is always one result for one image. The second axis (output->data[1]) indicates how many elements are in the output tensor. For the example models provided, there are 10 elements provided.

    Predictions are not printing out properly

    This is uncommon, but if text is not printed out of the error_reporter correctly or doesn’t print all the way, you need to ensure that:

    • syntax when invoking TF_LITE_REPORT_ERROR is correct
    • all variables passed into TF_LITE_REPORT_ERROR have the correct types within the string.

    As a reminder, TF_LITE_REPORT_ERROR has at least two parameters: the error reporter error_reporter and the text printed out as a string.

    If any variables are referenced, then you must:

    • reference the data types within the string and where each variable will be used
    • pass the variables as extra parameters in TF_LITE_REPORT_ERROR.

    For instance:

    TF_LITE_REPORT_ERROR(error_reporter, "Number of rows expected: %d\nNumber of input rows given: %d", kNumRows, input->dims->data[1]);
    

    kNumRows and input->dims->data[1] are both integers, so they are referenced by %d (similar to printf in C, %d indicates a decimal number). Notice that the variables will be printed in order, so kNumRows will be printed after “expected”, and input->dims->data[1] is printed after “given: “.

    Other data types exist too: %c for char variables, and %s for string variables. See here for more information.

    Visit original content creator repository https://github.com/NorthernMechatronics/tflm_digits