关于本站为什么不进行ICP备案

目前已备案,该文章存档 被DDOS大肘子打回CF了 违规内容 早期本站发布过文章 点此查看 该文章不符合备案规范。曾尝试过备案被打回 域名不支持备案 ICP备案是针对于域名的,本人名下的 2x.nz 并不在ICP备案支持的域名后缀内 所有支持备案的域名后缀请查看 https://domain.miit.gov.cn/ 中国节点加速收效甚微 目前本站使用的CDN为Netlify CDN,Netlify采用AWS的IP,速度极快,在中国大陆可用性很高,延迟如下图 由于本站为静态站,若进行备案可以直接使用EdgeOne Page中的中国大陆节点,延迟固然会更低,但是对比目前的速度收效甚微 备案步骤繁琐 若进行备案,则需要填写实际运营人相关信息并且需要购买备案码(这是最低成本的备案方式) GFW未对本站进行SNI阻断 本站目前并未被GFW阻断。除部分省市防火墙进行非备案域阻断外皆可正常访问 泉州等地区用户仅支持访问备案域? 本站之前有一个IP站点,由于业务服务器1Panel V1升级至V2破坏了原有的CI/CD工作流,暂时停用 后续会进行修复并且重新恢复IP站点的运营 已恢复 后续是否会备案 可能。但是不会用做主要业务,更多是提高访问可达性,主站仍为未备案站。 且如果备案后我需要管理两个内容分支(即无违规内容分支和原分支)我可能会放弃这么做

July 28, 2025 · 1 min · 29 words

网易云音乐歌曲时间戳获取

正式开始 首先我们要获取一首歌的ID,如果你是App可以点击分享,然后 复制链接 。如果是Web,直接复制浏览器地址栏 你将得到类似这样的URL https://music.163.com/#/song?id=29812004&uct2=U2FsdGVkX1+0Ic0zSL7yd7aZMm+xya0r1rUmiRUO5Us= 其中的 id=29812004 中的值就是我们的歌曲ID 接下来拼接URL https://music.163.com/api/song/media?id=29812004 访问就得到歌词时间戳啦 {"songStatus":1,"lyricVersion":44,"lyric":"[by:月餖]\n[00:19.30]The clock stopped ticking forever ago\n\n[00:23.300]How long have I been up?\n[00:25.300]I don't know.\n[00:26.300]I can't get a grip,\n[00:28.300]But I can't let go\n[00:30.300]There wasn't anything\n[00:31.300]To hold onto though...\n[00:33.300]Why can't I see?\n[00:35.300]Why can't I see?\n[00:37.300]All the colors that you see?\n[00:40.300]Please, Can I be,\n[00:42.300]Please, Can I be\n[00:44.300]Colorful and free?\n[00:47.300]WHAT THE HELL'S GOING ON?!\n[00:48.300]CAN SOMEONE TELL ME PLEASE--\n[00:50.300]WHY, I'M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[00:53.300]I'M black, THEN I'M white!!\n[00:55.300]NO!!!\n[00:56.300]SOMETHING ISN'T RIGHT!!\n[00:57.300]MY ENEMY'S INVISIBLE, I DON'T KNOW HOW TO FIGHT!!\n[01:01.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[01:04.300]WHEN I'M UP AGAINST\n[01:05.300]THE ECHO IN THE MIRROR!!\n[01:08.300]ECHO!!\n[01:14.300]\n[02:23.300]I'm gonna burn my house down,\n[02:27.300]Into an ugly black.\n[02:28.300]I'm gonna run away, Now\n[02:31.300]And never look back.\n[02:32.300]I'm gonna burn my house down,\n[02:34.300]Into an ugly black.\n[02:35.300]I'm gonna run away, Now\n[02:37.300]And never look back.\n[02:39.300]I'm gonna run away down,\n[02:41.300]I'm gonna run away.\n[02:42.300]I'm gonna run away, Now\n[02:44.300]I'm gonna run away\n[02:53.300]I'm gonna burn my house down.\n[02:54.300]And never look back.\n[02:56.300]And never look back.\n[02:58.300]AND NEVER LOOK BACK!!\n[02:59.300]WHAT THE HELL'S GOING ON?!\n[03:01.300]CAN SOMEONE TELL ME PLEASE--\n[03:03.300]WHY, I'M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[03:06.300]I'M black, THEN I'M white!!\n[03:08.300]NO!!!\n[03:08.300]SOMETHING ISN'T RIGHT!!\n[03:10.300]MY ENEMY'S INVISIBLE, I DON'T KNOW HOW TO FIGHT!!\n[03:13.300]WHAT THE HELL'S GOING ON?!\n[03:15.300]CAN SOMEONE TELL ME PLEASE--\n[03:17.300]WHY, I'M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[03:20.300]I'M black, THEN I'M white!!\n[03:21.300]NO!!!\n[03:22.300]SOMETHING ISN'T RIGHT!!\n[03:23.300]MY ENEMY'S INVISIBLE, I DON'T KNOW HOW TO FIGHT!!\n[03:27.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[03:31.300]WHEN I'M UP AGAINST\n[03:32.300]THE ECHO IN THE MIRROR!!\n[03:34.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[03:37.300]WHEN I'M UP AGAINST\n[03:39.300]THE ECHO IN THE MIRROR!!","code":200} ...

July 26, 2025 · 2 min · 250 words

记录人生中第一次破解软件!FKvocechat!

前因 可以直接看 记录被voce.chat坑了350 - 屮蛋Blog 正版激活的原理? 一般来说。大部分授权系的软件会将你的授权文件首先经过加密,然后发送到授权服务器,等待授权服务器返回一个正确的状态,然后激活 如何伪造这个正确的状态? 大部分软件的授权通信是通过后端进行的(但是vocechat不一样,它在前端🤣),我们需要捕获软件向授权服务器发送的授权请求以及授权服务器返回的正确状态 假如你发送一个有效的许可证,得到 check: true 这个响应,同时软件本体显示 已激活 。然后发送一个无效的许可证,得到 check: false 这个响应,同时软件本体显示 许可证无效 。那么我们可以非常简单的去破解,只需要让对方服务器无论对软件发送的任意许可证都返回 check: true 即可。 这涉及到响应体修改,需要使用第三方软件,推荐 BurpSuite 上面的情况是一个最简单的授权激活方案。真实情况下可能授权服务器并不会返回一个明确的值,会返回一串密文,然后软件进行解密得到授权可信性信息。如果你使用的软件并未开源,后续的一系列操作就看你造化了 正片,怎么破解VoceChat? 不需要你有一个正版许可证,因为我花350买了😭 部署完毕VoceChat后,进入授权界面开启浏览器的DevTools,如图 设置你的 BurpSuite 软件,全局替换 "sign": false 为 "sign": true 点击手动更新,上传如下内容 LkA5K1paaxyiNckLwYxdektr64uk6zFs322ZAXDp4aQWkTNcY9ztKKFBwpPbonS3TeFTnveHi6w5VR1MVLL4WyEw3QTfHuitLcVkQFjYZoiQumdQ4XPTN9Xo5hwdEZwCmb7rSus1Sg51b87HjRFZEGHSYYUoqRZPhte1sqBxXdRqwpvLubkhvH4kPB4PXddcdLj2bmXSF7Ww3UZ3Sp6LvueXGw3GggDkgKDP4C7466VVhX6gPBZnaQNovX2G5ugnuN9B6uUeeg63jDSVFnZRPF1bZUxPM5cqdA6U399x8uzEpamhMTMkT3ZiQmVerjszsr3vB8K5DvwKXYp6qKtuna5MgQMC4oFKMNKCSPg7F4Eox8s61i1yjtE33JgxXqrwqkJYqDfqQv1La5h3mYnu6PLDcmmgSEuUHaetzbcEfRJrzi4KwiZwmy4kX6RjEp12KjEvVdS7uwd8wEYjiohXFPG2WRhLe9Cz2oLpsy15ssa8Y34EUVbABryKiqv6xpdb8ujiiucyvybAtgsurnYv3D8eRGWZyttnBWfcqWnXWFZvFZx4ZtuW6ML7ZEcNpM3qcdW8mU8L7Jg2C1so1dFE2phwtLpFyCNwSK8QbPFwdg3Fr4BbMDE8Yq5UPwAQrMtEcAJ1nQyDTZSJa4n2CTC3Lo48jHdbVWZYTejfD2a4y4sJxwRTZQkgs4Jx3kAeepAM5weLfq9ogBY4VWRwjCuNJyt1GoVRmhRs7ZvqNTdBvhRx8LSo6cKFx6LZWPZP7q5Pefo3qmof9QdTYU6PGWQNXR5fp7vc 然后你就能得到 原理剖析 VoceChat是前端验证(没绷住),刚才给你们的内容是一个经过base58编码后的内容,解码后为 *,999999,2025-07-16T12:00:03.675696030+00:00,2125-07-16T00:00:00+00:00,266c90ae11f5d0c2f7a42f29108cc4c6480d6c6d16c561adba7d6ff28aab54eaa7236e708efdfd9315a9a88d88709fae5c3029129494d16470121835aca6b9280c41d5c5f73a78d70c8231a8f66b9dbcd513629dd17456d771d2d0caa670208bdcacdf51fca89204b300b35a123fd99978754713e60ec50dcb7ddb5c64e129488250feca1dd52a258bcbf8d6dd8a93601e0f103c8cc457c4da16641777f9d0a440796af0ad32d3551e406b56e129bd40ac19e88423b645e732e991344781a235b7f83a40190c80dbab1ed56259cab296e5ec183228dfd49c0574d1b535b77954542636c0ae5c05e8f542007c608fe0634bcfd8dfabacdf152c006e14c3d30975 一共有4个字段 * 即被授权的域名,这里填 * 就是所有域名的意思。如果你从官方买还只能绑定一个域名🤣。如果你想伪造的更完美就把 * 改为你正在用VoceChat的域名即可 999999 为用户数限制,前端会显示为 No Limit 2025-07-16T12:00:03.675696030+00:00 为授权开始日期 2125-07-16T00:00:00+00:00 为授权结束日期 266c***975 似乎是一个验证码,类似身份证的最后一位验证位,但是貌似不起作用😂 那我花350买的授权谁给我补啊🤣

July 22, 2025 · 1 min · 61 words

都5202年了,还有人不会自建自己的Cloudflare/EdgeOne等各种CDN的优选?

基本思路 想要做一个优选域名,我们首先需要筛选那些质量好的IP 筛选到质量好的IP后,通过各大云解析DNS厂商更新指定优选域名的DNS解析 最后,将你的域名投入使用,测试优选后效果 如何筛选到质量好的IP? 假设你要提高国内的访问质量,我们肯定需要国内的机子,如果自家有NAS就再好不过了 如果你想要三网都优选,那么只有你一台机子是不够的,需要同时拥有电信,移动,联通三网的机子去做IP筛选。如果你要做更高级的地域优选,那就…把每个省的三网机子都拿到手? 有了测试机,接下来我们就需要编写测试脚本 首先我们要知道一个CDN厂商的IP段是什么,这里以Cloudflare为例 我们搜索 Cloudflare IP段 即可找到 对于其他CDN,他们可能并没有直接在网页上公开IP,你需要自行寻找客服咨询 我们得到IP段后,接下来就是编写实际的测试逻辑 我这边仅推荐通过Curl+Resolve实现强制绑定IP访问业务域名然后看返回的状态码正不正常。 注意,这种方案及其考验您的测试机、路由器、ISP、对端服务器的性能! 但这也是最稳妥的测试方法,主播已经见过了太多TCPing 443通,https访问418或者ping得通,TCPing不通的稀奇古怪CDNIP。请保证您的测试方法筛选到的IP能正常访问到您的访问,避免您的服务宕机 线程不必拉太高,针对于Cloudflare这样有 150w IP的CDN,我们可以仅测试C段,也就是测试完 104.18.91.0 直接测试 104.18.92.0 这样可以节省时间,只需要测5000多个IP 最终,我们得到了一组优选IP 对接华为云云解析DNS 为什么推荐华为云? 无他,因为仅华为云一家支持单解析单次记录值支持50个IP、可以创建多个同名解析以及支持仅缓存DNS解析1s(TTL=1) 受益于华为云的这些功能,我们个人用户也可以做到一个域名下面绑定几万个IP(虽然IP不是越多越好) 推荐使用海外版,不需要实名认证 之后通过API文档自行折腾一下API添加DNS解析即可 后期维护 如果你要做三网优选请添加一个默认解析线路,保证您在个别线路宕机时对应线路的用户不会遇到服务宕机 每个CDN厂商的IP段可能会不定时变更,请勤查多看,及时更换失效IP 如果遇到服务异常无法得到优选IP,请不要在脚本中编写危险逻辑,如删除所有解析。这会导致大批量服务宕机 优选并不是主流做法,如果您的站点被攻击,使用自定义CNAME或者IP会导致您的CDN服务商无法为您进行IP调度,高质量IP将被持续攻击,您的CDN服务商可能会采取强制措施如:关停您的业务,封禁您的账号等操作来隔断对方的攻击。当您认为您的站点被攻击时请及时切换到官方为您分配的CNAME或IP

July 21, 2025 · 1 min · 38 words

国内对象存储免流量费?Cloudflare带宽联盟究竟是什么?

这是什么 Cloudflare带宽联盟(Bandwidth Alliance) 由一群具有前瞻性思维的云服务和网络公司组成,致力于为共同客户降低或免除数据传输(带宽)费用。 人话:你买的阿里云OSS,腾讯云COS套上CF就可以免流量费 具体哪些服务支持免流量费? 可以前往 Cloudflare云服务_数据传输_高速云数据传输服务_|Cloudflare中国官网 | Cloudflare 查看 截止到文章发布日,这些服务支持 在这里可以看到,如果您每月需要传输1TB的流量,Cloudflare将为您每月节省如此多的美刀 如何使用? 假如您有一个阿里云OSS实例,正常来说如果您需要绑定自定义域名,需要CNAME到阿里云的Endpoint,如果您恰好使用Cloudflare NS服务器托管您的域名,只需要打开小黄云即可。 Cloudflare将托管您的阿里云OSS流量,从Cloudflare出口的流量将不收取流量费用 基于阿里云5G内存储费用免费的政策,您可以白嫖5G的对象存储 注意事项 永远不要泄露您的源站,也就是上文所说的阿里云OSS Endpoint,如果有人发现了您的源站,这些流量不从Cloudflare出口,您将会被收取费用 当然,大部分对象存储服务商支持配置私有访问,详细规则和使用方法请咨询各方客服

July 21, 2025 · 1 min · 22 words

教你搭建Chevereto这个超级强大的图床!

视频教程 https://b23.tv/E8Z34KM 正式开始 资源: https://r2.2x.nz/chevereto_4.3.6-Pro_unlock.zip (感谢宝塔开心版站长!) 使用 PHP 8.1.29 & MySQL 8.0.36 创建一个网站,然后将我们刚刚下载的ZIP上传到站点根目录并解压 你就会得到这一坨 这里开始分支!如果你是Apache请什么都不要动,它会自动检测 .htaccess 。如果你是Nginx请配置 nginx.txt 里面的伪静态规则 然后根据原 教程.txt PHP 需要 8.1 以上 需要以下PHP扩展: fileinfo imagemagick exif 如果是宝塔 还得删除 PHP 禁用函数 putenv proc_open MYSQL 需要 8.0 以上 伪静态需要使用我提供的 nginx.txt 里面的 如果你用的虚拟主机跟博主一样,也是ispmanager,请这样设置PHP 一切就绪,访问你的站点进行Chevereto的安装向导 疑难解答 如果出现问题,请尝试以管理员身份登录Chevereto,在管理员设置 -> 系统中开启调试模式。这样设置后,Chevereto在出现错误就会告诉你具体发生了什么问题 如果我连系统设置都进不去?请自行找你的PHP Error Log来分析问题 我搭建好的 https://chevereto.php.afo.im/upload 登录后查看所有图片: https://chevereto.php.afo.im/explore/images

July 15, 2025 · 1 min · 55 words

N款CDN/静态托管服务商的优缺点比较

Netlify 注册门槛高,需要使用谷歌邮箱注册。支持IPv6回源。用量限制较宽松,仅有带宽和构建时间限制。 我认为是免费计划里最快的CDN!并且限制很少! 需要注意,构建时间是每月限制。但是流量限制较为宽松 因为节点禁Ping,所以这里用Tcping结果展示 推荐CNAME: apex-loadbalancer.netlify.com Vercel 零成本用上。注册无门槛,延迟良好。用量限制较严格。仅支持IPv4回源。默认的 *.vercel.app 在国内会被SNI阻断,需要绑定自己的域名 Vercel每天可以构建100次,每次构建时间不得超过45分钟 推荐IP: 76.76.21.21 EdgeOne CDN 目前处于内测,需要兑换码。获取方式前往 腾讯云EdgeOne免费计划兑换码 - 立即体验 。无流量和请求数限制。 支持高级回源设置 全球可用区(不含中国大陆) 本人博客目前使用的CDN 默认提供的CNAME延迟一般。下图是使用了本人的HK优选: eo.072103.xyz(注: EdgeOne Page不可用) EdgeOne CDN 中国大陆可用区 需要实名认证,需要域名备案 默认CNAME可用 Cloudflare 无流量和请求数限制。无法被打死 戳我查看优选域名 下图使用本人的分流优选: fenliu.072103.xyz Render 注册简单,具有严格的用量限制 Github Page 需要使用Github Action发布。中国大陆大部分地区会间歇性阻断,不推荐使用

July 13, 2025 · 1 min · 44 words

我用Claude10分钟写了个六子棋...?

前情提要 本来大晚上被干醒了 准备吃点东西睡回笼觉 顺便在QQ群吹水 然后被委托做一个神经小项目 于是就… 开整! 首先使用最熟悉的Python Flask框架! 然后使用最简单的内存数据库! 然后开始调教AI! 这里本想用JSON存的但是聪明小AI最终交付的仍然是内存存储 然后就写出来了!(并非,总共问了7次 上线! 现已可在 https://sixqi.afo.im/ 游玩! 开源: GitHub - afoim/sixqi

July 13, 2025 · 1 min · 21 words

利用Cloudflare Page提供的重定向功能实现无损耗、不限数量的静态重定向!

快速上手! 直接 Fork我的 仓库 。 接着将该仓库连接到Cloudflare部署Worker或Page,然后绑定你的域名 接着更改 _redirects 内的文件 例如: / https://www.afo.im/ 301 /test/* https://test.test/test/:splat 302 则意味着 访问 / 301 永久重定向到 https://www.afo.im/ 访问 /test/* 302 临时重定向到 https://test.test/test/* 已经非常强大了。而且不占用重定向规则配额也不耗费Worker请求数!

July 12, 2025 · 1 min · 28 words

配置Vercel让ITDog测试全部403!

配套视频 https://www.bilibili.com/video/BV1w7GTzMEy7 获取ITDog等拨测服务的IP 因为Vercel不支持IPv6,所以我们只需要获取v4IP 如果你有VPS,直接写一个Py脚本创建一个HTTP服务器记录IP去重即可 如果你只有家里云,可以使用Cloudflare Tunnel,然后获取 CF-Connecting-IP 来曲线救国 结论,你已经获得了你要屏蔽的拨测网站的IP 创建Vercel API Token 前往 https://vercel.com/account/settings/tokens 创建一个Token 抓取防火墙创建/更新接口 前往 https://vercel.com/your-projects/fuwari/firewall 新增规则 随便写点东西然后抓包 PATCH https://vercel.com/api/v1/security/firewall/config/draft?projectId=prj_UfvbpIvawjL2eAETAiZT7hPLR8W2&teamId=team_lemndzHQNJAcTipIF6elB5Md 将主机名 vercel.com 改为 api.vercel.com 。并携带请求头 Authorization ,值为刚才获取的Token 复制刚才的响应并且稍作修改进行测试,看是否能更新成功 可以看到已经200 OK 使用Python脚本创建大批量IP拒绝规则 根据本人测试,Vercel虽然在创建规则的时候有一个 is any of 支持填入多个IP,但是单规则最多只能填写75个,所以我们需要一个Python脚本批量帮我们规划。脚本已经写好 使用: python app.py ip.txt 作用:自动获取指定TXT中的内容并将其中的所有IP添加到拒绝规则 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Vercel防火墙规则更新脚本 用法: python vercelnoitdog.py xxx.txt """ import sys import json import requests import ipaddress from typing import List, Dict, Any # Vercel API配置 API_BASE_URL = "https://api.vercel.com/v1/security/firewall/config/draft" PROJECT_ID = "prj_UfvbpIvawjL2eAETAiZT7hPLR8W2" TEAM_ID = "team_lemndzHQNJAcTipIF6elB5Md" AUTH_TOKEN = "你的Token" RULE_ID = "rule_noitdog_eGxdcK" # 每组最大IP数量 MAX_IPS_PER_GROUP = 75 def validate_ip_or_cidr(ip_str: str) -> bool: """ 验证IP地址或CIDR格式是否有效 """ try: # 尝试解析为IP地址或网络 ipaddress.ip_address(ip_str) return True except ValueError: try: # 尝试解析为CIDR网络 ipaddress.ip_network(ip_str, strict=False) return True except ValueError: return False def read_ips_from_file(file_path: str) -> List[str]: """ 从文件中读取IP地址和CIDR网段 """ ips = [] invalid_entries = [] try: with open(file_path, 'r', encoding='utf-8') as f: for line_num, line in enumerate(f, 1): ip = line.strip() if ip and not ip.startswith('#'): # 忽略空行和注释 if validate_ip_or_cidr(ip): ips.append(ip) else: invalid_entries.append(f"第{line_num}行: {ip}") print(f"从文件 {file_path} 读取到 {len(ips)} 个有效的IP地址/CIDR网段") if invalid_entries: print(f"⚠️ 发现 {len(invalid_entries)} 个无效条目:") for entry in invalid_entries[:5]: # 只显示前5个 print(f" {entry}") if len(invalid_entries) > 5: print(f" ... 还有 {len(invalid_entries) - 5} 个无效条目") return ips except FileNotFoundError: print(f"错误: 文件 {file_path} 不存在") sys.exit(1) except Exception as e: print(f"读取文件时出错: {e}") sys.exit(1) def chunk_ips(ips: List[str], chunk_size: int = MAX_IPS_PER_GROUP) -> List[List[str]]: """ 将IP列表分组,每组最多包含指定数量的IP """ chunks = [] for i in range(0, len(ips), chunk_size): chunks.append(ips[i:i + chunk_size]) return chunks def create_condition_groups(ip_chunks: List[List[str]]) -> List[Dict[str, Any]]: """ 创建条件组,每个组包含一个IP列表 """ condition_groups = [] for ip_chunk in ip_chunks: condition_group = { "conditions": [ { "op": "inc", "type": "ip_address", "value": ip_chunk } ] } condition_groups.append(condition_group) return condition_groups def create_request_payload(condition_groups: List[Dict[str, Any]]) -> Dict[str, Any]: """ 创建请求负载 """ payload = { "action": "rules.update", "id": RULE_ID, "value": { "name": "noitdog", "active": True, "description": "", "conditionGroup": condition_groups, "action": { "mitigate": { "action": "deny", } } } } return payload def send_request(payload: Dict[str, Any]) -> bool: """ 发送PATCH请求到Vercel API """ url = f"{API_BASE_URL}?projectId={PROJECT_ID}&teamId={TEAM_ID}" headers = { "Authorization": f"Bearer {AUTH_TOKEN}", "Content-Type": "application/json" } try: print(f"发送请求到: {url}") print(f"请求数据: {json.dumps(payload, indent=2, ensure_ascii=False)}") response = requests.patch(url, headers=headers, json=payload) print(f"响应状态码: {response.status_code}") print(f"响应内容: {response.text}") if response.status_code == 200: print("✅ 请求成功") return True else: print(f"❌ 请求失败: {response.status_code} - {response.text}") return False except requests.exceptions.RequestException as e: print(f"❌ 网络请求错误: {e}") return False except Exception as e: print(f"❌ 发送请求时出错: {e}") return False def main(): """ 主函数 """ if len(sys.argv) != 2: print("用法: python vercelnoitdog.py <ip_file.txt>") print("示例: python vercelnoitdog.py ips.txt") sys.exit(1) ip_file = sys.argv[1] # 读取IP地址 ips = read_ips_from_file(ip_file) if not ips: print("❌ 没有找到有效的IP地址或CIDR网段") sys.exit(1) # 去重 unique_ips = list(set(ips)) print(f"去重后共有 {len(unique_ips)} 个唯一IP地址/CIDR网段") # 分组 ip_chunks = chunk_ips(unique_ips) print(f"IP地址被分为 {len(ip_chunks)} 组") for i, chunk in enumerate(ip_chunks, 1): print(f"第 {i} 组: {len(chunk)} 个IP/CIDR") # 创建条件组 condition_groups = create_condition_groups(ip_chunks) # 创建请求负载 payload = create_request_payload(condition_groups) # 发送请求 success = send_request(payload) if success: print("\n🎉 防火墙规则更新成功!") else: print("\n💥 防火墙规则更新失败!") sys.exit(1) if __name__ == "__main__": main() 示例ip.txt ...

July 9, 2025 · 8 min · 1659 words