包含关键字 API 的文章

今天是2025年1月11日,硬核灌水第4期,以下是本期的主要内容:
谷歌与 Linux 基金会联合成立 Chromium 支持者俱乐部,吸引微软等巨头加入,试图在反垄断压力下巩固生态;微软 Azure 网络故障持续两天,部分服务仍不稳定,影响广泛;英特尔 Vulkan 驱动初步支持 AV1 解码,惠及最新硬件用户;Wine 10.0-rc5 修复 31 个错误,为 Windows 游戏和应用程序在 Linux 上的运行优化铺平道路;VKD3D-Proton 2.14.1 的修复提升了 Direct3D 12 在 Vulkan 上的表现。

谷歌和 Linux 基金会成立 Chromium 支持者俱乐部

来源:theregister
Google与Linux基金会合作成立了“基于Chromium浏览器的支持者”基金,旨在促进Chromium生态系统的开放开发和项目增强。
该基金由Linux基金会管理,旨在为Chromium项目提供一个中立的平台,支持包括Google Chrome、Microsoft Edge、Opera和Brave在内的多种浏览器。
Meta、微软和Opera等主要公司已加入该计划。微软表示,此举将有助于提供明确的治理,并将资金用于社区驱动的需求。
Google强调了其对Chromium的重大贡献,去年提交了超过10万次代码,占总贡献的约94%,并在基础设施方面进行了大量投资。
此举正值美国司法部要求Google出售Chrome之际,Google提议在三年内取消与其他浏览器设定默认搜索引擎的独家协议。

小石:反垄断大棒敲下来的时候知道疼了。

Azure 网络故障进入第二天,部分服务仍不稳定

来源:theregister
微软的 Azure 云服务在 2025 年 1 月 8 日 22:00(UTC)左右开始出现网络问题,主要影响美国东部 2 区域的一个可用区。
此次故障导致多个服务出现间歇性错误,包括 Azure Databricks、Azure 容器应用、Azure 函数应用、Azure 应用服务、SQL 托管实例、Azure 数据工厂、Azure 容器实例、PowerBI、虚拟机规模集(VMSS)和 PostgreSQL 灵活服务器等。
微软采取了流量重路由等措施进行修复,截至 1 月 10 日 16:39(UTC),受影响的分区已恢复上线,相关服务也显示出显著的恢复迹象。
然而,微软提醒用户,部分服务可能仍会出现间歇性错误和性能下降,建议受影响的客户执行灾难恢复计划。
微软承诺将每小时提供进度更新,以确保用户及时了解恢复情况。
微软将问题归咎于美国东部地区网络服务配置变化。

小石:我还以为机房烧了,不知道SLA赔了多少。

英特尔的开源 Vulkan 驱动程序(ANV)已在 Mesa 25.0 中合并了初步的 AV1 解码支持。

此前,使用 VA-API 接口的英特尔媒体驱动程序已支持 AV1 视频的编码和解码。
此次更新由咨询公司 Igalia 的 Hyunjun Ko 开发,
支持 10 位解码、IntraBC、循环内超分辨率等功能。
该功能预计适用于从 Tigerlake / Gen11 到最新的 Gen12 的英特尔图形硬件,主要在 Gen12 上进行了测试。
用户可在本季度晚些时候发布的 Mesa 25.0 中体验这一功能。
值得注意的是,Vulkan Video 的 AV1 解码扩展于 2024 年 2 月完成,
AMD 的 RADV 驱动程序也已在大约一年前实现了对 AV1 解码的支持

小石:我的DG-1显卡(Gen12 dGPU)也是受益者,刚发布的时候爹不亲妈不爱早产弃子真是太难了。

Wine 10.0-rc5 又修复了 31 个错误

来源: Michael Larabel
Wine 10.0正在努力在未来一两周内发布稳定版本,但今天发布的 Wine 10.0-rc5 进行了最新一轮修复。Wine
10.0 正在努力很快为这款开源软件发布稳定版本,该软件允许 Windows 游戏和应用程序在 Linux/ChromeOS、macOS 和 BSD 等环境中运行。Wine 10.0-rc5 刚刚作为最新的每周候选版本发布,同时即将发布 v10.0 稳定版。Wine
10.0-rc5 本周修复了 31 个已知错误。由于开发人员从年底假期回来,现在修复错误的工作量很大。在这 31 个错误修复中,有帮助 微软高尔夫 2.0、极速狂飙 4、超级弹球、格斗工厂 3、文明 4 和辐射 3。 和一系列其他游戏和应用程序进行了不同的修复。本周的修复真是无处不在。

VKD3D-Proton 2.14.1 为 Vulkan 上的 Direct3D 12 带来了一些修复

来源: Michael Larabel
VKD3D-Proton 2.14.1 已发布,修复了在不支持稀疏资源的 GPU(如 Intel 集成显卡)上启动时的崩溃问题,解决了影响 NVK 的内存分配问题,修正了在 NVIDIA GPU 上运行《地平线 零之曙光 重制版》时的 CPU 性能回退问题,并为《Arma Reforger》添加了 no_upload_hvv 解决方法,以应对异常的资源加载行为。
小石:虽然看上去稀松平常,但是大量的Linux用户的游戏体验都与之息息相关。

很简单:卸载/冻结
com.oplus.appdetail
最好把广告商店
com.heytap.market
也干掉。

不怕死的用户

直接全冻:
["com.heytap.browser","com.nearme.instant.platform","com.oplus.logkit","com.oplus.thirdkit","com.oplus.upgradeguide","com.oplus.ota","com.oplus.sau","com.oplus.nhs","com.oplus.vdc","com.oplus.pay","com.oplus.pantanal.ums","com.coloros.securityguard","com.baidu.input_oppo","com.oplus.statistics.rom","com.android.ext.adservices.api","com.snda.wifilocating","com.coloros.weather.service","com.oplus.romupdate","com.coloros.bootreg","com.heytap.pictorial","com.oplus.acc.gac","com.oplus.safecenter","com.coloros.video","com.oplus.appdetail","com.heytap.market","com.oplus.olc"]

昨晚无意间发现的,睡前随手打开博客结果转圈然后Connect Rest/Closed,刚开始以为服务器被墙了,就顺手打开笔记本看了一眼。

开始看乐子

Ping了一下域名,正常响应了,看来没被墙,SSH服务正常登录上去Htop看了一眼,CPU占用100%,RAM倒是没什么影响。 刚开始也没在意,只当是出了点bug抽风一下,直接重启。
重启后刚开始还能打开页面,过了几秒又是Connection Rest/Closed,htop命令上php-fpm占用居高不下,想了想可能是被攻击了,稍微上点心开始看日志。
cat /var/log/nginx/access.log
日志一直刷不完,那就
tail -f /var/log/nginx/access.log
看了下,刷不完是因为后面访问记录一直在高频刷写。
这里随意摘出来一部分:

35.197.121.158 - - [10/Aug/2023:01:10:23 +0800] "GET /?nonce=ce167aaf-483f-4887-b710-4fa822ef5e34&param1=4GDzirKVEe&param2=gA6vVX8eaw&timestamp=1691601014 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0"
198.23.254.212 - - [10/Aug/2023:01:10:23 +0800] "GET /api/p/index.php HTTP/1.0" 404 153 "-" "-"
35.197.71.216 - - [10/Aug/2023:01:10:23 +0800] "GET /?nonce=7fb35c3b-a136-4223-b68a-8317ee501a07&param1=7RvcaEVkej&param2=gnVzSYROZ3&timestamp=1691601015 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10"
34.66.111.163 - - [10/Aug/2023:01:10:23 +0800] "GET /?nonce=b3f2bfc1-de55-4c22-a701-7f68052dc544&param1=vrkJ5thvM7&param2=fgIC6O2tJz&timestamp=1691601015 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (Linux; Android 5.0.1; ALE-L23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36"
198.23.254.212 - - [10/Aug/2023:01:10:24 +0800] "GET /api/p/index.php HTTP/1.0" 404 153 "-" "-"
34.66.111.163 - - [10/Aug/2023:01:10:24 +0800] "GET /?nonce=d4aa11be-98fa-4750-a0eb-5d0dc5776086&param1=QtOZIkFllL&param2=QSGsDtkQ0d&timestamp=1691601015 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B436 Safari/600.1.4"
35.197.121.158 - - [10/Aug/2023:01:10:24 +0800] "GET /?nonce=426e4139-08f4-4f34-a37f-b71370953631&param1=IeNOGHrPqK&param2=rdtWgqRdps&timestamp=1691601015 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
35.197.71.216 - - [10/Aug/2023:01:10:24 +0800] "GET /?nonce=0a8da378-ece3-49ee-9ec2-2236e2757c50&param1=xjEtLEFZAf&param2=fNBFJMmWv2&timestamp=1691601015 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.33 Safari/537.31 SmartTV/5.0"
34.66.111.163 - - [10/Aug/2023:01:10:24 +0800] "GET /?nonce=5418aacd-821e-4d70-8fe8-979ee757d923&param1=SRCtiYzr7m&param2=bg3Ce86SOK&timestamp=1691601015 HTTP/2.0" 200 10389 "-" "Mozilla/5.0 (Linux; Android 7.0; SM-G610M Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/191.0.0.35.96;]"

稍作分析

198.23.254.212是服务器自己发出的正常请求,不过这个api我貌似早就弃用了,后续去看看主题文件是不是没删掉。
其他ip随机抓下来查了下都是美国谷歌的机房IP。UA估计也没啥真实性,都是随机出来的垃圾数据。
之前也有找朋友DDoS帮我测压,国内服务器1TB下去没买防御套餐直接就黑洞了,不过我这个国外的VPS就没那么脆弱了,目前从头到尾除了博客打不开其他服务都正常运行,因为这个服务器带宽不小亦不是按流量计费,上面也没需要100%全天运行的东西,之前就没怎么关心防DDoS/CC。

第一次遇到还是挺新奇的,群友的博客服务器之前也有遇到过访问日志一直刷的。当晚也没什么事情就在B站开了个直播和网友一起看日志刷屏,顺便一起聊聊天。有个粉丝说关注我第一次看见我开播哈哈,正好赶上当作活素材了。

睡觉之前,给NAS装上了OBS,然后在Nas上继续串流直播。
今天睡醒把这事都忘了,刚才爬起来上去看nas命令行已经停掉了,直播间有粉丝留言说攻击已经停了可以正常访问了。
报错是:client_loop: send disconnect: Broken pipe
然后看了看中断之前日志上最后一个访问的异常ip是35.197.121.158,
http访问过去,页面就一个ヾ(*ФωФ)βyё βyё☆彡,又试了试另一个ip,也是一样。

乐子结束

不知道是哪家的小孩打着玩的,本来当天晚上打算看看有没有什么防火墙工具可以处理一下,但是这点流量又没什么技术性也就没什么实质性威胁我就懒得管了,挂着直播给网友娱乐,我直接睡觉去。

EA的服务器就像烂番茄,不是在出问题,就是在出问题的路上。
EA三部曲:
1.您的凭据不正确或已过期。请重试或重置您的密码。
2.很抱歉,我们遇到了一些技术难题。请稍后再试。
3.您的认证信息不正确或已过期。请重试或重置密码。
什么?网络有问题?今天你学习强国了吗?乐~~

冷静思考

根据17次登录和重置操作做出猜想:EA可能对登录设备和IP地址进行了对比,如果重置密码时使用了代理,登录时也应当使用相同的IP做代理。一旦使用EA各项服务的过程中多次改换IP地址,就会不断出现“EA三部曲”问题。

似乎密切相关的信息

解决网络原因导致的Origin/EA DESKTOP 您的计算机目前处于离线状态 / Double-Check your connection / 目前不能使用您的账户在本机连接到EA服务器激活————Posted on 2022年1月19日 by 羽翼城|Dogfight360
EA Desktop客户端登录似乎有一个必须的校验服务器,HOST对应关系:
159.153.190.222 proxy.novafusion.ea.com
测试发现国内外可以正确解析IP地址但是完全无法ping通,可能服务器关闭了Ping回复。
CURL请求发现校园网环境下(IP出口为移动宽带)无法正常请求,但代理后以及其他多地服务器测试均可正常请求,猜测可能被本地运营商或学校防火墙阻断。(试过本地运营商的5G流量能打开,没有被阻断,所以后者的可能性更大)
PS C:\Users\xfox> curl https://proxy.novafusion.ea.com
curl : 基础连接已经关闭: 发送时发生错误。
........

校园网....乐.....
Fiddler抓包发现,EA Desktop启动后验证服务与以下域名密切相关密切相关

校园网环境下通过Steam调用EA启动BF1截图2022-10-31T17:56:12.png
confluence.ea.com:80
ratt.juno.ea.com:443
当然这只是开头的一两个,实际登录过程还有很多别的域名,下面会总结以下。
移动5G流量环境下截图2022-10-31T18:19:59.png

顺便,我通过5G移动网络进行了一次登录的测试,第一次毫无疑问依旧出现EA三部曲问题里的问题1,但是在不加代理完成一次更新密码的操作后,EA客户端顺利的完成了一次登录。这佐证了我的猜想,EA确实对帐号登录和密码重置时的客户端IP有严格的校验。

猜想2(尚未证实但是证实了别的)

校园网防火墙限制单个帐号带宽的同时还加强了对特定网站/数据包类型的限制。
使用校园网(移动)出网口Ping ratt.juno.ea.com发现解析到 e16166.e12.akamaiedge.net [23.5.245.219]延迟高达205ms+
而使用移动5G流量解析到了 e16166.e12.akamaiedge.net [223.119.223.211]最短 = 77ms,最长 = 117ms,平均 = 92ms
查询得知前者是美国加利福尼亚圣何塞 Akamai机房,后者是香港移动机房。
显而易见的,不管校园网有没有故意墙端口,都可以发现本地移动宽带在出口线路质量上远不如移动的数据流量。(大概因为后者更贵吧xd)随后我再次切到校园网发现EA客户端快速掉线,Ping ratt.juno.ea.com解析到了 e16166.e12.akamaiedge.net [125.56.150.63] 最短 = 102ms,最长 = 751ms,平均 = 140ms 数据包: 已发送 = 23,已接收 = 17,丢失 = 6 (26% 丢失)
这个丢包率可真行,现在可是凌晨2:48!所以,在我对这些关键域名完成转发之前,我最好老老实实开流量玩。=-=

总结EA客户端启动到登录完成所需域名:

ratt.juno.ea.com
service-aggregation-layer.juno.ea.com
accounts.ea.com
api1.origin.com
pc.ea.com
service-aggregation-layer-subs.juno.ea.com
c.go-mpulse.net
contentful-proxy.juno.ea.com
pin-river.data.ea.com
bam.nr-data.net
storage.googleapis.com
www.google-analytics.com
pin-em.data.ea.com
groups.gameservices.ea.com:443
friends.gs.ea.com:443
sdk.split.io
rtm.tnt-ea.com:8095
achievements.gameservices.ea.com
cdn.mcr.ea.com

Steam调用EA2Link启动BF1请求域名列表

ratt.juno.ea.com
accounts.ea.com
api1.origin.com
service-aggregation-layer.juno.ea.com
pc.ea.com
service-aggregation-layer-subs.juno.ea.com
pin-river.data.ea.com
contentful-proxy.juno.ea.com
bam.nr-data.net
www.google-analytics.com
c.go-mpulse.net
pin-em.data.ea.com
storage.googleapis.com
friends.gs.ea.com:443
groups.gameservices.ea.com:443
sdk.split.io
rtm.tnt-ea.com:8095
gateway.ea.com
events.split.io
privacy.xboxlive.com
presence-heartbeat.xboxlive.com

理论上确保这些域名的请求正常响应就可以保证EA客户端正常上线且保活。

更新:校园网连SSH都ban了,已向老师求证

一个字:

对于新手不管是使用DevEco 给HarmonyOS开发还是用用AS给Android开发应用,要完成窗口组件和一个网络请求得到数据的的绑定都异常的繁琐,有些问题没人教根本无法解决。但是同样的问题在Windows和Linux上几乎不存在,这似乎和JAVA这个怨种语言有分不开的关系。
很遗憾我现在嗐没办法用上eTS给手机开发,因为API6仅仅支持JS和JAVA,所以截至到现在,移动端应用开发的工具对于我就是浪费空间和多次尝试时间的电子垃圾。

为什么没有叕?因为这是有记载的第三次。(实际是第N次)
原服务器:阿里云 老云翼转享1c2g5m
现服务器:腾讯云 某活动轻量2c2g4m
下次迁移:一年后
2022年7月11日:
我貌似迁移的时候把api.xfox.fun整个站点漏过去了,程序和数据全无。啊啊啊啊啊啊啊啊啊😢

Shell脚本实现方案

方案1:缺点无法自动选择有效时间长的ipv6长地址,但是仅需一个Shell文件即可完成。
#!/usr/bin/bash    
dnspod_ddnsipv6_id="#####" #【API_id】将引号内容修改为获取的API的ID
dnspod_ddnsipv6_token="####" #【API_token】将引号内容修改为获取的API的token
dnspod_ddnsipv6_ttl="600" # 【ttl时间】解析记录在 DNS 服务器缓存的生存时间,默认600(s/秒)
dnspod_ddnsipv6_domain='######' #【已注册域名】引号里改成自己注册的域名
dnspod_ddnsipv6_subdomain='#####' #【二级域名】将引号内容修改为自己想要的名字,需要符合域名规范,附常用的规范
local_net="eth0" # 【网络适配器】 默认为eth0,如果你的公网ipv6地址不在eth0上,需要修改为对应的网络适配器
# 常用的规范【二级域名】
# 【www】 常见主机记录,将域名解析为 www.test.com
# 【@】   直接解析主域名 test.com
# 【*】   泛解析,匹配其他所有域名 *.test.com
#  改进了非fe80开头内网地址被误解析的错误。ps:仅支持中国电信,中国联通,中国移动使用,若国外ipv6无法解析请自行修改脚本。
# 举例
# 在腾讯云注册域名,登陆DNSPOD,在【我的账号】的【账号中心】中,有【密钥管理】
# 点击创建密钥即可创建一个API
# 如果你在腾讯云注册域名叫【test.com】
# 那么【dnspod_ddnsipv6_domain】后面就填【test.com】
# 然后根据常用的规范/自己想要的名字在【dnspod_ddnsipv6_subdomain】填入自己需要的名字
# 现假设为【file】,那么你的访问地址为【file.test.com】
if [ "$dnspod_ddnsipv6_record" = "@" ]
then
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_domain
else
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_subdomain.$dnspod_ddnsipv6_domain
fi

die () {
    echo "Error: unable to find [public IPv6 address], please use the 'ip addr' command or query the network panel of the system to check the network card, and fill in the name of the network card with the IPv6 address in the 'local_net' position in the command file." >&2
    echo "IP地址提取错误: 在指定的网络适配器上[$local_net]找不到<公网IPv6地址>(不是fe80开头),请使用'ip addr'命令或在系统的网络面板查询有公网IP的网络适配器,然后在脚本的[local_net]中用填写网络适配器的名称。" >&2
    exit
}

ipv6_list=`ip addr show $local_net | grep inet6 | sed 's/\/.*//g' | awk '{print $2}'  | grep 24 |  awk 'NR==1{print}'` || die

for ipv6 in ${ipv6_list[@]}
do
    if [[ "$ipv6" =~ ^fe80.* ]]
    then
        continue
    else
        echo select IP: $ipv6 >&1
        break
    fi
done

if [ "$ipv6" == "" ] || [[ "$ipv6" =~ ^fe80.* ]]
then
    die
fi

dns_server_info=`nslookup -query=AAAA $dnspod_ddnsipv6_name 2>&1`

dns_server_ipv6=`echo "$dns_server_info" | grep 'address ' | awk '{print $NF}'`
if [ "$dns_server_ipv6" = "" ]
then
    dns_server_ipv6=`echo "$dns_server_info" | grep 'Address: ' | awk '{print $NF}'`
fi
    
if [ "$?" -eq "0" ]
then
    echo "DNS server IP: $dns_server_ipv6" >&1

    if [ "$ipv6" = "$dns_server_ipv6" ]
    then
        echo "The address is the same as the DNS server." >&1
    fi
    unset dnspod_ddnsipv6_record_id
else
    dnspod_ddnsipv6_record_id="1"   
fi

send_request() {
    local type="$1"
    local data="login_token=$dnspod_ddnsipv6_id,$dnspod_ddnsipv6_token&domain=$dnspod_ddnsipv6_domain&sub_domain=$dnspod_ddnsipv6_subdomain$2"
    return_info=`curl -X POST "https://dnsapi.cn/$type" -d "$data" 2> /dev/null`
}

query_recordid() {
    send_request "Record.List" ""
}

update_record() {
    send_request "Record.Modify" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6&record_id=$dnspod_ddnsipv6_record_id"
}

add_record() {
    send_request "Record.Create" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6"
}

if [ "$dnspod_ddnsipv6_record_id" = "" ]
then
    echo "seem exists, try update." >&1
    query_recordid
    code=`echo $return_info  | awk -F \"code\":\" '{print $2}' | awk -F \",\"message\" '{print $1}'`
    echo "return code $code" >&1
    if [ "$code" = "1" ]
    then
        dnspod_ddnsipv6_record_id=`echo $return_info | awk -F \"records\":.{\"id\":\" '{print $2}' | awk -F \",\"ttl\" '{print $1}'`
        update_record
        echo "update sucessful" >&1
    else
        echo "error code return, domain not exists, try add." >&1
        add_record
        echo "add sucessful." >&1
    fi
else
    echo "domain not exists, try add."
    add_record
    echo "add sucessful" >&1

fi

Shell方案2

来自:https://github.com/rehiy/dnspod-shell 非单文件,但是也可以稍加修改后单文件运行,并且支持识别长效地址。