前言

在服务器的日常维护和蓝队的日常监控中,经常需要对服务器出现的各种问题进行及时的预警推送。国外的服务器推荐使用telebot,而国内由于特殊的网络环境,则推荐使用BARKChanify等进行推送。


Telebot推送

首先需要一个telegram的账号,点此 。在对话框中输入/newbot,根据提示输入机器人的nameusername,创建完成后会返回一个token,务必牢记。token类似如下:

5229xxxxxx:AAFAxxxxxxxxxxxxxxxxx1MJ4OY0

接着在该机器人的对话框下输入任意信息,接着按照以下方式获取自己telegram的用户id

# curl方式。{token}替换为上面的token
proxychains4 curl https://api.telegram.org/bot{token}/getUpdates # python方式。
import requests
resp = requests.get("https://api.telegram.org/bot{token}/getUpdates")
print(resp.json())

请求后会返回类似如下json内容

{"ok":true,"result":[{"update_id":324xxxx11,"message":{"message_id":3,"from":{"id":100xxxx661,"is_bot":false,"first_name":"xxxx","last_name":"xxxx","username":"xxxx","language_code":"zh-hans"},"chat":{"id":100xxxx661,"first_name":"xxxx","last_name":"xxxx","username":"xxxx","type":"private"},"date":1647093375,"text":"haha"}}]}%

其中的id字段是我们所需要的,既我们自己的telegram账号的chat_id

python的简单用法如下:

安装依赖 pip install pyTelegramBotAPI

import telebot
bot = telebot.TeleBot(token="522xxxx:xxxxxxxxxOY0")
bot.send_message(chat_id="xxxxxx",text="haha123")

走代理跑

proxychains4 python3 telebot.py

可以看到,机器人已经给我们发来了指定的信息。当然除了发送文本信息,还可以发送图片、链接等,但这个不常用,就不做过多介绍了,各位师傅可以自己探索。

对于境外vps或者是网络环境允许的情况来说,Telebot是最好不过的预警推送方式。但是由于国内复杂的网络环境,这显然是不合理的。

因此这里尝试使用BARK这个免费开源的消息推送工具进行预警推送,虽然其功能较Telebot简陋一些,但起到基础的消息推送功能还是没有问题的。


BARK推送

先来看BARK的用法。BARK他会给每个账号提供一个私有ID,以GET方式请求 加上一定量参数即可。但同时带来的缺点就是由于get方式请求的url长度有限,因此不宜推送过长的内容。如对此有特殊要求,可使用如Chanify等其他app,但使用方式大同小异。

如果对于隐私要求高,可以在自己的私人服务器进行部署

推送方式

参数

参数名 解释 其他
sound 推送铃声 minuet、alarm等
isArchive 自动保存通知消息 1、0 设置为1则会自动保存,其他值则不会
icon 推送图标 [url] 需IOS15或以上
group 推送消息分组 [groupName]
level 时效性通知 active、timeSensitive、passive active:系统立即亮屏;timeSensitive:时效性通知,可在专注模式下显示通知;passive:仅将通知添加到通知列表,不会亮屏显示。
url 跳转 [url] 携带该参数时,点击推送会跳转到这个URL
copy 拷贝 [String] 携带该参数时,将只复制copy参数的值
badge 推送角标 [Num] 推送角标

测试

利用Python进行测试:

import requests
url = "https://api.day.app/6cPxxxxxxxxxxxF4/" #此处填入私有ID def sendMessage(title,text,icon=""):
requests.get(f'{url+title}/{text}?icon={icon}') sendMessage(title='Warning',text='Your server has been invaded',icon="https://th.bing.com/th/id/OIP.PnLgsfgLeK-s0mUrQOeonwAAAA?w=176&h=180&c=7&r=0&o=5&dpr=1.8&pid=1.7")


实战

写个shell脚本,让每次终端连接时都执行,放到/etc/profile.d中。这样当我们的服务器被意外连接时就能及时收到推送。

注意,由于url中不能存在空格,因此要把空格进行url编码

echo $string | sed 's/ /%20/g'

#!/bin/bash

message="主机名:$(hostname) 时间:$(TZ=UTC-8 date) 登陆用户:$(whoami) 当前所有登陆用户:$(who) 其他信息:$(w|awk 'BEGIN{OFS=" "}{print $1,$8}')"

curl "https://api.day.app/6cxxxxxxxxxF4/$(echo $message | sed 's/ /%20/g')?icon=https://th.bing.com/th/id/OIP.PnLgsfgLeK-s0mUrQOeonwAAAA?w=176&h=180&c=7&r=0&o=5&dpr=1.8&pid=1.7" &>/dev/null

这样,当某一个用户被远程登录连接时我们的手机就会收到实时的预警推送。


拓展

另外可以结合ssh蜜罐技术,或者是结合系统和中间件日志,对网页被篡改、被挂黑链、数据库篡改、主机出现其他用户等各种异常情况进行及时预警。

利用BARK和Telebot进行VPS实时预警推送的更多相关文章

  1. 【js学习】js连接RabbitMQ达到实时消息推送

    js连接RabbitMQ达到实时消息推送 最近在自己捯饬一个网站,有一个功能是需要后端处理完数据把数据发布到MQ中,前端再从MQ中接收数据.但是前端连接MQ又成了一个问题,在网上搜了下资料,点进去一篇 ...

  2. 开源实时消息推送系统 MPush

    系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

  3. 基于socket.io的实时消息推送

    用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

  4. Worktile中百万级实时消息推送服务的实现

    Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/

  5. C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表

    本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...

  6. 实时数据推送webSocket

    实时数据推送 在Web或移动项目中,服务器向客户端实时推送消息是一种常见的业务需求. 实现方式 Polling:轮询(俗称“拉”),即定期重新请求数据. Long-Polling:长轮询,是 Poll ...

  7. 未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

    前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...

  8. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

  9. 前端 与 RabbitMQ 实时消息推送实践

    web 页面的未读消息(小红点)怎么实现比较简单,之前说过可以用 rabbitmq 的 MQTT 协议做智能家居的指令推送,里边还提到过能用 MQTT 协议做 web 的消息推送,而未读消息(小红点) ...

  10. 7种实现web实时消息推送的方案

    做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么是消息推送(pus ...

随机推荐

  1. 华城金锐申威SW64服务器重装过程

    华城金锐申威SW64服务器重装过程 背景 这边为了进行兼容性验证新进了两套申威的服务器. 一台机器带着安装好的操作系统了. 但是另外一套没有对应的系统. 端午期间想着趁着上班的人少, 加吧给处理一下. ...

  2. DBLink实现备份文件不落盘的导入其他Oracle数据库实例的方法

    DBLink实现备份文件不落盘的导入其他Oracle数据库实例的方法 背景 公司内经常有从其他服务器备份数据库实例的需求 之前的操作一般需要,备份源服务器使用expdp将source导出dump文件. ...

  3. 定位解析一个因脚本劫持导致webpack动态加载异常的问题

    问题描述 项目现场的前端项目在点击顶部的导航栏切换不同的模块时,会有小概率出现模块加载报错的情况: 我们的前端项目里是有基于react-loadable做的懒加载的,上图的12.be789340.ch ...

  4. 程序调试利器——GDB使用指南

    作者:京东科技 孙晓军 # 1\. GDB介绍 GDB是GNU Debugger的简称,其作用是可以在程序运行时,检测程序正在做些什么.GDB程序自身是使用C和C++程序编写的,但可以支持除C和C++ ...

  5. 玩一玩 VictoriaLogs

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 下载 see: https://github.com/Vi ...

  6. 未能加载文件或程序集“System.ValueTuple, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。

    一些老的项目在使用SAEA.Socket相关库后,程序本地测试正常,结果上传到服务器上后提示:未能加载文件或程序集"System.ValueTuple, Version=0.0.0.0, C ...

  7. 解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题

    解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题 LLM(Large Language Model)通常拥有大量的先验知识,使得其在许多自然语言处理任务上都有着不错的性能 ...

  8. 4.6 Windows驱动开发:内核遍历进程VAD结构体

    在上一篇文章<内核中实现Dump进程转储>中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚 ...

  9. 一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)

    最近做了几个 WPF + MudBlazor 的小东西,每次从头搭建环境比较繁琐,然鹅搭建过程还没啥技术含量,索性就直接做了个模板,方便以后使用. 1. 介绍 一个用来创建 .NET 8 + WPF ...

  10. Bi-VAEGAN:对TF-VAEGAN提出的视觉到语义进一步改进

    论文"Bi-directional Distribution Alignment for Transductive Zero-Shot Learning"提出Bi-VAEGAN,它 ...