GTX690战术核显卡导弹
type: channel
link: https://www.nekopara.uk/
description: GTX690战术核显卡导弹的猫窝
items: 【日常】并夕夕购入巧克力手办日记
items: 主题开发日志03：在Manjaro上搭建Nginx+PHP环境
items: 主题开发日志02：前端界面开发基本完成
items: 主题开发日志01：优化NekoWebShow加载速度
items: 新瓶装旧酒——卖掉内存后电脑硬件重组记录
items: NetaYume 画图模型使用体验分享
items: 2025年度回顾，2026未来展望
items: 断网自动重连！用Go实现广西大学校园网断网自动登录
items: 阿里云 ESA 回源 IP 段分享，可用于源站保护
items: 调用API实现Typecho博客VisitorLoggerPro插件IP信息更新

【日常】并夕夕购入巧克力手办日记
type: item
date: 2026-02-06T15:07:17+08:00
description: 在并夕夕购入猫娘乐园巧克力手办偶然的机会，刷并夕夕的时候，我发现了一个无盒的巧克力手办，原价200多，我看到的时候，只需要90。说是微瑕，但是保证是正版的手办，我当时买的时候大意了，没细看商品图，啪一下就下单了。结果到货后，发现少了头发一边的丝带。。。《微瑕》，嗯，《微瑕》（不过除此之外，好像真没什么问题，整体挺好的，确实是正品的手办，细节没什么大问题。果然，价格腰斩是有原因的（贴几张图吧！

主题开发日志03：在Manjaro上搭建Nginx+PHP环境
type: item
date: 2026-01-26T13:38:10+08:00
description: 在Manjaro Linux上部署Typecho开发环境因为后面主题的开发就需要实时修改php文件查看效果了，为了方便开发，我决定在自己的电脑上面设置一个基本的Nginx+PHP环境。对于数据库就使用sqlite好了，只是为了搭建一个本地的typecho作为测试平台。在配置期间踩了几个坑，记录一下。软件的安装非常简单，一条命令梭哈：pacman -S nginx php php-fpm php-sqlite php-gd配置软件因为manjaro和其他发行版不太一样，并且我需要这个web服务器以我的用户权限进行运行，方便我更新文件，所以我们需要做出一些更改。php.ini首先是php的配置文件，文件位于/etc/php/php.ini找到下面的部分进修改：上传大小限制：upload_max_filesize = 2M改为upload_max_filesize = 16M然后启用必要的模块，找到以下部分取消注释：extension=curl extension=gd extension=gettext extension=pdo_sqlitewww.conf然后是php的另一个配置文件，让php-fpm以用户身份运行，文件位于/etc/php/php-fpm.d/www.conf找到下面的部分进修改：user = chocola ; <--- 修改这里 group = chocola ; <--- 修改这里 listen.owner = chocola ; <--- 修改这里，确保 Nginx 能和 PHP 通讯 listen.group = chocola ; <--- 修改这里nginx.conf将Nginx的配置文件修改为如下所示： user chocola; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; # Load all installed modules include modules.d/*.conf; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; root /run/media/chocola/DATA/wwwroot; index index.php index.html index.htm; #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ .*\.php(\/.*)*$ { # 你的网站根目录 (如果 server 块里已经写了 root，这行可以省略，但加上保险) root /run/media/chocola/DATA/wwwroot; fastcgi_pass unix:/run/ph…

主题开发日志02：前端界面开发基本完成
type: item
date: 2026-01-24T12:26:14+08:00
description: 博客主题前端界面开发工作基本完成经过一个多星期与Gemini 3 Pro的反复拉扯，终于是把主要的三个部分样式做完了：首页+文章列表+独立页面，文章阅读页面，后台管理页面。感觉还是相当不错的！因为还没开发完成，我这里只放截图。文章首页效果对，没错，我将会把动态立绘放在首页！不过因为立绘很吃性能，所以我特地做了优化，当不在首页浏览时，立绘渲染会暂停节省性能。文章列表效果独立页面效果文章页面效果细心的同学应该已经发现了，对话框是贯穿始终的，而且还是nekopara的风格。没错！对话框将会是主题的一大特色，作用相当于网站的导航栏，同时也会在特定的按钮和链接给出相关的提示，让你感觉像是在玩galgame!后台效果后台页面就完全按照nekopara的设置界面风格来制作了。目前主题的前端开发工作做的差不多了，接下来就是怎么缝合到typecho上面了。

主题开发日志01：优化NekoWebShow加载速度
type: item
date: 2026-01-14T20:43:24+08:00
description: 给NekoWebShow加载提速为期三个月的实习结束了，准备迎来寒假了，我在想要不要做一些有意思的事情。受到Bhao小姐姐博客的启发，我萌生了想要重新装修博客的想法，主题也很明确——猫娘乐园主题。但是，如果还是像我现在这样，用别人的主题改一改，个性化一下，或许还是太没意思了。于是乎，我就想看看能不能自己从零开始做一个主题。真正驱动我做这件事的，是半年前我搞出来了那个NekoWebShow项目，我希望把巧克力的动态立绘直接放在博客首页，只有首页有这种持续的动画效果，其他页面就是静态展示，这样子的话就不会像现在那样打开我的网站后一直占用性能。我希望可以做到只在首页占用一些性能展示动态立绘，而往下浏览查看其他内容的时候，就没有活动的元素了。一方面可以凸显重点，保持整套主题风格的连贯性，另一方面节省访客电脑的性能。当时还是有点犹豫要不要搞，在Bhao小姐姐的群里问了一下，她坚定地回了一个字——“做！”她随后说其实用框架的话就和搭积木差不多，不是很难，于是我下定决心，开干。而今天完成的工作则算是这个主题正式开工之前的前置工作——优化NekoWebShow加载速度为什么需要优化尽管目前的猫娘展示网页运行正常，但是由于模型文件较大，达到了32MB或者64MB，会导致较长的加载时间，如果网速慢那更是雪上加霜。对于纯粹的猫娘展示网页还是可以接受，但是对于个人博客那就是致命的——访客可能会嫌打开太久离开。所以说，这个是必须要优化的。还有一点是，虽然这些专有格式体积庞大，但是转换前的文件却不算大——3-4MB左右的png纹理文件+3MB左右的json定义文件，很明显应该是有办法可以压缩下来的。优化传输的探索——碰壁asm.js一开始，我是希望逆向JS，顺着模型文件的传输路径去找到对应的处理代码，然后求助于AI解决。但是，可悲的是，我千辛万苦挖了半个小时，结果挖出来一段奇怪的js代码，例如：// EMSCRIPTEN_END_FUNCS var vd=[uB,Be,Ke,Fp,Iz,Pz,fA,uB];var wd=[vB,$e,df,ff,hf,eg,jg,lg];var xd=[wB,re,te,Ee,Fe,Qe,Re,We,Xe,Lf,bg,cg,dg,gg,wv,xg,Ji,Gp,yg,zg,Ne,Ag,Iu,Cg,Ki,Dg,Np,Hg,Qp,Rp,Li,an,bn,un,vn,Ln,Mn,Sn,Tn,bo,co,jo,ko,Co,Do,Xo,Yo,lp,mp,vp,wp,hz,Dp,Ep,Op,Ju,xv,Ew,Fw,Cz,Dz,Ez,Fz,Nz,Xz,Yz,$z,bA,dA,ly,Tz,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB,wB];var yd=[xB,ch];var zd=[yB,we,ye,Ce,Ge,He,Ie,Ve,Ze,bf,uf,Xf,hg,ng,zv,Ip];var Ad=[zB,Xg,vi,zB];var Bd=[AB,ue,ve,vg,xe,ze,De,Se,Te,wg,Ue,Ye,_e,cf,rf,vf,xf,Mf,Of,Qf,ag,fg,ig,og,pg,rg,Hp,gz,gy,Zz,sh,th,uh,Qg,oh,qh,Jh,Ch,Dh,Fh,Eh,xi,ci,zi,yh,xh,Bh,Bi,zh,_h,$h,wh,AB,AB,AB,AB,AB,AB,AB,AB,AB,AB,AB,AB];var Cd=[BB,jh];var Dd=[CB,Yf];var Ed=[DB,hi];var Fd=[EB,qf,_f,$f];var Gd=[FB,gi];var Hd=[GB,Gf];var Id=[HB,mf,of,sf,If,HB,HB,HB];var Jd=[IB,bh];var Kd=[JB,fh,wi,JB];var Ld=[KB,ih];var Md=[LB,Af,Eg,Mi,hy,iy,ny,Ny,Gz,aA,cA,Ng,Rg,Yg,Zg,_g,di,ah,Wh,LB,LB,LB,LB,LB,LB,LB,LB,LB,LB,LB,LB,LB];var Nd=[MB,ui];var Od=[NB,Wg,li,NB];var Pd=[OB,Hz,Oz,eA];var Qd=[PB,Hh,Ih,PB];var Rd=[QB,Je,lf,Vf,Bg,Pp,QB,QB];var Sd=[RB,Kf];var Td=[SB,af,e…

新瓶装旧酒——卖掉内存后电脑硬件重组记录
type: item
date: 2026-01-11T23:33:54+08:00
description: 一次“新瓶装旧酒”的电脑装机在以3960元的高价抛售掉服务器的内存后，我面临了内存短缺的问题。虽然我没有全部卖掉，留了两条16G内存作为应急，但是我已经感觉没有这么大的内存，也没必要再去用我的机架式服务器——因为虽然性能确实强劲，但是绝大部分时间是用不完这部分是性能的。而且我还有另一块X99主板，同时白嫖了一个650W电源和一颗E5-1680v4，所以，我决定尝试一下M-ATX主板的小钢炮主机，兼容更常见和便宜的M-ATX主板和ATX电源，稍微有一点拓展性，牺牲一点便携性，但是相比于我的双路机架式服务器，那确实好很多了。而且还有一个问题，毕业后去读研，不一定有地方可以给我安放服务器。所以，老伙计终究还是要提前退休了。仔细权衡后，我以58包邮的价格在并夕夕上搞到了一个M-ATX小钢炮机箱，然后搭配我之前99卖的X99寨板，两条16G DDR4 RECC内存和E5-1680v4。至于显卡，我认为RTX2080Ti涡轮卡塞这玩意里面应该是毫无压力，而且因为涡轮卡，散热应该会更好——废热直接排出机箱。硬盘方面就比较肉疼了，因为服务器是有12个机械硬盘位，真的是为所欲为，现在要进行配置浓缩了，只能选取了一块3TB硬盘作为数据盘，把常用数据和重要数据复制了一份进去，算是做了一次数据的断舍离。系统盘就直接拆现任的256G nvme 固态硬盘了。虽然是降配，但是实际上对于打游戏反而是提升——因为新的CPU虽然综合性能变差了，但是主频更高了，单核性能更强，对打游戏帮助更大，实际上打游戏帧数确实是更高，更稳定了。现在我的机架式服务器已经成废铁开不起来了，上面还留着一些硬盘和CPU（装机照片先是硬件全家福：装机过程相对来说是比较难一些，毕竟空间狭小。花费时间最多的其实是在想怎么理线上面，毕竟想在这么小的空间整理好布线不容易。好在最后还是解决了，装好后效果不错。哦，对了，整个机箱是无光的，是的，无光，机箱连电源指示灯都没有！12CM的风扇当时是想给V100散热买的，根本就没想过灯光这回事，无光的便宜一点。然后显卡的话，涡轮卡也是没有灯光的。。。一个侧透机箱，硬件全部是无光硬件，有点搞笑了。不过显卡就成主角了——因为其他硬件都是黑色的，线材也是黑色的，然后显卡因为改造过外观，是亮粉色——非常的抢眼。解决更换主板后系统启动问题更换主板后，让我意想不到的是，manjaro居然倒地不起了！开机进行系统引导时报错：grub_is_using_legacy_shim_lock_protocol not found经过初步查阅资料，得知这是安全启动导致的问题，但是在原来的机架式服务器上面我安全启动也是关闭的，我就觉得很奇怪了。而且这个问题选择系统快照无法解决，似乎只能重装了？抱着试一试的心态，想看看按照镜像有没有恢复模式。我用U盘启动了manjaro的安装镜像，然后发现有一个检测本地引导文件的选项，我选择了之后，发现它检测出来了本地的系统，然后居然就成功引导启动了！进入桌面后，通过查阅资料似乎是要重新安装一下GRUB，用root执行了以下命令：grub-install然后就正常引导了。

NetaYume 画图模型使用体验分享
type: item
date: 2026-01-09T15:08:41+08:00
description: NetaYume：一个很强的二次元画图模型这段时间没有折腾什么技术方面的内容，自从买了V100，就是天天让V100给我画图，不知不觉花了一大堆图片，有一说一也确实好玩。我想想博客鸽了这么久，不如分享一些不错的画图成果吧。NetaYume模型是Neta Lumina模型微调后的版本，角色理解能力更强。Neta Lumina 的最大优势在于能够理解复杂的自然语言描述。除了使用标签（Tags），Neta Lumina 也能深刻理解自然语言描述（NLP）。模型在训练时学习了多种不同的描述风格，这意味着您可以像与真人画师沟通一样，用完整的句子来描述您想要的画面。以上内容摘自官方文档，所以说，当我初步掌握了如何针对这个模型写提示词的时候，画出来的效果是让我大受震撼的。另外，值得一提的是，我后面还尝试使用它的拆分版本运行，实测H61主板+E3-1220v2+两条8G DDR3内存+P104-100可以跑，但是跑一张1920x1080的图需要跑大概15分钟，而V100只需要5分钟，慢了整整三倍，还是很夸张的。不过也可以理解，一个CUDA核心数1920，另一个5120，差了2.6倍，而且还有显存带宽的差距，所以倒也不奇怪了。好看的巧克力插画其实，我画的最多的角色是猫娘乐园的巧克力，因为好看的同人图太少了。一开始我并没有看文档，想当然地按照常规画图提示词的套路来，虽然结果不够理想，但也抽出来了一些不错的图片：好看是好看，但是感觉像是同人图，没有官方插画那么对味。查阅文档后，我才发现，这个模型有对画师画风进行强化训练，也能比较好地理解角色，所以，我尝试指定了Sayori的画风，得到了出乎意料的惊喜：像！太像了！于是我又尝试去构建了几个不同的场景：真给我画爽了。不过别看这么好看，这是抽卡抽了几百张图，挑出来比较好看的结果，画崩的我就不放出来了。最容易绷的还是手，这个确实没办法，虽然这个模型以及改善了很多，但是还是会不可避免地崩掉一些。尝试指定不同画风另外，因为模型支持指定画师画风，我还尝试了使用别的画师画风去画对应的角色。巧可甜恋的雪村千绘莉，指定为原画师Shiratama画风：初音未来，指定画师TID的画风：看头发和眼睛确实对味了 TID是洛天依官方插画御用画师，所以画出来有点像洛天依（初音未来，指定画师Qys3画风：非常的对味镜音铃，指定画师TID的画风：我还尝试了一下用三种不同画师的画风画了一下巧克力，也就是保持第一张图的随机种子不变，如何分别用三种不同的画师预设画三次：确实就是各自画师的画风风格了，对比还是很明显的。画个香草吧我还是试了一下画香草，但是相对来说没巧克力画的这么完美。因为香草的眼睛上睫毛是平的，虽然多次和AI强调过这个细节，甚至添加了相关的负面提示词，但是总是会画出来有点弧度，导致不太像，结果不理想。其中，图二是最像的，人物的感觉和形象都对了，但是还是差一点感觉。这是抽卡抽了一百多张图才抽出来几张还行的。Z-Image-Tubro试水另外，我发现一些复杂场景描述下，NetaYume没办法很好的驾驭，总是画崩，而Z-Image-Tubro却可以很好的理解画面的描述，进而画出准确的画面。目前在我试过的模型里面，Z-Image-Tubro确实无疑是最强的，只是可惜这个模型是真实画面的通用模型，并没有对二次元插画进行优化，以至于叫它画二次元，画风都是清一色一个样。不过还算可以，至少它在生成图像的时候，对于人造几何体的把控能力，比NetaYume要强得多。我也尝试画了一些图：好像也就只能画对初音未来，巧克力和香草，我用最详细的语言来描述了，还是画不对。不过从构图理解能力，人造几何体绘制能力来看，确实是遥遥领先的。如果这个模型可以微调出来一个二次元专用的版本，那就是无敌。

2025年度回顾，2026未来展望
type: item
date: 2025-12-24T14:59:00+08:00
description: 时间好快，2025年转瞬即逝我感觉上一次写2024年度总结，好像还是前不久的事情，不得不说时间还是太快了。2025年发生了很多很多事情，也算是对我人生影响的关键一年，现在，在这一年即将结束之际，来回顾一下这一年的种种事情。接下来，请看我写流水账（）网站运营方面今年仍然保持了较高强度的更新，虽然我的更新态度是，没事就不更新，更新一般都是事件驱动的，但是因为喜欢各种折腾不知不觉就更新了不少文章。主要的文章还是围绕了解决各种遇到的技术问题，以及分享和记录一些自己感觉有意思的事情。我觉得整个写作过程还是比较有意思的，毕竟博客属于是个人是私人领地，你就是这里的主角。你可以自由的发表你的观点和看法，想骂就骂，想喷就喷，不用在意别人的看法。当然，难免会有人不爽你，不服的话就技术互撕咯，DDoS，CC攻击什么的，一般也都是脚本小子。撕完就又有写文章的素材了，多是一件美事（bushi）发布文章数量在发这篇总结之前，今年一共发了56篇文章（其实是57篇，有一篇因为某些原因隐藏了），算是很高产了平均每个月发4-5篇文章，已经遥遥领先绝大部分友链博客了。这其中，技术类文章的占比仍然是主流，毕竟我当时创立这个博客的想法，就是打算当作一个个人技术笔记来使用，并穿插一部分其他内容。网站被打次数小的攻击，上不了台面的，就算了，这里就统计对我网站造成实际影响的被攻击次数——7次！而且集中在今年下半年9-10月其中，DDoS攻击6次，最高攻击流量达到了惊人的79Gbps！被DDoS UDP流量狠狠灌注的感觉真是太爽了，特别是让对面发现使劲打了还打不死，更乐了。虽然云服务器被黑洞，但是仍然可以保证网站访问，我估计对面已经红温了。具体的配置方法，可以去看看这篇文章：绕过黑洞！利用VPC内网互通低成本实现DDoS攻击下网站高可用另外，在最后一次DDoS攻击之后，有一次大规模CC攻击，通过随机URL请求绕过了我的缓存策略，打在我服务器上拳拳到肉，直接把网站拖垮了。事后我也复盘了，搞了更优的限流防御策略，虽然仍然存在被打垮的可能，但是极大提高了攻击者的攻击代价。想看更详细的信息，可以看一下这篇文章：个人博客低成本CC防护：抵御85%+常见CC攻击就在这次CC后，我网站到目前为止，没有被打垮过了，也没再有过DDoS。在这里要感谢脚本小子的陪练。尝试开设新网站：猫娘答案屋因为之前觉得nekowork.org这个域名挺好的，就盘下来了，之前是作为个人信息聚合页面，感觉还是太浪费了，正巧我有路子可以获得一些网课答案，于是就想拿来搞一个用于分享大学网课答案的网站。但是看了一下搜索引擎的流量表现，好像确实不怎么样，基本上没什么权重，有点可惜。其实三月份的时候就尝试整理了几个网课的答案，然后发现太累太花时间，就没能坚持下来。所以中间断更了半年多，也没再怎么管过这个网站。然后最近手又痒痒了，想尝试一下自动化爬虫抓取答案，当作是爬虫练习去尝试。你别说，配合现在的大语言模型，写一些基础的代码还是相当轻松的，特别是当你有了程序实现逻辑的想法，直接让AI来帮你实现具体的代码就好了。经过几天的测试迭代，我也是成功写出了一套针对那个网课网站的自动化爬虫程序，可以实现自动获取章节作业的标题，随机选择答案，提交答案，保存题目和正确答案的过程，行云流水。但是这只是半自动爬虫，仍需要我手动进入课程，点开作业章节。不过，相对于手动提交答案后复制整理正确答案，速度确实快多了，而且不折磨人。如果网课作业量不算多，作业的章节10个左右的话，基本上一个网课10分钟能整理好，章节里面的题目越多，效率越高。我相信有这套工具加持，我应该是可以持续更新那个答案站的，只要我有时间有精力。白嫖华为云那些事2025年是华为云大撒币的最后一年了，大概10月份的时候，就是最后一次活动了。整个活动持续了大约一年，2024年9月开始有这类白嫖活动，高强度大撒币到2025年9月，后面就调整政策不撒了。有点可惜的是我8月份因为忙保研那些事情，没心思参加，缺席了一次活动，痛失1k代金券。估计后面华为云也不会再搞这类活动了，毕竟一次活动，一千多号人，一人一千这样发，虽然是云资源代金券，但是也是烧钱的。目前我的白嫖战果是：主服务器实例到 2035年6月1日过期 累计白嫖了十余年使用权（2024年9月20日-2035年6月1日）备用服务器实例到 2031年1月18日过期 累计白嫖五年多使用权（2025年9月28日-2031年1月18日）这两个服务器将是我未来网站运行的中流砥柱，关键力量，坚实根基，核心支撑，稳定基石，动力源泉，保障中坚，运转中枢，可靠依托，发展支柱，存续命脉，效能核心，运行保障，长远依托，根基所在，关键支撑，不可或缺，至关重要。它们既是网站平稳运行的固本之基，也是长远发展的赋能之要，更是持续服务的立命之本，为平台建设提供坚实保障，为功…

断网自动重连！用Go实现广西大学校园网断网自动登录
type: item
date: 2025-12-20T15:56:00+08:00
description: 广西大学校园网断网自动重连程序因为广西某211高校校园网有时候会不稳定波动，导致设备掉线。而如果在需要挂机进行一些工作的场合出现这个问题，将会相当蛋疼。再加上在宿舍每天晚上断网后，第二天都要手动重新登录着实有点麻烦，于是乎我就用我入门级中的入门级Go编程能力写了这个程序。程序实现登录方法查找因为学校推荐是使用浏览器打开认真网页进行登录，而经过抓包后，我发现相比于大一的时候，校园网的网页传输数据进行了加密。也就是，如果我要通过逆向网页JavaScript脚本获得登录请求发送逻辑，代价有点大。不过好在你西还是关照到了无GUI Linux服务器使用校园网的问题，在官网挂出了登录方法：linux系统宽带客户端-2024.12.30日后使用这就好办了嘛，只需要构造这个URL请求：http://172.17.0.2:801/eportal/portal/login?callback=dr1003&login_method=1&user_account=账号@cmcc&user_password=密码&wlan_user_ip=终端IP&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.2.1&terminal_type=1&lang=zh-cn&v=5574&lang=zh发送给认证服务器就可以登录校园网了。不过我注意到了这个请求URL里面，MAC填写了000000000000，按理来说这部分应该填写设备的MAC，用于保持登录状态和后续无感知登录。这样填写无效的MAC后面大概率会因为校园网波动或者短暂断联掉登录，所以在我的程序逻辑上，这部分应该补上。现在需要发送的校园网认证信息就理清楚了：账号密码线路类型设备IP设备MAC我只需要写一个程序获取到以上信息，然后持续不断判断网络通断状态，当检测到断网后构造认证的URL并发送，就可以实现校园网断网自动重连了。用Go实现校园网自动登录其实之前我就用Python写过一版校园网自动登录程序，但是因为Python的效率和占用确实有点感人了，所以我觉得还是选择编译型语言来进行构建吧。好巧不巧之前学了一些Golang，要不就拿这个试试看？实现思路因为Go是编译型语言，登录的配置就不能像Python那样让用户打开源代码写在对应的变量里面了，得写一个配置文件机制。也就是首次运行创建一个文本的配置文件，然后用户填写了相关的信息，再运行程序，程序从配置文件读取信息并且执行校园网认证和断网自动重连工作。那这样看，实现思路就很清晰了：程序首次运行，输出配置文件模板，提示用户填写用户填写好后，读取配置文件并进行基础的校验，确保参数填写无误实现校园网登录认证的函数，网络通断检测函数，以及上网时段判断函数避免在非上网时段反复尝试重连对于配置文件的部分，我想采用类似ini配置文件的格式，这是模板：# 校园网登录脚本信息设置：（注意请不要改变格式） # 用户名：（填写示例：User=1807210721） User= # 密码：（填写示例：Password=www.nekopara.uk） Password= # 运营商选择，留空选择校园网，如果需要选择运营商，电信填写telecom，联通填写unicom，移动填写cmcc Net_Type= # 是否开启学生上网时段模式？1为开启，0为关闭，开启后周一到周五0:00-6:00将不会尝试重连 Student_Mode=0 # 开启路由器登录模式： # 如果填写以下两个参数（均非空），则使用指定的路由器IP和MAC进行认证。 # 否则使用本机IP和MAC。 # 示例： # Router_IP=172.16.6.6 # Router_MAC=36:88:8A:99:A4:CC Router_IP= Router_MAC=考虑到为了便于小白使用，我输出的是.txt文件，可以直接记事本打开。以及，添加一个命令行启动参数支持，可以让程序作为服务运行和部署，例如：./GXU_Net_AutoLogin -user 1807210721 -passwd mypassword -nettype telecom -studentmode -ip 172.16.6.6 -mac 36:88:8A:99:A4:CC现在技术架构想清楚了，开始编程吧！实现代码package main import ( "bufio" "fmt" "os" "strings" "net/http" "net" "net/url" "time" "io" "flag" ) const configFileName = "config.txt" // Config 结构体保存配置 type Config struc…

阿里云 ESA 回源 IP 段分享，可用于源站保护
type: item
date: 2025-12-18T17:04:00+08:00
description: 分享阿里云 ESA 回源 IP 段因为阿里云的源站防护功能，在免费版用不了，而我需要在源站设置访问白名单，于是就需要找一份阿里云 ESA 回源 IP 段列表。Cloudflare和EdgeOne都是公开回源IP段的，同样是属于CDN的ESA居然不公开，有点离谱，不过看样子应该是想作为增值服务，付费才能开源站保护（）好巧不巧，这段时间基础版ESA都可以免费领取一个月，而基础版ESA是可以开启源站保护的，所以自然也就拿到了回源的IP段列表。虽然文档说这是收敛后的IP段列表，但是得到的回源IP估摸着大概有1700+个，而且我和群友交叉验证过，得到的IP段是一模一样的。应该是收敛之前的完整IP段。估计可能的原因是我没有添加任何要加速的子域名，直接先开源站保护，导致返回了全量的IP段——这是好事啊！连统计和汇总都省了。（后记补充：打脸了，后面进一步测试后发现，免费版和基础版回源IP段是分开的，不用白费力气了）现在我就分享出来，给需要的站长参考。IP段可以用来设置源服务器的访问白名单，避免源服务器被扫描。具体如何使用，懂得人自然会懂，如果不知道的话，可以看一下这篇文章：绕过黑洞！利用VPC内网互通低成本实现DDoS攻击下网站高可用中的代理服务器安全组设置（可选）这一小节。请注意，文中获取到的IP段很有可能是有时效性的，不保证未来可用！获取的时间为2025年12月18日，如果时间过去的太久，需要使用请先验证！测试后补充：免费版和基础版回源IP段是分开的，所以想白嫖源站保护是不太可能的，后续也不要白费力气了。这篇文章就当作教训挂在这里了。全部 IPv4 回源 IP 段39.96.151.128/25 111.13.222.128/25 111.206.190.0/25 49.7.41.128/25 111.7.71.0/25 117.49.24.96/27 183.131.47.64/26 117.49.26.96/27 27.128.150.128/25 222.138.192.0/25 111.63.174.128/25 123.149.174.0/25 39.173.24.0/26 117.49.24.128/26 117.49.173.192/26 117.49.26.128/26 101.69.215.128/26 163.181.67.128/25 175.4.42.0/25 183.215.56.0/25 116.163.14.128/25 157.255.137.128/25 117.49.181.0/25 183.60.170.128/25 120.241.64.0/25 8.147.217.48/29 8.147.217.32/28 114.250.55.64/26 106.38.245.128/26 221.179.212.0/26 8.147.217.0/27 163.181.122.128/25 36.156.79.0/25 183.136.179.64/26 120.222.205.128/25 60.188.139.0/26 163.181.15.128/25 120.241.14.64/26 112.90.140.64/26 120.241.13.128/26 163.181.89.128/25 61.241.9.128/25 124.95.162.128/25 222.141.35.128/25 42.96.222.128/25 117.49.152.64/26 106.38.189.128/25 117.49.153.0/25 39.156.171.128/25 111.7.83.128/25 219.144.87.0/25 117.49.3.128/26 8.152.80.0/25 114.232.93.0/25 150.139.146.128/25 123.126.111.128/25 140.249.255.128/25 39.173.42.128/25 59.36.91.0/26 120.222.200.128/25 111.19.142.0/25 113.201.176.0/25 122.193.247.0/25 183.36.45.64/26 139.129.78.0/25 183.240.195.128/25 117.49.179.0/25 36.99.21.0/25 27.221.6.128/25 42.248.141.128/25 124.160.142.128/26 112.17.15.224/27 115.238.4.128/25 8.147.211.128/25 101.67.60.128/25 58.251.89.64/26 120.201.61.128/25 112.13.103…

调用API实现Typecho博客VisitorLoggerPro插件IP信息更新
type: item
date: 2025-12-17T23:30:06+08:00
description: 利用B站IP查询API更新访客记录IP地理信息偶然的一次机会，在群里面聊天的时候，群友指出纯真数据库的数据并不准确，并且说有一个可以免费调用的IP地理信息库——B站的IP查询API。据说还是用的ipip.net的企业版，这下得狠狠白嫖了。前置任务：修复VisitorLoggerPro插件BUG如果使用过这个插件一段时间，你就应该发现了，在国家统计图表这项，非常的混乱，似乎是只要记录的字符不一致，就会被当作不同的国家处理，例如美国加利福尼亚洛杉矶和美国纽约就被当作不同的国家列在上面。经过深挖代码斗智斗勇，我发现这个问题我无法从根本解决，因为整个代码太奇怪了，而且用的本地IP数据库也都是乱七八糟的，根本没有做好国家的细分地区分类，一股脑返回，导致所有的信息被集中在一起写进了国家字段。于是，我放弃治疗，直接在后面的调用代码中，增加分类逻辑进行分类：这是原来的代码，单独处理和提取了国内省份： foreach ($countryCountsResult as $row) { $countryName = $row['country'] ?: '未知'; $count = $row['count']; if (!isset($countryData[$countryName])) { $countryData[$countryName] = 0; $totalCountries++; } $countryData[$countryName] += $count; if (strpos($countryName, '中国') !== false) { foreach ($provinces as $province) { if (strpos($countryName, $province) !== false) { if (!isset($provinceData[$province])) { $provinceData[$province] = 0; } $provinceData[$province] += $count; break; } } } }我决定在返回国家信息的时候，进行提取合并并返回： foreach ($countryCountsResult as $row) { $rawCountry = $row['country'] ?? ''; $count = (int)($row['count'] ?? 0); if ($rawCountry === '') { $stdCountry = '未知'; } elseif (strpos($rawCountry, '中国') !== false) { // 所有含“中国”的都归为“中国” $stdCountry = '中国'; // 同时尝试提取省份 foreach ($provinces as $province) { if (strpos($rawCountry, $province) !== false) { if (!isset($provinceData[$province])) { $provinceData[$province] = 0; } $provinceData[$province] += $count; break; // 匹配到第一个即停止 } } } else { // 非中国：尝试匹配标准国家名（用于归一化，如“美国加州”→“美国”） $stdCountry = $rawCountry; // 默认保留原值 foreach ($countries as $country) { if (strpos($rawCountry, $country) !== false) { $stdCountry = $country; break; // 匹配到即停止（因列表已按长优先排序） } } } // 累计国家统计 if (!isset($countryData[$stdCountry])) { $countryData[$stdCountry] = 0; $totalCountries++; } $countryData[$stdCountry] += $count; }当然了，需要补上完整的国家地区列表： $countries = [ // 长名称国家（必须放前面） '波斯尼亚和黑塞哥维那', '赤道几内亚', '圣文森特和格林纳丁斯', '特立尼达和多巴哥', '圣多美和普林西比', '阿拉伯联合酋长国', '沙特阿拉伯', '巴布亚新几内亚', '所罗门群岛', '马绍尔群岛', '密克罗尼西亚联邦', '帕劳共和国', '瓦努阿图共和国', '基里巴斯共和国', '瑙鲁共和国', '图瓦卢', '美属萨摩亚', '英属维尔京群岛', '美属维尔京群…