codex只能显示有几张重置卡,但具体什么时候到期不显示,然后app里面永远只显示你新获得一张重置卡有效期30天。让人感觉是永久的。其实不然。
根据论坛上看到的别人的介绍,然后让codex自己搓了一个查自己的。实测好用。

#!/usr/bin/env python3

import json
import sys
import urllib.error
import urllib.request
from datetime import datetime, timedelta, timezone
from pathlib import Path


AUTH_PATH = Path.home() / ".codex" / "auth.json"
API_URL = "https://chatgpt.com/backend-api/wham/rate-limit-reset-credits"
BEIJING_TZ = timezone(timedelta(hours=8))


def load_access_token() -> str:
    try:
        data = json.loads(AUTH_PATH.read_text(encoding="utf-8"))
    except FileNotFoundError:
        print(f"未找到认证文件: {AUTH_PATH}", file=sys.stderr)
        sys.exit(1)
    except json.JSONDecodeError:
        print(f"认证文件不是合法 JSON: {AUTH_PATH}", file=sys.stderr)
        sys.exit(1)

    token = data.get("tokens", {}).get("access_token")
    if not token:
        print("认证文件中缺少 tokens.access_token", file=sys.stderr)
        sys.exit(1)
    return token


def parse_utc_to_beijing(value: str) -> str:
    dt = datetime.fromisoformat(value.replace("Z", "+00:00"))
    return dt.astimezone(BEIJING_TZ).strftime("%Y年%-m月%-d日 %H:%M:%S")


def fetch_credits(token: str) -> list[dict]:
    req = urllib.request.Request(
        API_URL,
        headers={
            "Authorization": f"Bearer {token}",
            "Accept": "application/json",
            "User-Agent": "codexreset.py",
        },
    )

    try:
        with urllib.request.urlopen(req, timeout=20) as resp:
            data = json.loads(resp.read().decode("utf-8"))
    except urllib.error.HTTPError as err:
        if err.code == 401:
            print("HTTP 401:凭证失效或 Authorization header 不正确", file=sys.stderr)
            sys.exit(1)
        print(f"HTTP {err.code}:请求失败", file=sys.stderr)
        sys.exit(1)
    except urllib.error.URLError as err:
        print(f"网络请求失败:{err.reason}", file=sys.stderr)
        sys.exit(1)

    credits = data.get("credits")
    if not isinstance(credits, list):
        print("接口返回格式异常:缺少 credits 数组", file=sys.stderr)
        sys.exit(1)
    return credits


def main() -> None:
    token = load_access_token()
    credits = fetch_credits(token)

    if not credits:
        print("没有可显示的重置卡。")
        return

    for idx, credit in enumerate(credits, start=1):
        granted_at = credit.get("granted_at")
        expires_at = credit.get("expires_at")
        if not granted_at or not expires_at:
            continue
        print(f"{idx}. 发放时间:{parse_utc_to_beijing(granted_at)}")
        print(f"   过期时间:{parse_utc_to_beijing(expires_at)}")


if __name__ == "__main__":
    main()

运行结果:

root@leb:/usr/local/bin# codexreset.py
1. 发放时间:2026年6月12日 11:56:56
   过期时间:2026年7月12日 11:56:56
2. 发放时间:2026年6月18日 08:33:06
   过期时间:2026年7月18日 08:33:06
3. 发放时间:2026年6月27日 08:07:52
   过期时间:2026年7月27日 08:07:52
4. 发放时间:2026年7月2日 04:28:21
   过期时间:2026年8月1日 04:28:21

我贪财,看到搬瓦工价格不错,于是就把手里的给卖了。现在没有到大陆优化的机器了,只能来折腾阿里 CDT。另外,我习惯用 Debian,不想用 Alpine,所以和一些常见的文档相比稍有点不同。不是什么干货,就是备忘一下。这样折腾不是我缺那几块钱,只是一种折腾的成就感,不喜勿喷。

  1. 下载 https://deb.debian.org/debian/dists/trixie/main/installer-amd64/current/images/netboot/ 下的 mini.iso。
  2. 阿里开通 OSS,然后上传 iso,再制作自定义镜像。区域需要与服务器区域(香港)保持一致。硬盘大小选 1G。
  3. 购买阿里 ECS,需要账户至少 100 余额。抢占式,香港,可用区用 B,2C 0.5G,经济型。时长不确定,节省停机,自定义镜像,系统盘 ESSD 云盘,大小 1G。不要备份,不分配 IP,登录凭证创建后设置。上面设置一个都不能错。如果正确,显示的价格就是 0.005528/时左右,然后下单。
  4. 开机成功后,到弹性 IP 处,购买弹性 IP,然后带宽拉到 5G(如能),需要选择按流量付费,然后马上绑定到步骤 3 购买的实例。空闲久了就会开始计空闲费,可贵了。
  5. 进入实例详情,然后通过 VNC 登录后即进入安装过程。最好用高级安装模式。安装注意分区时,选手动分区,分区类型 btrfs,挂载参数 压缩。在安装 grub 前,进入 shell,运行 dd if=/dev/zero of=/dev/vda seek=1 count=2047,否则 grub 安装会出错。我在此处吃药甚久。
  6. 安装如果出错,或者想重置os,请务必删除重建,不能重装系统,重装的价格和新建完全不一样。
  7. 安装好了再找个保活脚本就可以了,网上有不少,我就不说了。当然,也可以自己在这基础上 vibe coding 一个更适合自己的:

image.webp

image.webp

开源软件在安全上有一个很不好的地方,如果出现了漏洞,可以根据提交的补丁逆向找到漏洞实现细节,从而实现 0day 攻击。

哪吒探针在 2026/5/25 做了一次提交,提交号:e816e94fca16,注释是:feat: server transfer rotation,中文就是“服务器转移轮换”。初看上去,这是一次很普通的提交,其实,就是我前面说的——他们总不成说“我是修改了一个路径穿越漏洞”吧?他们只能是将这个补丁偷偷埋藏在一堆别的修改之中。然而,对有心人来说(其实 AI 直接就能看出来,难度和代价并不高),在 controller.go 中,引入了两处修改:

image.webp

漏洞已经很清楚,0day 指日可待。

后面的事情大家就都很清楚了,血雨腥风,我就不再揭伤疤了。

哪吒探针因为路径遍历漏洞已经闹得沸沸扬扬了,漏洞的核心是jwt密钥被人通过http://xxx/dashboard../data/config.yaml方式获得。 jwt本身不是安全问题,不过仅说这次事件,其实不用jwt起码同样漏洞情况下攻击门槛高得多。

我一直极端鄙视jwt,我认为它就是一个典型的java传来的又臭又长的过度设计。以前我已经发过博文说过这事了,今天我就不再说了,借gpt口来表达吧。

image.webp

这几天在盛传,Oracle 的 ARM 实例月限额降到了 1500 CPU 小时。如果按照以前的 4C24G 的话,那就是只能用 15 天,第 16 天开始超标计费了。

快了,就这几个小时了。

不过我不信 Oracle 这种公司会做出没有任何事先通知,就突然变更使用协议并收费这种事。要改这些东西,我不信它能通过公司合规部门和法律部门的审核,因为动静太大了。

虽然 Oracle 前段时间也偷偷地把带宽降了,不过这不牵涉到扣费,而且只针对免费用户,这性质完全不一样。

走着瞧了,我就不降配。

目前还好,仍然是 0。