实时监测服务器IP是否被墙并推送消息至 Telegram 一键脚本

很早的时候,我就发现了一个 Telegram 推送消息机器人,不过我平时也只是拿来写脚本监控一些东西通知我,昨天晚上突发奇想,觉得我完全可以做一个实时监测服务器IP是否被墙并推送消息至 Telegram 的脚本呀。仔细构思了下,发现应该有一些人会感兴趣的,所以就写出来喽。

脚本简介

该脚本通过 脚本+推送机器人+Crontab(定时任务程序) 轻量化的实现了实时监测服务器IP是否被墙并推送消息至 Telegram 的功能。
即只需要在服务器上面运行脚本并填写 服务器别名(可选) 和 推送API密匙 后就不用管了,接下来脚本会每分钟检测一次与大陆三大运营商的连通性,如果全部无法连通,脚本就会推送消息至 Telegram 通知你。
最快可在1分钟内知晓IP被墙。安装简单、无需复杂操作。
注意:当脚本连续三次检测都是全部无法连通,就会中止监测并推送消息,避免刷屏。
另外:每次检测时如果无法连通,则会再检测一次。
注意:脚本提示你,并不一定是IP被墙,可能服务器与大陆连接出现故障也会导致(虽然三大运营商全崩概率低)。
机器人开源项目地址:https://github.com/Fndroid/tg_push_bot

系统要求

CentOS 6+ / Debian 6+ / Ubuntu 14.04 +

脚本版本

Ver: 1.0.4

安装步骤

执行下面的代码下载并运行脚本。
  1. wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/gfw_push.sh && chmod +x gfw_push.sh && bash gfw_push.sh
运行脚本后会出现脚本操作菜单,选择并输入 1 就会开始初始化配置。
  1. 请输入该服务器的 [别名]
  2. 用于推送消息时,使你快速分辨服务器。支持中文,但请勿包含一些特殊符号,否则可能导致推送出错。
  3. (默认为空):香港A
  4.  
  5. ========================
  6. 别名 : 香港A
  7. ========================
  8.  
  9. 请输入推送机器人 [API密匙]
  10. Token,通过 @notificationme_bot 机器人获取。
  11. 获取步骤:向机器人发送 /start 后,机器人会告诉一个API URL,例如:https://tgbot.lbyczf.com/sendMessage/abc,其中的 abc 就是API密匙。
  12. (不能为空):abc
  13.  
  14. ========================
  15. 密匙 : abc
  16. ========================
  17.  
  18. [信息] 定时监控功能添加成功 !
  19. [信息] 初始化配置完成,目前已启动定时检测IP被墙状态。

使用说明

进入下载脚本的目录并运行脚本:
  1. ./gfw_push.sh
然后选择你要执行的选项即可。
  1. 监测IP是否被墙脚本 [vX.X.X]
  2. ---- Toyo | doub.io/shell-jc8 ----
  3. 0. 升级脚本
  4. ————————————
  5. 1. 初始化
  6. 2.
  7. ————————————
  8. 3. 手动 检测IP
  9. 4. 暂停 监测IP
  10. 5. 重启 监测IP(或清零阈值)
  11. —— 当暂停或脚本推送三次IP被墙信息后,
  12. 可以用该选项使脚本继续监测IP
  13. ————————————
  14. 6. 设置 配置信息
  15. 7. 查看 配置信息
  16. 8. 查看 日志信息
  17. ————————————
  18.  
  19. 当前状态: 已启动监测
  20.  
  21. 请输入数字 [0-8]:

获取API密匙

首先请联系机器人:@notificationme_bot
获取API密匙:输入 /start 后回车,机器人就会随机生成一个 API 密匙,即下图中划红色横线的文本(cnb552jkzmy7py)。
删除API密匙:如果你的 API 密匙暴露了,可以输入 /end 后回车,机器人就会删除你的API密匙。

下图演示中,我又获取了一个新的 API 密匙(cnbuwjnodyir8),脚本初始化时就填写这个API密匙。
同时我又演示了带服务器别名和不带别名的消息示例。
服务器别名就是你给服务器起个名字,这样推送消息给你时,你不至于想不起来是哪个服务器。
当你获取 API 密匙后,机器人就会把你的用户名和API密匙对应起来添加到数据库中,在收到该API密匙传递的消息后,就会转发给你,即起到转发消息作用。

其他

配置文件和日志文件都位于脚本所在目录。
配置文件:gfw_push.conf
日志文件:gfw_push.log

其他说明

关于日志

虽然脚本并不会自动删除日志文件,但是大家也不需要担心日志越来越大占用空间,我给算一下大家就明白了。
平均10行日志内容对应1KB大小,一天1440行,一个月43200行=4320KB=4.2MB,一年也才50MB
一年才占 50MB 大小,这能影响什么,如果你实在有强迫症,那么可以手动清空:
  1. # 首先进入脚本所在目录(你能运行脚本就能执行下面的代码):
  2. echo "" > gfw_push.log

定时任务自定义

脚本默认每分钟检测一次,如果你不需要这么频繁,可以使用crontab -e命令编辑定时任务,简单介绍下格式:
  1. * * * * * /xxx/xx
  2. # 前面的五个 * 分别对应:分钟、小时、日、月、星期(0和7代表星期日)
  3. # 后面的 /xxx/xx 则对应要执行的命令(绝对路径)
写几个示例:
  1. # 假设你的脚本位于 /root 目录下,那么执行命令就是 /root/gfw_push.sh
  2. # 你们只要关注前面的定时间隔即可。
  3.  
  4. * * * * * /bin/bash /root/gfw_push.sh
  5. # 每分钟执行一次
  6.  
  7. 0 3 * * * /bin/bash /root/gfw_push.sh
  8. # 每天凌晨3点0分执行一次
  9.  
  10. 30 */2 * * * /bin/bash /root/gfw_push.sh
  11. # 每隔两个小时在30分时执行一次
你可以去这个网站计算出执行命令的间隔时间。

提示wget: unknown host “raw.githubusercontent.com” 之类的错误

这是无法解析我的域名,多半是DNS的问题,请更换DNS为谷歌DNS(以下两行一起复制 一起执行)。
  1. echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf

提示 wget: command not found 的错误

这是你的系统精简的太干净了,wget都没有安装,所以需要安装wget。
  1. # CentOS系统:
  2. yum install -y wget
  3.  
  4. # Debian/Ubuntu系统:
  5. apt-get install -y wget

升级脚本

升级脚本只需要重新下载脚本文件就可以了,会自动覆盖原文件。
或者运行脚本后输入 0 并回车。

更新日志

2018年11月02日,版本 v1.0.4

1. 新增 强制IPv4 模拟访问(毕竟目前只墙 IPv4)。
2. 更换 联通域名(www.10010.cn 域名毛病太多了,另找了个看起来没什么报错的联通域名代替)。

2018年10月29日,版本 v1.0.3

1. 新增 日志DEBUG输出内容(更详细,用于DEBUG)。
2. 优化 大幅降低误报几率。
—— 旧脚本是每次疑似被墙时,就会推送一次消息,连续累计三次就会中止。
—— 新脚本改为了连续累计三次后才推送消息,避免大量误报出现(经过研究发现每次误报都是服务器偶尔无法连接所有URL,但是几乎没有连续误报的)。
—— 因为推送方式改变了,所以不建议将监测时间间隔改的过长,这样的话提醒就不够及时了。

2018年10月25日,版本 v1.0.2

1. 新增 模拟访问时随机UA。

2018年10月25日,版本 v1.0.1

1. 修复 部分系统添加 Crontab 定时任务失败的问题。

2018年10月25日,版本 v1.0.0

1. 推出 正式版。
转载超链接:逗比根据地 » 『原创』实时监测服务器IP是否被墙并推送消息至 Telegram 一键脚本

评论

此博客中的热门博文

Telegram 专用的轻量化代理工具 —— MTProxy Go版 一键脚本

一键安装ShadowsocksR多用户管理面板|ss-panel魔改脚本