分类 工作&技术 下的文章

以前用了这个从nodeseek上看到的脚本小改后来使用,结果今天不出意外的出了意外。跨月挂了。
分析了下代码,它的进出流量是取的 interface[0].traffic.total.tx和rx,这个是网卡累计总流量。在第一个月的时候是正确的,统计到的总流量就是当月流量嘛。但第二个月,就把前一个月的也包含进来了。
json里其实是应该取 interface[0].traffic.month[n].tx和rx,上面的下标n就是month里最大的那个,因为是按照时间升序排列的,下标最大的一个即为当前月。
修正后代码如下:

#!/bin/bash

# 设置网卡名称
INTERFACE="eth0"

# 设置流量限制(单位:GB)
LIMIT=195

# 获取当前月份的索引
MONTH_INDEX=$(vnstat -i $INTERFACE --json | jq '.interfaces[0].traffic.month | length - 1')

# 获取当月流量数据(单位:KB)
TX=$(vnstat -i $INTERFACE --json | jq --argjson idx "$MONTH_INDEX" '.interfaces[0].traffic.month[$idx].tx')
RX=$(vnstat -i $INTERFACE --json | jq --argjson idx "$MONTH_INDEX" '.interfaces[0].traffic.month[$idx].rx')

# 计算总流量(单位:GB)
GB1=$(echo "scale=2; $TX / 1024 / 1024 / 1024" | bc)
GB2=$(echo "scale=2; $RX / 1024 / 1024 / 1024" | bc)
GB1=$(printf "%.2f" $GB1)
GB2=$(printf "%.2f" $GB2)
echo "Total traffic out: $GB1 GB"
echo "Total traffic in: $GB2 GB"

# 比较并选择较大的流量值(共享带宽包)
if (( $(echo "$GB2 > $GB1" | bc -l) )); then
  GB=$GB2
else
  GB=$GB1
fi

echo "CBWP traffic: $GB GB"

# 检查是否超过流量限制
if (( $(echo "$GB >= $LIMIT" | bc -l) )); then
  echo "Traffic limit exceeded. Disabling network interface."
  ip link set $INTERFACE down
fi

科普下使用方式,时不时有朋友和我说我说得太简略了。。好吧,我假定0基础。
安装必要软件包 apt install bc jq vnstat
设置vnstat开机启动(奇大怪,正常apt install都会做这个,但vnstat似乎没有) systemctl enable vnstat
nano /usr/local/bin/checkcdt.sh 然后输入上面代码,然后 ctrl-x 存盘退出啦,有YES就YES,有默认值就默认值
chmod +x /usr/local/bin/checkcdt.sh
crontab -e 然后选择1,即 nano,如果第一次用的话。 然后在最后加上一行,

*/1 * * * * /usr/local/bin/checkcdt.sh 

,然后ctrl-x退出。 搞定。
它会每分钟检查一次流量,如果到达了195G时就把网卡断了。不说复杂了,下个月的时候重启下机器就活过来了。

在忙一个展会,有场专门活动的入场券需要二维码分发,因为只是个临时活动,不进票务系统和过检票闸机,所以得用户入场时做一个单独的验票(码)的H5小玩意,客服妹子们入场时用手机去扫票验码。
老板觉得这小东西叫上产品、UI,前端什么的一帮子人动静也太大,所以这工作就交给我这苦力了。
接到这要求第一反应是,我就一个后端啊,做页面也太难为人了,而且这页面还要扫码什么的,晕。。。硬着头皮一问gpt,好简单!

引入二维码库(html5-qrcode)

<script src="https://xxxxxx/html5-qrcode.min.js"></script> 

扫码

const html5QrCode = new Html5Qrcode("reader");
html5QrCode.start(
  { facingMode: "environment" }, 
   {
      fps: 20,    
      qrbox: { width: 300, height: 300 } 
   },
     onScanSuccess, //成功
     onScanFailure  // 失败
);

扫到了二维码

function onScanSuccess(decodedText, decodedResult) {  
   ... decodeText用ajax发送给后端API,然后后端提示是否允许入场等
}

当然,还有点简单的html和css,也包括ajax什么的,这些全是gpt完成,ai独自完成度100%。
至于后端api,这个自己码下代码太容易了,后端基本功,不值一提。
总共花了一个小时不到,交工,看上去象模象样蛮有成就感的。

这周的第二次了。我本来昨天还在想要不要把博客直接裸连在阿里云香港上,这样访问快一点,现在也不用想了。
当然,如果只是哪个朋友想测试一下我说的这些安全性的东西,那是欢迎的,因为数据有点象是点到为止的感觉。最终结果图表上可以看出,cc攻击完全失败了。
这次是有针对性的cc攻击,是访问的 /search,通常,在大多数系统里面,search相当耗费资源,是个cc的极佳入手点。不过,我设置了针对search的js挑战,所以,全部拦截了下来。
即,设置只允许白名单URL,其余的全部进行质询,search不在白名单。与缓存搭配,也就是,白名单的URL全部缓存,非白名单的即质询。
看上去天衣无缝了?不,还有一个重大的问题,即404攻击。我先卖个关子,在接下来的时间里我再来说这个。

d1.jpg

针对/search/进行攻击被拦截
d2.jpg

全站缓存效果
d3.jpg

甲骨文云今天修改了帐号区域限制,一个帐号现在允许总共3个使用区(即,新增2个额度),只限已升级的付费帐号。
需要注意:

  1. 免费额度只限ARM在各区共享,AMD额度只在主区域拥有。
  2. 所有区的ARM的累计总额度是: 4核24G。
  3. 主可用区拥有200G免费硬盘额度,其余的区域没有免费额度,跨区新机器均会为硬盘计费。按照默认值,一台机器为约50G,一个月费用则为2.7新币左右。准确数字在新建机器时有提示。
  4. 流量各区共享,只限制 10T 出流量。

copy.jpg

这几天说缓存,这说完,CC就来了。
不过要不是我正在看CF后台,我还真不知道有这么件事。感谢这位仁兄的“测试”了。
数据看上去,达到了预期。另外,CF的的HTTP DDOS也不错,及时发现并自动处理了。

p1.jpg
p2.jpg