Telegram因为其加密和高隐私性,成为很多组织或个人传播信息的渠道,一些企业的内部信息可能会在Telegram的群组中流转。对企业可能会勾层安全威胁。本文将介绍如何使用Telethon构建Python Telegram抓取工具,用于OSINT和威胁情报监控。
要设置Telegram爬虫,我们将使用Telethon Python库。在深入研究代码之前,请务必注意,如果你使用任何库来自动执行Telegram(或任何其他应用程序)上的操作,请确保你熟悉该应用程序的条款和条件。切勿违反任何规则,否则可能会导致你的帐户被禁止。
步骤 1:获取 API ID 和 Hash
在与 Telegram 的 API 交互之前,你需要一个 API ID 和 API 哈希。这些是验证应用程序所需的唯一凭证。
https://my.telegram.org/auth
输入电话号码后,确认码将直接发送到你的Telegram 应用程序。它不会以短信形式发送。
登录后,导航到“API 开发工具”。
也有官方的api:
"app_id": 2040
"app_hash": "b18441a1ff607e10a989891a5462e627"
关于Telethon的文档:
https://github.com/LonamiWebs/Telethon
https://docs.telethon.dev/
需要pip安装telethon库:
sudo pip install telethon -i https://pypi.org/simple
使用以下脚本测试一下:
from telethon.sync import TelegramClient, events
with TelegramClient('name', '2040', 'b18441a1ff607e10a989891a5462e627') as client:
client.send_message('me', 'Hello, myself!')
print(client.download_profile_photo('me'))
async def handler(event):
await event.reply('Hey!')
client.run_until_disconnected()
ok,可以发收信息。
第 2 步:加入频道并抓取消息
现在,我们的客户端已初始化并成功接收到测试消息,我们已准备好进行下一步。现在的重点转移到确定我们想要监控和抓取有用数据的 Telegram 频道上。有几个 Telegram 搜索引擎可用于查找感兴趣的频道。在本次练习中,这里将使用 tlgrm.eu
from telethon import TelegramClient
from telethon.tl.functions.channels import JoinChannelRequest
import os
from colorama import Fore, Back, Style # add some color to the terminal print
app_api_id = '2040'
app_api_hash = 'b18441a1ff607e10a989891a5462e627'
client = TelegramClient('session', app_api_id, app_api_hash)
async def join_channel(client, channel_link):
try:
await client(JoinChannelRequest(channel_link))
print(f"{Fore.CYAN}Joined channel: {channel_link}")
except Exception as e:
print(f"Failed to join channel: {e}")
async def get_messages(client, channel, limit=5):
async for message in client.iter_messages(channel, limit):
if message.text:
# Print the message in a structured format
print(Fore.BLUE + (message.text)) # <--- we addeed stringify to format the messages
print(Fore.WHITE + '------------------------------------------------------------------------------------')
async def main():
# Define the Telegram channel link to monitor (in this case, Durov's channel)
channel_link = 'https://t.me/Durov'
await join_channel(client, channel_link)
await get_messages(client, channel_link)
##async def main():
# Simple example: send a message to yourself
## await client.send_message('me', 'We are good to go!')
with client:
client.loop.run_until_complete(main())
这个脚本的主要功能是使用 Telethon 库连接到 Telegram,加入一个指定的 Telegram 频道,并获取该频道中的一些消息。
-
导入库:
-
Telethon
: 用于连接 Telegram API 和操作 Telegram 帐户(如加入频道、获取消息等)。 -
os
: 用于与操作系统交互。 -
colorama
: 用于在终端输出中添加颜色,以便更清晰地展示信息。 -
API 相关信息:
-
app_api_id
和app_api_hash
:用于认证 Telegram 客户端。这些是 Telegram 提供的 API 令牌。 -
创建 Telegram 客户端:
-
使用
TelegramClient('session', app_api_id, app_api_hash)
创建一个客户端会话,用于与 Telegram 服务器通信。 -
异步函数:
-
join_channel(client, channel_link)
:这个函数用于通过给定的链接加入指定的 Telegram 频道。如果成功加入,打印出成功信息;否则,打印错误信息。 -
get_messages(client, channel, limit=5)
:从指定的频道中获取最新的limit
条消息,并且打印出每条消息的内容,使用颜色来格式化输出。 -
主函数:
-
main()
:调用join_channel()
加入https://t.me/Durov
频道,然后获取该频道的最新消息并打印出来。 -
运行:
-
脚本使用
with client
语句启动 Telegram 客户端,并使用client.loop.run_until_complete(main())
来执行主任务。
来看看效果:
第 3 步:其他功能和注意事项
运营安全 (OpSec):
当你抓取 Telegram 频道时,保持强大的 OpSec 至关重要。远离抓取非法或敏感频道,并始终遵守 Telegram 的服务条款和法律。
事件触发器:
你可以通过添加事件触发器将脚本提升到一个新的水平。例如,你可以将其设置为抓取包含特定关键字的消息,或者在频道中发生特定事件时采取进一步措施。这为你的监控设置提供了更大的灵活性和智能性。
原文始发于微信公众号(赛哈文):用Python实现Telegram自动化OSINT威胁情报监控
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论