用bash创建电报通知器
#python #telegram #bash #notificador

Image description

什么将由通知器组成?

我们将创建一个工具,该工具将向我们创建和配置的电报机器人发送消息,通过这种方式,它将在某些事件中通知我们。

创建和配置Botfather 当我们有助于创建和管理黄油以使用电源来创建和管理黄油时,我们需要转到bot

帐篷。

Image description

  • 在机器人中可以使用以下选项:

Image description

要添加我们的bot,我们必须使用/newbot命令,然后放置收费和用户名,以便能够在所有现有用户和机器人中识别它。之后,将为我们提供链接,以访问机器人的聊天和API令牌,以工作并与ã©l

互动

Image description

编程机器人

已经创建了机器人,我们从配置后的链接中访问您的聊天,我们给了/start

Image description

要操作该工具,有必要知道我们的聊天ID( Telegram用户ID ),该工具可以识别用户与Bot进行交互的内容。为此,我们向机器人发送审判消息。

Image description

下面我们必须获得聊天ID,并具有以下链接:

https://api.telegram.org/bot<YourBOTToken>/getUpdates

这是如何使用 curl
获得必要数据的示例

curl https://api.telegram.org/bot1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI/getUpdates -s | jq

id 字段是我们的聊天标识符,这对于通知我们帐户是必要的。

Image description

  • 该代码必须在kude0文件的末尾解决:
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

然后使用推动器函数的名称从终端运行。我们有三种执行方式:

  • stdin。 $ echo test text | pusher
  • 通过参数输入。 $ pusher test text
  • 罪恶论点。 $ pusher

Image description

用例

重要的是要考虑到我们将使用此工具以及我们将要有的限制。读取脚本,以便可以用作独立于kude0的工具,对于无法从那里使用资源的特定情况,例如,当我们在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

例子

赏金和五旬节,以确定攻击是否有效使用bash的输出状态($?)并发送bot命令的输出。如果想指挥自由,则可以使用布尔操作员&&)和(kude15)。

示例以通知每个消息中的每个现有域。

cat doms.txt | xargs -P7 -I@ "host @ && echo @ | notify.sh"

示例在单个消息中通知所有现有域。

#!/bin/bash

while read line; do
    host $line 
done < doms.txt | pusher
  • crontab ,以监视正在执行的计划任务。

crontab -e运行时,显示一个屏幕,可以在其中编程任务以经常或在一定时间运行。应用通知器的一个示例如下:

通过每小时检查门户网站来进行带有crontab任务的示例。

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>

leer logs dns:

通知服务器的DNS查询的工具。

bash hotreader.sh /var/log/named/query.log custom-domain.org

结论

我们创建的工具证明了诸如Bash之类的语言的多功能性和实用性,该工具与Botfather这样的工具一起可用于所有类型的任务和几个人。通知器可用于监视各种任务,例如A,B和C。您需要如何扩展Lysses是时间和创造力。

bash le pone。

奖励轨道

电报热阅读器 en 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()