徐明的博客

I am a tower crane engineer

🎮一款网页版红警修改金钱的方法

八月 05, 2025

共和国之辉网页版https://game.gongheguozhihui.com/

修改方法:

进入游戏后,打开浏览器的开发人员工具,打开控制台,输入Game.localPlayer._credits=999999回车,金钱数量999999随你定

🧩九宫格拼图的最少步骤解法|Bing必应拼图游戏

七月 28, 2025

最近使用Edge浏览器,目前有各种攒积分的任务,其中就有拼图游戏,就像这样:

玩过几次后我就思考有没有最优的解法,也就是步骤最少的复原方法。通过网上搜索,发现使用 A*(A-star)搜索算法 来找最短路径,是最常用的 8-puzzle 解法。

借助chatgpt,我这个编程入门选手也可以很快得到一个可执行的程序代码。

from heapq import heappush, heappop

# 目标状态
goal = "12345678_"

# 空格移动方向及其索引变化量
moves = {
    'U': -3,
    'D': 3,
    'L': -1,
    'R': 1,
}

# 特殊情况:哪些位置不能向左/右/上/下移动
invalid_moves = {
    'L': [0, 3, 6],
    'R': [2, 5, 8],
    'U': [0, 1, 2],
    'D': [6, 7, 8],
}

# 启发函数:曼哈顿距离
def manhattan(state):
    distance = 0
    for idx, val in enumerate(state):
        if val != "_":
            goal_idx = goal.index(val)
            distance += abs(idx // 3 - goal_idx // 3) + abs(idx % 3 - goal_idx % 3)
    return distance

# A* 求解函数
def solve_puzzle(start):
    visited = set()
    heap = []
    heappush(heap, (manhattan(start), 0, start, ""))  # (估值, 步数, 状态, 路径)

    while heap:
        priority, steps, state, path = heappop(heap)
        if state == goal:
            return steps, path

        if state in visited:
            continue
        visited.add(state)

        empty_idx = state.index("_")

        for move, delta in moves.items():
            new_idx = empty_idx + delta
            if empty_idx in invalid_moves[move] or not (0 <= new_idx < 9):
                continue
            # 交换空格与相邻数字
            state_list = list(state)
            state_list[empty_idx], state_list[new_idx] = state_list[new_idx], state_list[empty_idx]
            new_state = ''.join(state_list)
            if new_state not in visited:
                heappush(heap, (steps + 1 + manhattan(new_state), steps + 1, new_state, path + move))

    return -1, ""  # 无解

# 示例用法
if __name__ == "__main__":
    initial_state = "3754182_6"
    steps, solution = solve_puzzle(initial_state)
    print(f"最少步数: {steps}")
    print(f"操作路径: {solution}")

得到输出如下:

最少步数: 21
操作路径: ULDRUULDDRURULLDDRURD

🔁 操作说明(空格的移动方向)

每个字母代表一次点击使空格与相邻数字交换:

  • L:空格向左移(即点击其左边的数字)
  • R:空格向右移
  • U:空格向上移
  • D:空格向下移
  • 🔐当你使用VPN时,你必须要了解WebRTC漏洞

    七月 25, 2025

    WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音通话、视频通话以及P2P文件分享的技术规范和开源项目,目的是让开发者可以在网页和移动应用中实现不依赖第三方插件的实时通信功能。

    🔧 WebRTC 能做什么?

  • 视频通话:如 Google Meet、Zoom网页版
  • 语音通话:如 Discord、Messenger网页版
  • 屏幕共享
  • 实时聊天 + 文件传输(P2P)
  • 多方会议
  • 实时传感器或数据流传输
  • 🧠 WebRTC 泄露 IP 的原理

    ✅ 1. WebRTC 需要获取局域网和公网 IP

    WebRTC 为了实现端对端通信(P2P),必须知道用户设备的 真实 IP 地址,包括:

  • 局域网 IP(如 192.168.x.x 或 10.x.x.x)
  • 公网 IP(如果用户有公网地址或通过 STUN 获得)
  • 它会使用一个机制叫 ICE(Interactive Connectivity Establishment) 来尝试连接路径,这需要收集所有候选网络地址(ICE candidates),包括:

  • 主机候选(Host candidates)→ 本地 IP(内网 IP)
  • STUN 服务器返回的候选(Server reflexive candidates)→ 公网 IP
  • TURN 服务器候选(中继 IP)
  • 这些信息是通过浏览器的 JavaScript API 中的 RTCPeerConnection 自动收集并暴露的。

    ✅ 2. 恶意网站可用 JS 窃取你的 IP

    一个恶意网页可以运行如下 JS 代码,不经用户同意即可收集你的内网和公网 IP:

    let pc = new RTCPeerConnection({iceServers: []});
    pc.createDataChannel('');
    pc.createOffer().then(offer => pc.setLocalDescription(offer));
    pc.onicecandidate = event => {
      if (event.candidate) {
        console.log(event.candidate.candidate);
      }
    };
    

    输出结果类似:

    candidate:0 1 udp 2122252543 192.168.1.10 12345 typ host
    candidate:1 1 udp 1686052863 203.0.113.45 45678 typ srflx raddr 192.168.1.10 rport 12345
    
  • 192.168.1.10 是你的 本地 IP
  • 203.0.113.45 是通过 STUN 获得的 公网 IP
  • 这些数据是用来进行 NAT 穿透用的,但也可能被窃取。

    🔓 为什么这是一种“泄露”?

  • 因为:用户未明确授权访问 IP 地址,但 JS 就可以拿到。
  • 浏览器对 WebRTC 的 ICE 候选信息没有默认限制;
  • VPN 用户即使通过 VPN 上网,仍可能泄漏其真实的本地 IP 或运营商 IP。
  • 🔐 如何防止 WebRTC 泄露 IP?

    方法 1:浏览器禁用 WebRTC(不推荐除非你不用视频通话)

    Firefox:
  • 地址栏输入:about:config
  • 搜索:media.peerconnection.enabled → 设置为 false
  • Chrome:
  • 安装扩展程序(如 WebRTC Control)
  • 设置 chrome://flags 中的隐私选项(不总是可靠)
  • 方法 2:使用 VPN 提供的 DNS 和 IP 防泄漏防护

    一些 VPN 服务(如 NordVPN、ExpressVPN)会专门防止 WebRTC 泄漏公网 IP

    方法 3:使用浏览器插件屏蔽 STUN

    禁用 WebRTC 的好处

  • 🚫 防止真实 IP 泄漏
  • 🔐 增强隐私与匿名性
  • 🧱 阻止潜在的恶意利用
  • 禁用 WebRTC 的风险与影响

  • ❌ 无法使用视频通话 Google Meet、Zoom Web、Discord 等直接无法开启音视频通话
  • ❌ 屏幕共享失败 WebRTC 是浏览器中实现屏幕共享的核心机制之一
  • ❌ P2P 数据传输失效 不支持基于 WebRTC 的文件传输服务(如 ShareDrop)
  • ❌ 某些聊天网站功能损坏 Omegle、Chatroulette 等基于 WebRTC 的服务会报错或黑屏
  • ❌ 企业内协作工具异常 一些在线协作工具(如 Microsoft Teams Web、Jitsi Meet)将无法使用音视频功能
  • 😥他们说博客已死

    七月 05, 2025

    在网上游荡时偶然发现一个blogger博客https://ggq.blogspot.com/,最早文章是2006年,最新的文章是2015年的,然后又发现该博主之前搞了一个blogger导航http://groups.google.com/group/ggpi/web/blog,谷歌这个服务早就关停了,现在肯定是打不开的。互联网的伟大之处就在这时体现了,借助网页时光机,让我能够查看到这个消失的网页。它就是https://web.archive.org/,从网页的历史快照中看到这个导航还是收录了很多博客的。

    不过当我尝试访问哪些博客时,可以用惨淡两字来形容,要么提示博客被删除,要么提示需要权限才能访问,要么就是停更十几年,其中依然在坚守写博客的少之又少。

    可能这就是事物发展的规律,一项事物总有衰落甚至被淘汰的一天。

    就像曾经的固定电话,以前每一家基本都有,现在被手机取代了,连街边的固定公共电话亭都很少见到了。当今除了公司业务使用,个人家庭装固定电话真的就是凤毛麟角了。

    博客自然也逃不过它的命运。国内的博客服务商也一个接着一个的关停,曾经的新浪博客、网易博客等等,还有一个博客园还在运营,不过也不像以往那样热闹了。除了不可控的政策因素的影响,互联网发展的大趋势也是重要的影响因素。信息越来越多,多到严重过剩,网民的注意力很难再被平平的文字吸引,取而代之的是短视频、短剧,看这些东西完全不用自己思考,一个接一个被平台推送到用户端,加上大数据算法的筛选,给你看的都是你喜欢看的,你说这样怎么能让网民不上瘾。就像吃习惯了精致美食,你再让他去吃粗粮,肯定是难以下咽的。博客现在就是那粗粮,很少有人愿意去看,即使你是再寻找一个技术难题的解决方法,从搜索引擎找出的结果中,视频教程也是多数人的优先看的,除非这个问题的相关结果很少,只有一两篇相关的博客文章,没得挑了,只好硬着头皮看看了。

    现在的搜索引擎也不太好过,AI的出现,能代替我们很多基础的工作,它可以对问题进行联网搜索,这比起我们自己搜索要省事多了。我们的目的就是解决问题,而在自行搜索过程中,还需要额外花费时间精力去对结果进行判断,结果的相关性、是不是广告、是不是可靠的信息等等,这些都可以交给AI去做。当然最后的结果还是需要自己去确认准确性。AI有时候也会出错。

    可能以后个人网站的直接用户只剩下各种AI机器人了,网站与用户直接多了个代理——AI,这一点从我自己的网站就能窥见一二——网站后台统计的各种bot访问比用户访问的次数还多。以前我们写博客,生产出内容,用户都是从各种渠道访问到网站上来看的,这些都是真实的网站访问。而以后,很可能,用户不再需要直接访问我们的网站了,各种AI机器人会提前将我们的网站抓取,就像超市一样,里面放满了从厂商批发来的商品,用户需要什么就提供什么,用户只需要去一个地方就能获取任何自己想要的东西。整个环节似乎没什么问题,但是真正的超市去厂家进货是要付钱的啊,你AI机器人可一毛钱都没付哦。AI利用了我们的内容,截取了我们的访客。在这样的环境下,如果还能坚持写博客,那应该是真的纯个人兴趣爱好了。

    我的博客不会死,只是会停更罢了。

    后记:

    刚写完这篇博客的第二天,就在网上看到消息,cloudflare发起内容独立日倡议,旨在改变 AI 公司无偿抓取网络内容进行模型训练的现状。这个问题如果不解决,以后网络上只会有越来越多的AI生成的衍生内容,真正的原创内容会越来越少。

    Cloudflare 推出“按次抓取付费”计划,发起“内容独立日”倡议 - OSCHINA - 中文开源技术交流社区

    内容独立日:无补偿,无 AI 爬虫!- Cloudflare 博客

    内容爬取活动增加但引用流量下降:AI 对内容提供者的影响 - Cloudflare 博客

    🚀腾讯微云不开会员极速下载文件的方法

    七月 03, 2025

    腾讯微云跟所有市面上所有网盘一样,想快速下载文件就得开会员。

    虽然不冲会员也能下载,但是100KB/S的速度,文件小一点还能忍忍,几个G的文件,就得等几个小时。

    今天偶然发现一种可以曲线救国的方法,完全正规操作就能快速下载腾讯微云的文件。

    方法如下:

    打开微云文件分享链接页面,选择用QQ登录;

    点击“保存微云”,将分享的文件保存到自己的微云;

    在手机QQ上打开“我的电脑”,点文件夹图标,点“微云”选项卡,下面显示默认分类是文档,根据刚刚保存的文件类型,找到对应的分类,找到刚刚的文件,选中后,点击发送即可。

    在电脑上接收文件,你会发现下载的速度非常快。

    最近文章