很早的时候,我就发现了一个 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
安装步骤
执行下面的代码下载并运行脚本。
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
就会开始初始化配置。
点击展开 查看更多
请输入该服务器的 [别名]
用于推送消息时,使你快速分辨服务器。支持中文,但请勿包含一些特殊符号,否则可能导致推送出错。
(默认为空):香港A
========================
别名 : 香港A
========================
请输入推送机器人 [API密匙]
Token,通过 @notificationme_bot 机器人获取。
获取步骤:向机器人发送 /start 后,机器人会告诉一个API URL,例如:https://tgbot.lbyczf.com/sendMessage/abc,其中的 abc 就是API密匙。
(不能为空):abc
========================
密匙 : abc
========================
[信息] 定时监控功能添加成功 !
[信息] 初始化配置完成,目前已启动定时检测IP被墙状态。
使用说明
点击展开 查看更多
进入下载脚本的目录并运行脚本:
./gfw_push.sh
然后选择你要执行的选项即可。
监测IP是否被墙脚本 [vX.X.X]
---- Toyo | doub.io/shell-jc8 ----
0. 升级脚本
————————————
1. 初始化
2. 卸 载
————————————
3. 手动 检测IP
4. 暂停 监测IP
5. 重启 监测IP(或清零阈值)
—— 当暂停或脚本推送三次IP被墙信息后,
可以用该选项使脚本继续监测IP。
————————————
6. 设置 配置信息
7. 查看 配置信息
8. 查看 日志信息
————————————
当前状态: 已启动监测
请输入数字 [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 大小,这能影响什么,如果你实在有强迫症,那么可以手动清空:
# 首先进入脚本所在目录(你能运行脚本就能执行下面的代码):
echo "" > gfw_push.log
定时任务自定义
点击展开 查看更多
脚本默认每分钟检测一次,如果你不需要这么频繁,可以使用crontab -e
命令编辑定时任务,简单介绍下格式:
* * * * * /xxx/xx
# 前面的五个 * 分别对应:分钟、小时、日、月、星期(0和7代表星期日)。
# 后面的 /xxx/xx 则对应要执行的命令(绝对路径)。
写几个示例:
# 假设你的脚本位于 /root 目录下,那么执行命令就是 /root/gfw_push.sh
# 你们只要关注前面的定时间隔即可。
* * * * * /bin/bash /root/gfw_push.sh
# 每分钟执行一次
0 3 * * * /bin/bash /root/gfw_push.sh
# 每天凌晨3点0分执行一次
30 */2 * * * /bin/bash /root/gfw_push.sh
# 每隔两个小时在30分时执行一次
你可以去这个网站计算出执行命令的间隔时间。
提示wget: unknown host “raw.githubusercontent.com” 之类的错误
这是无法解析我的域名,多半是DNS的问题,请更换DNS为谷歌DNS(以下两行一起复制 一起执行)。
点击展开 查看更多
echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf
提示 wget: command not found 的错误
这是你的系统精简的太干净了,wget都没有安装,所以需要安装wget。
点击展开 查看更多
# CentOS系统:
yum install -y wget
# Debian/Ubuntu系统:
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 一键脚本
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!
不过脚本默认是 1分钟检测一次,所以如果遇到服务器线路临时故障,也可能误报,可以将间隔时间改成 5分钟 10分钟,这样如果还是连续三次间隔都连不通,那就更可能是被墙了(或者长期线路故障)。
当你在当前文件夹下执行
./gfw_push.sh
能看到脚本内容,那么说明脚本就在你当前位于的文件夹中。这时候输入命令:
pwd
就能看到当前文件夹的绝对路径了。之所以用三大运营商的官网,主要是考虑到误报率的问题,如果只用一个随意的国内网站,那么如果某条路线故障什么的,可能就误报了。
三大运营商官网走的线路大都不一样,这样避免了例如联通与你的服务器链接故障或者严重丢包,那么电信和移动是正常的,不会误报。
如果你的服务器三大运营商官网全部无法联通,那么基本上就是被墙了,剩下的可能性就是服务器网络出问题了。
的确是这样,不过该脚本主要针对服务器多的人,如果只有一两个做代理的服务器,那么你自己很快就能发现不能用并检查是否被墙了。br /> 但是如果你有五六个,不可能天天挨个用一遍,可能过了几天才发现某个服务器被墙了。
虽然后来被墙的太频繁了,就懒得换逗比云域名了。
我会把脚本改一改发给你的。
导出当前账户的定时任务内容到文件(crontab.bak),然后追加要添加的定时任务到该文件尾部,然后导入该文件到crontab中。
你这种错误就是 crontab 文件里格式出问题了,导致无法导入。
要测试一个服务器有没有被墙,要么就是服务器定期访问国内网站,要么就是国内服务器定期访问该海外服务器,别无他法。