什么将由通知器组成?
我们将创建一个工具,该工具将向我们创建和配置的电报机器人发送消息,通过这种方式,它将在某些事件中通知我们。
。
创建和配置Botfather
当我们有助于创建和管理黄油以使用电源来创建和管理黄油时,我们需要转到bot 帐篷。
要添加我们的bot,我们必须使用 已经创建了机器人,我们从配置后的链接中访问您的聊天,我们给了 要操作该工具,有必要知道我们的聊天ID( Telegram用户ID ),该工具可以识别用户与Bot进行交互的内容。为此,我们向机器人发送审判消息。 下面我们必须获得聊天ID,并具有以下链接: 这是如何使用 curl : id 字段是我们的聊天标识符,这对于通知我们帐户是必要的。
然后使用推动器函数的名称从终端运行。我们有三种执行方式: 重要的是要考虑到我们将使用此工具以及我们将要有的限制。读取脚本,以便可以用作独立于kude0的工具,对于无法从那里使用资源的特定情况,例如,当我们在 在命令行中使用的工具通过电报通知。 然后,我们授予脚本执行权限,然后将其移至 赏金和五旬节,以确定攻击是否有效使用bash的输出状态($?)并发送bot命令的输出。如果想指挥自由,则可以使用布尔操作员和( 示例以通知每个消息中的每个现有域。 示例在单个消息中通知所有现有域。 当 通过每小时检查门户网站来进行带有crontab任务的示例。 脚本以真实时间文件的年份发送通知。 使用方式: leer logs dns: 通知服务器的DNS查询的工具。 我们创建的工具证明了诸如Bash之类的语言的多功能性和实用性,该工具与Botfather这样的工具一起可用于所有类型的任务和几个人。通知器可用于监视各种任务,例如A,B和C。您需要如何扩展Lysses是时间和创造力。
bash le pone。 电报热阅读器 en
/newbot
命令,然后放置收费和用户名,以便能够在所有现有用户和机器人中识别它。之后,将为我们提供链接,以访问机器人的聊天和API令牌,以工作并与ã©l
编程机器人
/start
。
https://api.telegram.org/bot<YourBOTToken>/getUpdates
获得必要数据的示例
curl https://api.telegram.org/bot1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI/getUpdates -s | jq
function urlencode() {
# urlencode <string>
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:$i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf '%s' "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
LC_COLLATE=$old_lc_collate
}
function urldecode() {
# urldecode <string>
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\\x}"
}
function pusher(){
token="1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI"
id="202499999"
msj=$@
if [ "$msj" == "" ]; then
if [ ! -t 0 ]; then
msj=$(cat /dev/stdin)
else
msj="beep"
fi
fi
msj=$(urlencode "$msj")
url="https://api.telegram.org/bot$token/sendMessage"
curl -s -X POST "$url" -d chat_id="$id" -d text="$msj" &> /dev/null
if [ $? -ne 0 ]; then
echo "Error with bot"
fi
}
source ~/.bashrc
$ echo test text | pusher
$ pusher test text
$ pusher
用例
crontab
中执行计划任务或我们使用kude10,kude11或当我们在 bash 中执行脚本内部:
notify.sh
#!/bin/bash
function urlencode() {
# urlencode <string>
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:$i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf '%s' "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
LC_COLLATE=$old_lc_collate
}
function urldecode() {
# urldecode <string>
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\\x}"
}
token="1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI"
id="202499999"
msj=$@
if [ "$msj" == "" ]; then
if [ ! -t 0 ]; then
msj=$(cat /dev/stdin)
else
msj="beep"
fi
fi
msj=$(urlencode "$msj")
url="https://api.telegram.org/bot$token/sendMessage"
curl -s -X POST "$url" -d chat_id="$id" -d text="$msj" &> /dev/null
if [ $? -ne 0 ]; then
echo "Error with bot"
fi
/usr/bin/notify.sh
:
chmod +x notify.sh
sudo mv notify.sh /usr/bin/notify.sh
例子
&&
)和或(kude15)。
cat doms.txt | xargs -P7 -I@ "host @ && echo @ | notify.sh"
#!/bin/bash
while read line; do
host $line
done < doms.txt | pusher
crontab -e
运行时,显示一个屏幕,可以在其中编程任务以经常或在一定时间运行。应用通知器的一个示例如下:
0 * * * * curl http://evil.corp && echo hola || notify.sh problemas con el portal $(date)
hotreader.sh
#!/bin/bash
file=$1; text=$2
if [ "$text" == "" ]; then text="."; fi
lines=$(cat $file | wc -l)
#while inotifywait -q -e modify $file; do
inotifywait -q -m -e modify $file | while read filename event; do
linesNow=$(cat $file | wc -l)
tail -n $(($linesNow-$lines)) $file | grep $text | notify.sh
lines=$linesNow
done
bash hotreader.sh <TEXTFIlE> <PATTERN>
bash hotreader.sh /var/log/named/query.log custom-domain.org
结论
奖励轨道
Python
:
#!/usr/bin/python3
import os.path
import sys
import urllib.request
import urllib.parse
# sudo pip3 install pyinotify
import pyinotify
# Usage
# python3 notifier.py <TextFile>
global lines
file_watcher = os.path.realpath(sys.argv[1])
def count_lines(file_name):
with open(file_name) as f:
count = len(f.readlines())
return count
def tail_n(file_name, n):
with open(file_name) as f:
lines = f.readlines()
return lines[-n:]
def list2string(list):
return "".join(list)
def sender(msj):
if msj == "":
msj = "[HotReader]"
token = "<TOKEN_BOT>"
chat_id = "<CHAT_ID>"
url = f"https://api.telegram.org/bot{token}/sendMessage"
values = {
"chat_id": chat_id,
"text": "[HotReader] " + msj
}
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(url, data)
urllib.request.urlopen(req)
# Example: monitors transient files.
#
# Run this code, then run transient_file.sh in another shell.
class ProcessTransientFile(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
global lines
# We have explicitely registered for this kind of event.
#print('\t', event.pathname, ' -> written')
lines_now = count_lines(file_watcher)
modified = tail_n(file_watcher, lines_now - lines)
print(list2string(modified))
lines = lines_now
sender(list2string(modified))
def process_default(self, event):
# Implicitely IN_CREATE and IN_DELETE are watched too. You can
# ignore them and provide an empty process_default or you can
# process them, either with process_default or their dedicated
# method (process_IN_CREATE, process_IN_DELETE) which would
# override process_default.
print('default: ', event.maskname)
lines = count_lines(file_watcher)
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm)
# In this case you must give the class object (ProcessTransientFile)
# as last parameter not a class instance.
wm.watch_transient_file(file_watcher, pyinotify.IN_MODIFY, ProcessTransientFile)
notifier.loop()