完成github监控部分的程序
This commit is contained in:
parent
247eaa5145
commit
1356dcc25c
90
Core.py
90
Core.py
@ -14,9 +14,11 @@ import requests
|
||||
from datetime import datetime, timedelta
|
||||
from SendCore.FeishuSendBot import SendToFeishu, gen_sign
|
||||
from SendCore.QiweiSendBot import SendToWX
|
||||
from media.common import run, seebug_main, M_4hou_main, anquanke_main, sec_wiki_main, huawei_main, doonsec_main, qianxin_main
|
||||
from media.freebuf import freebuf_main
|
||||
from media.xianzhi import xianzhi_main
|
||||
from spider.common import run, seebug_main, M_4hou_main, anquanke_main, sec_wiki_main, huawei_main, doonsec_main, qianxin_main
|
||||
from spider.freebuf import freebuf_main
|
||||
from spider.xianzhi import xianzhi_main
|
||||
from spider.sougou_wx import sougou_wx_main
|
||||
from spider.github import github_main
|
||||
from GotoSend.M_4hou import Src_4hou
|
||||
from GotoSend.anquanke import Src_anquanke
|
||||
from GotoSend.doonsec import Src_doonsec
|
||||
@ -24,7 +26,9 @@ from GotoSend.xianzhi import Src_xianzhi
|
||||
from GotoSend.freebuf import Src_freebuf
|
||||
from GotoSend.qianxin import Src_qianxin
|
||||
from GotoSend.seebug import Src_seebug
|
||||
from config.check_config import get_core_config, get_debug_config
|
||||
from GotoSend.sougou_wx import Src_sougou_wx
|
||||
from GotoSend.github import Src_github
|
||||
from config.check_config import get_core_config, get_debug_config, get_kewords_config
|
||||
from loguru import logger
|
||||
|
||||
# 清除所有已有的日志记录器配置
|
||||
@ -49,7 +53,10 @@ def signal_handler(sig, frame):
|
||||
signal.signal(signal.SIGINT, signal_handler) # Ctrl+C
|
||||
signal.signal(signal.SIGTERM, signal_handler) # kill命令
|
||||
webhook_url_once, timestamp_once, sign_once = gen_sign()
|
||||
e_hour, choice, fs_activate, wx_activate, ding_activate, lx_activate, url_web = get_core_config()
|
||||
e_hour, time_choice, choice, fs_activate, wx_activate, ding_activate, lx_activate, url_web = get_core_config()
|
||||
Sogou_WX, Doonsec_switch, Doonsec = get_kewords_config()
|
||||
|
||||
|
||||
|
||||
def check_avaliable(info_long, info_short, title, webhook_url, timestamp, sign):
|
||||
if info_long: # 发送完整文章相关内容
|
||||
@ -80,10 +87,8 @@ def check_avaliable(info_long, info_short, title, webhook_url, timestamp, sign):
|
||||
if not info_long and not info_short:
|
||||
logger.info(f"{title}数据为空,跳过执行。")
|
||||
|
||||
def send_job(time_1):
|
||||
def send_job_RSS(time_1):
|
||||
# 爬取数据
|
||||
logger.info(f"发送程序启动,当前时间为:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
logger.info("正在启动各爬虫并获取资源中...")
|
||||
seebug_main()
|
||||
anquanke_main()
|
||||
huawei_main()
|
||||
@ -96,7 +101,7 @@ def send_job(time_1):
|
||||
# 分析各个数据源的结果(输出长结果)
|
||||
result_4hou_long = Src_4hou(time_1, False)
|
||||
result_anquanke_long = Src_anquanke(time_1, False)
|
||||
result_doonsec_long = Src_doonsec(time_1, False)
|
||||
result_doonsec_long = Src_doonsec(time_1, False, Doonsec_switch, Doonsec)
|
||||
result_xianzhi_long = Src_xianzhi(time_1, False)
|
||||
result_freebuf_long = Src_freebuf(time_1, False)
|
||||
result_qianxin_long = Src_qianxin(time_1, False)
|
||||
@ -104,7 +109,7 @@ def send_job(time_1):
|
||||
# 分析各个数据源的结果(输出短结果)
|
||||
result_4hou_short = Src_4hou(time_1, True)
|
||||
result_anquanke_short = Src_anquanke(time_1, True)
|
||||
result_doonsec_short = Src_doonsec(time_1, True)
|
||||
result_doonsec_short = Src_doonsec(time_1, True, Doonsec_switch, Doonsec)
|
||||
result_xianzhi_short = Src_xianzhi(time_1, True)
|
||||
result_freebuf_short = Src_freebuf(time_1, True)
|
||||
result_qianxin_short = Src_qianxin(time_1, True)
|
||||
@ -120,17 +125,21 @@ def send_job(time_1):
|
||||
check_avaliable(result_qianxin_long, result_qianxin_short, "奇安信攻防社区资讯", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_seebug_long, result_seebug_short, "Seebug社区资讯", webhook_url, timestamp, sign)
|
||||
|
||||
if fs_activate == "True":
|
||||
send_result = SendToFeishu(f"[点此访问]({url_web})网站以查看全部文章。", "单次运行结束", webhook_url, timestamp, sign)
|
||||
logger.info(send_result)
|
||||
else:
|
||||
pass
|
||||
if wx_activate == "True":
|
||||
send_result = SendToWX(f"[点此访问]({url_web})网站以查看全部文章。", "单次运行结束")
|
||||
logger.info(send_result)
|
||||
else:
|
||||
pass
|
||||
logger.info("执行完毕,等待下一次执行...")
|
||||
def send_job_SX():
|
||||
sougou_wx_main(Sogou_WX)
|
||||
result_sx_long = Src_sougou_wx(False)
|
||||
result_sx_short = Src_sougou_wx(True)
|
||||
webhook_url, timestamp, sign = gen_sign()
|
||||
check_avaliable(result_sx_long, result_sx_short, "微信公众号关键词相关内容", webhook_url, timestamp, sign)
|
||||
|
||||
def send_job_github(time_1):
|
||||
github_main()
|
||||
result_github_1_long, result_github_2_long, result_github_3_long = Src_github(time_1, False)
|
||||
result_github_1_short, result_github_2_short, result_github_3_short = Src_github(time_1, True)
|
||||
webhook_url, timestamp, sign = gen_sign()
|
||||
check_avaliable(result_github_1_long, result_github_1_short, "Github项目监控-关键词监控", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_github_2_long, result_github_2_short, "Github项目监控-项目更新情况", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_github_3_long, result_github_3_short, "Github项目监控-大佬工具", webhook_url, timestamp, sign)
|
||||
|
||||
# 探测rss源状态
|
||||
def check_rss_status(url):
|
||||
@ -167,12 +176,22 @@ def test_rss_source():
|
||||
|
||||
return rss_info
|
||||
|
||||
def main_loop(choice):
|
||||
if choice == 1:
|
||||
def main_job(e_hour):
|
||||
logger.info(f"发送程序启动,当前时间为:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
logger.info("正在启动各爬虫并获取资源中...")
|
||||
if 0 in choice:
|
||||
send_job_RSS(e_hour)
|
||||
if 1 in choice:
|
||||
send_job_SX()
|
||||
if 2 in choice:
|
||||
send_job_github(e_hour)
|
||||
|
||||
def main_loop(time_choice):
|
||||
if time_choice == 1:
|
||||
while True:
|
||||
try:
|
||||
# 执行任务
|
||||
send_job(e_hour)
|
||||
main_job(e_hour)
|
||||
time.sleep(e_hour * 60 * 60 - 3 * 60)
|
||||
|
||||
except Exception as e:
|
||||
@ -181,13 +200,13 @@ def main_loop(choice):
|
||||
# logger.info(result)
|
||||
exit()
|
||||
|
||||
elif choice == 0:
|
||||
elif time_choice == 0:
|
||||
# 设置每天的特定时间点执行job函数
|
||||
schedule.every().day.at("09:00").do(send_job, 12)
|
||||
schedule.every().day.at("12:00").do(send_job, 3)
|
||||
schedule.every().day.at("15:00").do(send_job, 3)
|
||||
schedule.every().day.at("18:00").do(send_job, 3)
|
||||
schedule.every().day.at("21:00").do(send_job, 3)
|
||||
schedule.every().day.at("09:00").do(main_job, 12)
|
||||
schedule.every().day.at("12:00").do(main_job, 3)
|
||||
schedule.every().day.at("15:00").do(main_job, 3)
|
||||
schedule.every().day.at("18:00").do(main_job, 3)
|
||||
schedule.every().day.at("21:00").do(main_job, 3)
|
||||
|
||||
while True:
|
||||
schedule.run_pending()
|
||||
@ -198,16 +217,19 @@ def send_first_message():
|
||||
start_info = ""
|
||||
start_info += "程序已启动,当前时间为:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n"
|
||||
start_info += "程序作者:MasonLiu \t 开源地址:[GM-gitea](https://git.masonliu.com/MasonLiu/PyBot)" + "\n"
|
||||
if choice == 1:
|
||||
if time_choice == 1:
|
||||
start_info += "时间配置:每隔" + str(e_hour) + "小时执行一次推送\n"
|
||||
else:
|
||||
elif time_choice == 0:
|
||||
start_info += "时间配置:每天固定时间点执行推送\n"
|
||||
if 0 in choice:
|
||||
if fs_activate == "True":
|
||||
result = SendToFeishu(start_info, "程序信息", webhook_url_once, timestamp_once, sign_once)
|
||||
logger.info(result)
|
||||
result = SendToFeishu(rss_info, "RSS源状态", webhook_url_once, timestamp_once, sign_once)
|
||||
# logger.info(rss_info)
|
||||
logger.info(result)
|
||||
send_result = SendToFeishu(f"[点此访问]({url_web})网站以查看全部文章。", "首次运行提醒", webhook_url_once, timestamp_once, sign_once)
|
||||
logger.info(send_result)
|
||||
else:
|
||||
pass
|
||||
if wx_activate == "True":
|
||||
@ -216,6 +238,8 @@ def send_first_message():
|
||||
result = SendToWX(rss_info, "RSS源状态")
|
||||
# logger.info(rss_info)
|
||||
logger.info(result)
|
||||
send_result = SendToWX(f"[点此访问]({url_web})网站以查看全部文章。", "首次运行提醒")
|
||||
logger.info(send_result)
|
||||
else:
|
||||
pass
|
||||
|
||||
@ -228,4 +252,4 @@ if __name__ == "__main__":
|
||||
|
||||
# 主程序
|
||||
send_first_message()
|
||||
main_loop(choice)
|
||||
main_loop(time_choice)
|
56
Dev_test.py
56
Dev_test.py
@ -1,10 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
@Author: MasonLiu
|
||||
@Description: 本程序可以爬取各安全资讯源,并发送到飞书群组。
|
||||
"""
|
||||
|
||||
import schedule
|
||||
import os
|
||||
import signal
|
||||
import sys
|
||||
import time
|
||||
import yaml
|
||||
import requests
|
||||
from datetime import datetime, timedelta
|
||||
from SendCore.FeishuSendBot import SendToFeishu, gen_sign
|
||||
from SendCore.QiweiSendBot import SendToWX
|
||||
from media.common import run, seebug_main, M_4hou_main, anquanke_main, sec_wiki_main, huawei_main, doonsec_main, qianxin_main
|
||||
from media.freebuf import freebuf_main
|
||||
from media.xianzhi import xianzhi_main
|
||||
from media.sougou_wx import sougou_wx_main
|
||||
from media.github import github_main
|
||||
from GotoSend.M_4hou import Src_4hou
|
||||
from GotoSend.anquanke import Src_anquanke
|
||||
from GotoSend.doonsec import Src_doonsec
|
||||
from GotoSend.xianzhi import Src_xianzhi
|
||||
from GotoSend.freebuf import Src_freebuf
|
||||
from GotoSend.qianxin import Src_qianxin
|
||||
from GotoSend.seebug import Src_seebug
|
||||
from GotoSend.sougou_wx import Src_sougou_wx
|
||||
# from GotoSend.github import Src_github
|
||||
from config.check_config import get_core_config, get_debug_config, get_kewords_config
|
||||
from loguru import logger
|
||||
|
||||
webhook_url, timestamp, sign = gen_sign()
|
||||
# # 全局变量
|
||||
# webhook_url_once, timestamp_once, sign_once = gen_sign()
|
||||
# e_hour, time_choice, choice, fs_activate, wx_activate, ding_activate, lx_activate, url_web = get_core_config()
|
||||
# Sogou_WX = get_kewords_config()
|
||||
# webhook_url, timestamp, sign = gen_sign()
|
||||
|
||||
# 测试用消息体
|
||||
test_msg = {
|
||||
"请单件文档查看昨天讨论的方案相关飞书文档,注意作者为 <font color=red> **张三** <font> 版本为 \n*002* ,版本 ~~001~~ 已经删除。文件地址是 [https://www.feishu.cn](https://www.feishu.cn),打开次数:1次"
|
||||
}
|
||||
# sougou_wx_main(Sogou_WX)
|
||||
# result_sx_long = Src_sougou_wx(False)
|
||||
# result_sx_short = Src_sougou_wx(True)
|
||||
# webhook_url, timestamp, sign = gen_sign()
|
||||
# SendToFeishu(result_sx_long, "微信公众号关键词相关内容", webhook_url, timestamp, sign)
|
||||
|
||||
SendToFeishu(test_msg, "先知社区资讯递送", webhook_url, timestamp, sign)
|
||||
github_main()
|
||||
|
||||
|
||||
# # 测试用消息体
|
||||
# test_msg = {
|
||||
# "请单件文档查看昨天讨论的方案相关飞书文档,注意作者为 <font color=red> **张三** <font> 版本为 \n*002* ,版本 ~~001~~ 已经删除。文件地址是 [https://www.feishu.cn](https://www.feishu.cn),打开次数:1次"
|
||||
# }
|
||||
|
||||
# SendToFeishu(test_msg, "先知社区资讯递送", webhook_url, timestamp, sign)
|
||||
|
Binary file not shown.
BIN
GotoSend/__pycache__/github.cpython-312.pyc
Normal file
BIN
GotoSend/__pycache__/github.cpython-312.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
GotoSend/__pycache__/sougou_wx.cpython-312.pyc
Normal file
BIN
GotoSend/__pycache__/sougou_wx.cpython-312.pyc
Normal file
Binary file not shown.
@ -68,20 +68,37 @@ def get_doonsec_json():
|
||||
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
def select_articles(e_hour, Doonsec_switch, Doonsec):
|
||||
conn = sqlite3.connect('./db/doonsec.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
now = datetime.now()
|
||||
start_time = now - timedelta(hours=e_hour)
|
||||
start_time = now - timedelta(hours=e_hour, minutes=3)
|
||||
end_time = now
|
||||
|
||||
if Doonsec_switch == False:
|
||||
# 查询指定时间段内的数据
|
||||
cursor.execute('''
|
||||
SELECT * FROM articles
|
||||
WHERE pubDate BETWEEN ? AND ?
|
||||
''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), end_time.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
elif Doonsec_switch == True:
|
||||
# 查询指定时间段内且title包含特定关键词的数据
|
||||
placeholders = ', '.join(['?'] * len(Doonsec))
|
||||
query = f'''
|
||||
SELECT * FROM articles
|
||||
WHERE pubDate BETWEEN ? AND ?
|
||||
AND (title LIKE ? OR title LIKE ? OR title LIKE ?)
|
||||
'''
|
||||
|
||||
# 构建参数列表
|
||||
params = [start_time.strftime('%Y-%m-%d %H:%M:%S'), end_time.strftime('%Y-%m-%d %H:%M:%S')]
|
||||
for keyword in Doonsec:
|
||||
params.append(f'%{keyword}%')
|
||||
|
||||
# 执行查询
|
||||
cursor.execute(query, params)
|
||||
|
||||
results = cursor.fetchall()
|
||||
conn.close()
|
||||
@ -133,7 +150,7 @@ def get_filtered_articles(entries, Is_short):
|
||||
return result
|
||||
|
||||
|
||||
def Src_doonsec(e_hour, Is_short):
|
||||
def Src_doonsec(e_hour, Is_short, Doonsec_switch, Doonsec):
|
||||
if not os.path.exists('./db/doonsec.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
@ -148,7 +165,7 @@ def Src_doonsec(e_hour, Is_short):
|
||||
insert_data(M_doonsec_data)
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
filtered_articles = select_articles(e_hour)
|
||||
filtered_articles = select_articles(e_hour, Doonsec_switch, Doonsec)
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
@ -158,7 +175,7 @@ def Src_doonsec(e_hour, Is_short):
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
reslts = Src_doonsec(4, False)
|
||||
reslts = Src_doonsec(24, False, True, ["webshell", "2000", "POC"] )
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
|
@ -50,7 +50,7 @@ def get_freebuf_json():
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
raise ValueError("JSON文件格式错误,请检查common.py是否异常!")
|
||||
raise ValueError("JSON文件格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
# 提取所需字段并编号
|
||||
total_data = []
|
||||
|
@ -0,0 +1,369 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import json
|
||||
import sqlite3
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.executescript('''
|
||||
CREATE TABLE IF NOT EXISTS keywords (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT,
|
||||
link TEXT,
|
||||
description TEXT,
|
||||
pubDate DATETIME,
|
||||
author TEXT,
|
||||
keyword TEXT,
|
||||
language TEXT,
|
||||
is_sended BOOLEAN
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS repos (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT,
|
||||
link TEXT,
|
||||
description TEXT,
|
||||
pubDate DATETIME,
|
||||
author TEXT,
|
||||
keyword TEXT,
|
||||
link2 TEXT
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT,
|
||||
link TEXT,
|
||||
description TEXT,
|
||||
pubDate DATETIME,
|
||||
author TEXT,
|
||||
keyword TEXT,
|
||||
language TEXT,
|
||||
is_sended BOOLEAN
|
||||
);
|
||||
''')
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
|
||||
def insert_data():
|
||||
# 检查文件是否存在
|
||||
# 打开并读取JSON文件
|
||||
# 假设data是一个包含多个JSON对象的列表,然后校验JSON格式是否异常
|
||||
if not os.path.exists('./JSON/github_keyword.json'):
|
||||
raise FileNotFoundError(f"github_keyword文件不存在,请检查程序是否运行正常!")
|
||||
with open('./JSON/github_keyword.json', 'r', encoding='utf-8') as file:
|
||||
data_keyword = json.load(file)
|
||||
if not isinstance(data_keyword, list):
|
||||
raise ValueError("JSON文件格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
if not os.path.exists('./JSON/github_repo.json'):
|
||||
raise FileNotFoundError(f"github_repo文件不存在,请检查程序是否运行正常!")
|
||||
with open('./JSON/github_repo.json', 'r', encoding='utf-8') as file:
|
||||
data_repo = json.load(file)
|
||||
if not isinstance(data_repo, list):
|
||||
raise ValueError("JSON文件格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
if not os.path.exists('./JSON/github_user.json'):
|
||||
raise FileNotFoundError(f"github_user文件不存在,请检查程序是否运行正常!")
|
||||
with open('./JSON/github_user.json', 'r', encoding='utf-8') as file:
|
||||
data_user = json.load(file)
|
||||
if not isinstance(data_user, list):
|
||||
raise ValueError("JSON文件格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 提取所需字段并编号
|
||||
for index, item in enumerate(data_keyword, start=1):
|
||||
entry = {
|
||||
"id": index,
|
||||
"title": item.get("name", ""),
|
||||
"link": item.get("link", ""),
|
||||
"description": item.get("description", ""),
|
||||
"pubDate": item.get("created_at", ""),
|
||||
"author": item.get("author", ""),
|
||||
"keyword": item.get("keyword", ""),
|
||||
"language": item.get("language", "")
|
||||
}
|
||||
try:
|
||||
# 解析 pubDate 字符串为 datetime 对象
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
# 格式化 pubDate 为所需的格式
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
formatted_pub_date = entry['pubDate']
|
||||
|
||||
|
||||
# 检查是否存在相同 title 和 author 的记录
|
||||
cursor.execute('''
|
||||
SELECT 1 FROM keywords WHERE title = ? AND author = ?
|
||||
''', (entry['title'], entry['author']))
|
||||
|
||||
if cursor.fetchone() is None:
|
||||
# 如果没有找到相同记录,则插入新记录
|
||||
cursor.execute('''
|
||||
INSERT INTO keywords (title, link, description, pubDate, author, language, keyword)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (entry['title'], entry['link'], entry['description'], formatted_pub_date, entry['author'], entry['language'], entry['keyword']))
|
||||
|
||||
for index, item in enumerate(data_repo, start=1):
|
||||
entry = {
|
||||
"id": index,
|
||||
"title": item.get("name", ""),
|
||||
"link": item.get("link", ""),
|
||||
"description": item.get("description", ""),
|
||||
"pubDate": item.get("updated_at", ""),
|
||||
"author": item.get("author", ""),
|
||||
"keyword": item.get("keyword", ""),
|
||||
"link2": item.get("link_2", "")
|
||||
}
|
||||
try:
|
||||
# 解析 pubDate 字符串为 datetime 对象
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
# 格式化 pubDate 为所需的格式
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
formatted_pub_date = entry['pubDate']
|
||||
|
||||
cursor.execute('''
|
||||
INSERT INTO repos (title, link, description, pubDate, author, link2, keyword)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (entry['title'], entry['link'], entry['description'], formatted_pub_date, entry['author'], entry['link2'], entry['keyword']))
|
||||
|
||||
|
||||
# 插入 users 数据
|
||||
for index, item in enumerate(data_user, start=1):
|
||||
entry = {
|
||||
"id": index,
|
||||
"title": item.get("name", ""),
|
||||
"link": item.get("link", ""),
|
||||
"description": item.get("description", ""),
|
||||
"pubDate": item.get("created_at", ""),
|
||||
"author": item.get("author", ""),
|
||||
"keyword": item.get("keyword", ""),
|
||||
"language": item.get("language", "")
|
||||
}
|
||||
try:
|
||||
# 解析 pubDate 字符串为 datetime 对象
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
# 格式化 pubDate 为所需的格式
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
formatted_pub_date = entry['pubDate']
|
||||
|
||||
# 检查是否存在相同 title 和 author 的记录
|
||||
cursor.execute('''
|
||||
SELECT 1 FROM users WHERE title = ? AND author = ?
|
||||
''', (entry['title'], entry['author']))
|
||||
|
||||
if cursor.fetchone() is None:
|
||||
# 如果没有找到相同记录,则插入新记录
|
||||
cursor.execute('''
|
||||
INSERT INTO users (title, link, description, pubDate, author, keyword, language)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (entry['title'], entry['link'], entry['description'], formatted_pub_date, entry['author'], entry['keyword'], entry['language']))
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
now = datetime.now()
|
||||
two_months_ago = now - timedelta(days=60) # 假设两个月大约60天
|
||||
start_time = now - timedelta(hours=e_hour, minutes=3)
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
cursor.execute('''
|
||||
SELECT * FROM keywords
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
ORDER BY pubDate DESC
|
||||
''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), now.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
|
||||
result_1 = cursor.fetchall()
|
||||
|
||||
if result_1:
|
||||
for row in result_1:
|
||||
keyword_id = row[0]
|
||||
cursor.execute('''
|
||||
UPDATE keywords
|
||||
SET is_sended = True
|
||||
WHERE id = ?
|
||||
''', (keyword_id,))
|
||||
|
||||
conn.commit()
|
||||
|
||||
cursor.execute('''
|
||||
SELECT * FROM repos
|
||||
WHERE pubDate BETWEEN ? AND ?
|
||||
''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), now.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
|
||||
result_2 = cursor.fetchall()
|
||||
|
||||
# 查询最近的5条未被标记为True的消息且发布时间不超过两个月
|
||||
cursor.execute('''
|
||||
SELECT * FROM users
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
ORDER BY pubDate DESC
|
||||
LIMIT 5
|
||||
''', (two_months_ago.strftime('%Y-%m-%d %H:%M:%S'), now.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
|
||||
# 查询最近的3条未被标记为True的消息
|
||||
# cursor.execute('''
|
||||
# SELECT * FROM users
|
||||
# WHERE is_sended IS NULL
|
||||
# ORDER BY pubDate DESC
|
||||
# LIMIT 5
|
||||
# ''')
|
||||
|
||||
result_3 = cursor.fetchall()
|
||||
# print(results)
|
||||
|
||||
if result_3:
|
||||
for row in result_3:
|
||||
user_id = row[0]
|
||||
cursor.execute('''
|
||||
UPDATE users
|
||||
SET is_sended = True
|
||||
WHERE id = ?
|
||||
''', (user_id,))
|
||||
|
||||
conn.commit() # 提交事务
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return result_1, result_2, result_3
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM repos')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./history/github.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
existing_content = file.read()
|
||||
else:
|
||||
existing_content = ""
|
||||
|
||||
# 将新内容插入到现有内容的开头
|
||||
new_content = result + existing_content
|
||||
|
||||
# 写回文件
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries, Is_short, choice):
|
||||
result = ""
|
||||
record = ""
|
||||
for entry in entries:
|
||||
if Is_short == False:
|
||||
if choice == 1:
|
||||
result += f"关键词【{entry[6]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"项目描述:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += f"开发语言:{entry[7]}\t\t作者:{entry[5]}\n"
|
||||
result += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif choice == 2:
|
||||
result += f"项目:[{entry[1]}]({entry[2]})存在更新!!!\n"
|
||||
result += f"更新描述:{entry[3]}\n"
|
||||
result += f"更新时间:{entry[4]}\n"
|
||||
result += f"提交者:{entry[5]},[点此查看提交详情]({entry[2]})\n"
|
||||
result += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif choice == 3:
|
||||
result += f"大佬 {entry[5]} 上传了一个新工具:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"项目描述:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif Is_short == True:
|
||||
if choice == 1:
|
||||
result += f"关键词【{entry[7]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += f"开发语言:{entry[6]}\t\t作者:{entry[5]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif choice == 2:
|
||||
result += f"项目:[{entry[1]}]({entry[2]})存在更新!!!\n"
|
||||
result += f"更新描述:{entry[3]}\n"
|
||||
result += f"更新时间:{entry[4]}\n"
|
||||
result += f"提交者:{entry[5]},[点此查看提交详情]({entry[2]})\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif choice == 3:
|
||||
result += f"大佬 {entry[5]} 上传了一个新工具:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"项目描述:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
if choice == 1:
|
||||
record += f"#### 关键词【{entry[7]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**项目描述**:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += f"**开发语言**:{entry[6]}\t\t**作者**:{entry[5]}\n"
|
||||
record += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif choice == 2:
|
||||
record += f"#### 项目:[{entry[1]}]({entry[2]})存在更新!!!\n"
|
||||
record += f"**更新描述**:{entry[3]}\n"
|
||||
record += f"**更新时间**:{entry[4]}\n"
|
||||
record += f"**提交者**:{entry[5]},[点此查看提交详情]({entry[2]})\n"
|
||||
record += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif choice == 3:
|
||||
record += f"#### 大佬 {entry[5]} 上传了一个新工具:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**项目描述**:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
|
||||
def Src_github(e_hour, Is_short):
|
||||
if not os.path.exists('./db/github.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
# 清空表
|
||||
clear_table()
|
||||
|
||||
# 插入数据到数据库
|
||||
insert_data()
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
keyword_data, repo_data, user_data = select_articles(e_hour)
|
||||
|
||||
if keyword_data:
|
||||
result_1 = get_filtered_articles(keyword_data, Is_short, 1)
|
||||
else:
|
||||
result_1 = ""
|
||||
if repo_data:
|
||||
result_2 = get_filtered_articles(repo_data, Is_short, 2)
|
||||
else:
|
||||
result_2 = ""
|
||||
if user_data:
|
||||
result_3 = get_filtered_articles(user_data, Is_short, 3)
|
||||
else:
|
||||
result_3 = ""
|
||||
return result_1, result_2, result_3
|
||||
|
||||
if __name__ == "__main__":
|
||||
result_1, result_2, result_3 = Src_github(24, False)
|
||||
if result_1 != "":
|
||||
print(result_1)
|
||||
elif result_2 != "":
|
||||
print(result_2)
|
||||
if result_3 != "":
|
||||
print(result_3)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 10)
|
||||
print("github数据为空,跳过执行。")
|
@ -108,7 +108,7 @@ def get_filtered_articles(entries, Is_short):
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += f"描述:{entry[4]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == False:
|
||||
if Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
@ -59,7 +59,7 @@ def get_json():
|
||||
for keyword, keyword_data in data.items():
|
||||
# 检查关键词对应的数据是否为列表
|
||||
if not isinstance(keyword_data, list):
|
||||
raise ValueError(f"关键词 {keyword} 对应的数据格式错误,请检查common.py是否异常!")
|
||||
raise ValueError(f"关键词 {keyword} 对应的数据格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
# 提取所需字段并编号
|
||||
for index, item in enumerate(keyword_data, start=1):
|
@ -1,4 +1,154 @@
|
||||
[
|
||||
{
|
||||
"title": "cjson&json 二进制漏洞利用总结",
|
||||
"link": "https://xz.aliyun.com/t/16928",
|
||||
"published": "2024-12-26T22:55:12+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16928",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "cjson&json 二进制漏洞利用总结"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "CVE-2024-9047 (WordPress File Upload 插件漏洞分析)",
|
||||
"link": "https://xz.aliyun.com/t/16927",
|
||||
"published": "2024-12-26T20:23:12+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16927",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "CVE-2024-9047 (WordPress File Upload 插件漏洞分析)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Windows应急响应之USBDevices日志",
|
||||
"link": "https://xz.aliyun.com/t/16926",
|
||||
"published": "2024-12-26T17:39:57+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16926",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "Windows应急响应之USBDevices日志"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "0CTF 2024 部分WP",
|
||||
"link": "https://xz.aliyun.com/t/16925",
|
||||
"published": "2024-12-26T17:39:49+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16925",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "0CTF 2024 部分WP"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "通过漏洞靶场学习Android应用安全",
|
||||
"link": "https://xz.aliyun.com/t/16924",
|
||||
"published": "2024-12-26T17:38:34+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16924",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "通过漏洞靶场学习Android应用安全"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Apache mina CVE-2024-52046漏洞分析复现",
|
||||
"link": "https://xz.aliyun.com/t/16923",
|
||||
"published": "2024-12-26T17:30:45+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16923",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "Apache mina CVE-2024-52046漏洞分析复现"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "ciscn2024 androidso_re分析",
|
||||
"link": "https://xz.aliyun.com/t/16920",
|
||||
"published": "2024-12-26T10:37:32+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16920",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "ciscn2024 androidso_re分析"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "前端加解密对抗encrypt-labs",
|
||||
"link": "https://xz.aliyun.com/t/16919",
|
||||
"published": "2024-12-26T10:29:25+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16919",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "前端加解密对抗encrypt-labs"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "AFL工具使用实践:以libtiff为例的使用指南",
|
||||
"link": "https://xz.aliyun.com/t/16916",
|
||||
"published": "2024-12-26T04:16:13+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16916",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "AFL工具使用实践:以libtiff为例的使用指南"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "应急响应系列靶场解析",
|
||||
"link": "https://xz.aliyun.com/t/16914",
|
||||
"published": "2024-12-25T23:48:42+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16914",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "应急响应系列靶场解析"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "记一次某红蓝演练经历",
|
||||
"link": "https://xz.aliyun.com/t/16913",
|
||||
"published": "2024-12-25T22:35:21+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16913",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "记一次某红蓝演练经历"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Java安全-WebShell免杀的多种方式",
|
||||
"link": "https://xz.aliyun.com/t/16912",
|
||||
"published": "2024-12-25T21:33:55+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16912",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "Java安全-WebShell免杀的多种方式"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Linux渗透实战之Nullbyte靶场提权",
|
||||
"link": "https://xz.aliyun.com/t/16911",
|
||||
"published": "2024-12-25T20:46:30+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16911",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "Linux渗透实战之Nullbyte靶场提权"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "六安市第二届网络安全大赛WP",
|
||||
"link": "https://xz.aliyun.com/t/16909",
|
||||
"published": "2024-12-25T18:21:31+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16909",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "六安市第二届网络安全大赛WP"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "PyYAML反序列化学习",
|
||||
"link": "https://xz.aliyun.com/t/16908",
|
||||
"published": "2024-12-25T18:12:03+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16908",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "PyYAML反序列化学习"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "JAVA安全之SpEL表达式执行",
|
||||
"link": "https://xz.aliyun.com/t/16905",
|
||||
@ -848,155 +998,5 @@
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 0解PWN题--server解法"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "免杀基础-ppid伪造",
|
||||
"link": "https://xz.aliyun.com/t/16777",
|
||||
"published": "2024-12-16T10:00:14+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16777",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "免杀基础-ppid伪造"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "高效IO攻击利用学习之House of apple2超详解",
|
||||
"link": "https://xz.aliyun.com/t/16775",
|
||||
"published": "2024-12-16T00:37:35+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16775",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "高效IO攻击利用学习之House of apple2超详解"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第十八届信息安全大赛 && 第二届长城杯 - Crypto详解",
|
||||
"link": "https://xz.aliyun.com/t/16773",
|
||||
"published": "2024-12-15T22:42:00+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16773",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 - Crypto详解"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "m0leCon Beginner CTF2024部分wp",
|
||||
"link": "https://xz.aliyun.com/t/16772",
|
||||
"published": "2024-12-15T21:31:48+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16772",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "m0leCon Beginner CTF2024部分wp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Ucum-java XXE漏洞分析(CVE-2024-55887)",
|
||||
"link": "https://xz.aliyun.com/t/16771",
|
||||
"published": "2024-12-15T21:04:00+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16771",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "Ucum-java XXE漏洞分析(CVE-2024-55887)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第十八届信息安全大赛 && 第二届长城杯 - re",
|
||||
"link": "https://xz.aliyun.com/t/16766",
|
||||
"published": "2024-12-15T18:21:26+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16766",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 - re"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第十八届信息安全大赛 && 第二届长城杯 - zeroshell1~5,WinFT_1~2,sc05_1",
|
||||
"link": "https://xz.aliyun.com/t/16759",
|
||||
"published": "2024-12-15T17:26:01+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16759",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 - zeroshell1~5,WinFT_1~2,sc05_1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第二届“长城杯”铁人三项赛 (防护赛)初赛WriteUP",
|
||||
"link": "https://xz.aliyun.com/t/16789",
|
||||
"published": "2024-12-15T17:26:01+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16789",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第二届“长城杯”铁人三项赛 (防护赛)初赛WriteUP"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第十八届信息安全大赛 && 第二届长城杯 - web&re wp",
|
||||
"link": "https://xz.aliyun.com/t/16755",
|
||||
"published": "2024-12-15T17:14:30+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16755",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 - web&re wp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第十八届信息安全大赛 && 第二届长城杯 - pwn",
|
||||
"link": "https://xz.aliyun.com/t/16751",
|
||||
"published": "2024-12-15T17:05:55+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16751",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 - pwn"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "第十八届信息安全大赛 && 第二届长城杯 - WEB WP",
|
||||
"link": "https://xz.aliyun.com/t/16750",
|
||||
"published": "2024-12-15T17:02:06+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16750",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "第十八届信息安全大赛 && 第二届长城杯 - WEB WP"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "HITCTF pipe_snake详解",
|
||||
"link": "https://xz.aliyun.com/t/16748",
|
||||
"published": "2024-12-15T09:25:49+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16748",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "HITCTF pipe_snake详解"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "记一次客户系统的测试--多种经典类型漏洞",
|
||||
"link": "https://xz.aliyun.com/t/16747",
|
||||
"published": "2024-12-14T23:33:38+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16747",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "记一次客户系统的测试--多种经典类型漏洞"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "记一次渗透到审计",
|
||||
"link": "https://xz.aliyun.com/t/16746",
|
||||
"published": "2024-12-14T21:23:00+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16746",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "记一次渗透到审计"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "某次大学的渗透测试经历",
|
||||
"link": "https://xz.aliyun.com/t/16745",
|
||||
"published": "2024-12-14T16:51:12+08:00",
|
||||
"id": "https://xz.aliyun.com/t/16745",
|
||||
"summary": {
|
||||
"@type": "html",
|
||||
"#text": "某次大学的渗透测试经历"
|
||||
}
|
||||
}
|
||||
]
|
@ -25,3 +25,5 @@
|
||||
- 2024年12月24日晚:上传了测试0.1版本,修复了报错问题 <br>
|
||||
- 2024年12月25日早:优化了代码逻辑和表现 <br>
|
||||
- 2024年12月25日晚:优化了推送报文格式 <br>
|
||||
- 2024年12月30日:添加并完善了基于搜狗搜索的微信公众号文章监测 <br>
|
||||
- 2024年12月30日晚:为洞见微信资讯推送添加了关键词筛选 <br>
|
Binary file not shown.
@ -19,7 +19,8 @@ def get_core_config():
|
||||
config = yaml.safe_load(file)
|
||||
logger.debug(f"Loaded config: {config}") # 输出加载的配置
|
||||
|
||||
choice = int(f"{config['circle']}")
|
||||
time_choice = int(f"{config['time_mode']}")
|
||||
choice = config['mode'] # 假设 mode 是一个列表
|
||||
e_hour = int(config.get('e_hour', '4')) # 默认循环时间为4小时
|
||||
|
||||
fs_activate = f"{config['fs_activate']}"
|
||||
@ -53,7 +54,7 @@ def get_core_config():
|
||||
|
||||
url_web = f"{config['url']}"
|
||||
|
||||
return e_hour, choice, fs_activate, wx_activate, ding_activate, lx_activate, url_web
|
||||
return e_hour, time_choice, choice, fs_activate, wx_activate, ding_activate, lx_activate, url_web
|
||||
|
||||
def get_debug_config():
|
||||
with open('./config/config.yaml', 'r', encoding="utf-8") as file:
|
||||
@ -61,3 +62,12 @@ def get_debug_config():
|
||||
debug = f"{config['debug']}"
|
||||
|
||||
return debug
|
||||
|
||||
def get_kewords_config():
|
||||
with open('./config/keywords.yaml', 'r', encoding="utf-8") as file:
|
||||
config = yaml.safe_load(file)
|
||||
Sogou_WX = config['Sogou-WX']
|
||||
Doonsec_switch = f"{config['Doonsec-switch']}"
|
||||
Doonsec = config['Doonsec']
|
||||
|
||||
return Sogou_WX, Doonsec_switch, Doonsec
|
@ -1,7 +1,10 @@
|
||||
# 飞书相关配置信息
|
||||
# fs_activate: True
|
||||
# fs_key: aa04a02f-d7bf-4279-bd48-44c4f28c8f74 # 此处填写token,记得冒号后空一格,如aa04a02f-d7bf-4279-bd48-44c4f28c8f74
|
||||
# fs_secret: 4tq65T4jm1MO2IlxvHxBWe # 此处填写签名密钥,记得冒号后空一格,如4tq65T4jm1MO2IlxvHxBWe
|
||||
fs_activate: True
|
||||
fs_key: aa04a02f-d7bf-4279-bd48-44c4f28c8f74 # 此处填写token,记得冒号后空一格,如aa04a02f-d7bf-4279-bd48-44c4f28c8f74
|
||||
fs_secret: 4tq65T4jm1MO2IlxvHxBWe # 此处填写签名密钥,记得冒号后空一格,如4tq65T4jm1MO2IlxvHxBWe
|
||||
fs_key: 202d7e51-9a46-422e-a035-863bc42bc459 # 此处填写token,记得冒号后空一格,如aa04a02f-d7bf-4279-bd48-44c4f28c8f74
|
||||
fs_secret: eZaSCl5DSqtJyZ8QpJBDFh # 此处填写签名密钥,记得冒号后空一格,如4tq65T4jm1MO2IlxvHxBWe
|
||||
|
||||
# 企业微信相关配置信息
|
||||
wx_activate: False
|
||||
@ -23,7 +26,13 @@ sender: test@masonliu.com
|
||||
receivers: ['2857911564@qq.com']
|
||||
# 结算时间范围
|
||||
e_hour: 4 # 程序运行时间间隔
|
||||
circle: 1 # 是否启用循环,设置为0后将设置为特定时间点运行
|
||||
time_mode: 1
|
||||
# 0:定时运行模式,仅在指定时间运行(参照Core.py中设置)
|
||||
# 1:启用循环,一定间隔时间后运行
|
||||
mode: [1, 2] # 运行模式,可多选
|
||||
# 0:启用RSS抓取模式
|
||||
# 1:启用搜狗-微信公众号文章监测
|
||||
# 2:启用github项目监测
|
||||
|
||||
# 网址配置
|
||||
url: https://info.masonliu.com/ # 请设置为您自己反代的域名,或者改为 http://127.0.0.1:5000 或者对应IP域名
|
||||
|
@ -1,24 +1,24 @@
|
||||
# github相关配置信息
|
||||
github_token: xxxxxx # 此处填写github-token,在高速率获取github资源时有效防止403封禁
|
||||
github_token: # 此处填写github-token,在高速率获取github资源时有效防止403封禁
|
||||
translate: False # 是否开启翻译
|
||||
|
||||
# 监控列表
|
||||
tool_list: # 监控已创建的仓库是否更新
|
||||
- https://api.github.com/repos/BeichenDream/Godzilla
|
||||
- https://api.github.com/repos/rebeyond/Behinder
|
||||
- https://api.github.com/repos/AntSwordProject/antSword
|
||||
- https://api.github.com/repos/j1anFen/shiro_attack
|
||||
- https://api.github.com/repos/yhy0/github-cve-monitor
|
||||
- https://api.github.com/repos/gentilkiwi/mimikatz
|
||||
- https://api.github.com/repos/ehang-io/nps
|
||||
- https://api.github.com/repos/chaitin/xray
|
||||
- https://api.github.com/repos/FunnyWolf/pystinger
|
||||
- https://api.github.com/repos/L-codes/Neo-reGeorg
|
||||
- https://api.github.com/repos/shadow1ng/fscan
|
||||
- https://api.github.com/repos/SafeGroceryStore/MDUT
|
||||
- https://api.github.com/repos/EdgeSecurityTeam/Vulnerability
|
||||
- https://api.github.com/repos/wy876/POC
|
||||
- https://api.github.com/Vme18000yuan/FreePOC
|
||||
- BeichenDream/Godzilla
|
||||
- rebeyond/Behinder
|
||||
- AntSwordProject/antSword
|
||||
- j1anFen/shiro_attack
|
||||
- yhy0/github-cve-monitor
|
||||
- gentilkiwi/mimikatz
|
||||
- ehang-io/nps
|
||||
- chaitin/xray
|
||||
- FunnyWolf/pystinger
|
||||
- L-codes/Neo-reGeorg
|
||||
- shadow1ng/fscan
|
||||
- SafeGroceryStore/MDUT
|
||||
- EdgeSecurityTeam/Vulnerability
|
||||
- wy876/POC
|
||||
- Vme18000yuan/FreePOC
|
||||
|
||||
keyword_list: # 监控关键词
|
||||
- sql注入
|
||||
@ -44,3 +44,14 @@ user_list: # 监控用户
|
||||
- lijiejie
|
||||
- projectdiscovery
|
||||
- HavocFramework
|
||||
|
||||
black_words: # 监控违禁词
|
||||
- 反共
|
||||
- 反中共
|
||||
- 反华
|
||||
- 香港独立
|
||||
- 港独
|
||||
- 共产党
|
||||
- 毛泽东
|
||||
- 习近平
|
||||
- 台独
|
@ -1 +1,3 @@
|
||||
Sogou-WX: ["中国银行", "APP逆向", "渗透测试"] # 基于搜狗引擎搜索特定关键词的微信公众号文章
|
||||
Sogou-WX: ["银行测试", "APP逆向", "渗透测试", "手机银行漏洞", "银行漏洞", "支付漏洞"] # 基于搜狗引擎搜索特定关键词的微信公众号文章
|
||||
Doonsec-switch: False
|
||||
Doonsec: ["逆向", "解包", "POC"] # 洞见微信安全资讯关键词
|
0
history/github.md
Normal file
0
history/github.md
Normal file
@ -1,10 +0,0 @@
|
||||
#### 文章:[钓鱼下载网站传播“游蛇”威胁,恶意安装程序暗藏远控木马](https://www.4hou.com/posts/6MVz)
|
||||
**作者**:安天
|
||||
**上传时间**:2024-12-25 17:02:19
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[钓鱼下载网站传播“游蛇”威胁,恶意安装程序暗藏远控木马](https://www.4hou.com/posts/6MVz)
|
||||
**作者**:安天
|
||||
**上传时间**:2024-12-25 17:02:19
|
||||
|
||||
----------------------------------------
|
@ -1,228 +0,0 @@
|
||||
#### 文章:[【2024补天白帽黑客年度盛典】Windows服务进程漏洞挖掘](https://forum.butian.net/share/4089)
|
||||
**来源**:subject
|
||||
**上传时间**:2024-12-25 17:39:57
|
||||
**描述**:演讲议题:Windows服务进程漏洞挖掘
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【2024补天白帽黑客年度盛典】大模型越狱攻击与评测](https://forum.butian.net/share/4088)
|
||||
**来源**:subject
|
||||
**上传时间**:2024-12-25 17:33:43
|
||||
**描述**:演讲议题:大模型越狱攻击与评测
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【2024补天白帽黑客年度盛典】当今勒索病毒的攻与防](https://forum.butian.net/share/4087)
|
||||
**来源**:subject
|
||||
**上传时间**:2024-12-25 17:26:49
|
||||
**描述**:演讲议题:当今勒索病毒的攻与防
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[网安瞭望台第18期:警惕新型攻击利用Windows Defender绕过终端检测、CVE-2024-50379 漏洞利用工具分享](https://mp.weixin.qq.com/s?__biz=Mzg2NTkwODU3Ng==&mid=2247514556&idx=1&sn=a10e80238c91658489ebe6cc8657315c)
|
||||
**作者**:东方隐侠安全团队
|
||||
**上传时间**:2024-12-25 20:31:30
|
||||
**简介**:网安资讯分享\\x0d\\x0aDAILY NEWS AND KNOWLEDGE
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[MDUT-Extend(MDUT-增强版) V1.2.0 Released](https://mp.weixin.qq.com/s?__biz=MzI5NDg0ODkwMQ==&mid=2247486138&idx=1&sn=4f881e7e1cc99466d57aa3d95d980b3b)
|
||||
**作者**:格格巫和蓝精灵
|
||||
**上传时间**:2024-12-25 20:16:51
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[CobaltStrike Bof开发(1)](https://mp.weixin.qq.com/s?__biz=Mzg5MDg3OTc0OA==&mid=2247489138&idx=1&sn=3095870df2c9d365db698936abde43b2)
|
||||
**作者**:Relay学安全
|
||||
**上传时间**:2024-12-25 20:05:52
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[Sa7mon-S3scanner:一款针对S3 Bucket的错误配置扫描工具](https://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651310595&idx=4&sn=78fdcc1150147cc6155e1a2e73c31521)
|
||||
**作者**:FreeBuf
|
||||
**上传时间**:2024-12-25 19:56:23
|
||||
**简介**:该工具兼容S3 API,可扫描开放S3 Bucket中潜在的错误配置。
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[免杀对抗从0开始(七)](https://mp.weixin.qq.com/s?__biz=Mzk0MzU5NTg1Ng==&mid=2247484849&idx=1&sn=f075965e73b511cfba0e53536232cf34)
|
||||
**作者**:泾弦安全
|
||||
**上传时间**:2024-12-25 19:50:33
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[针对护网行动中红队溯源工具 - HuntBack](https://mp.weixin.qq.com/s?__biz=MzIzNTE0Mzc0OA==&mid=2247486015&idx=1&sn=bc5b7dea1d9621678e4cc49a85d736ae)
|
||||
**作者**:GSDK安全团队
|
||||
**上传时间**:2024-12-25 19:41:48
|
||||
**简介**:HuntBack(反击狩猎),用于攻防演练中,防守方对恶意ip进行web指纹扫描与识别。在蓝队职守中,安全设备爆出恶意攻击ip地址,如果对方使用的是自己的服务器,并且搭建了一些安全业务,可使用本工具对目前已知工具进行探测
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[MDUT-Extend(MDUT-增强版) V1.2.0 Released](https://mp.weixin.qq.com/s?__biz=MzU0MzkzOTYzOQ==&mid=2247489554&idx=1&sn=d3d5aa81f68c323b815bcabe78f0b46a)
|
||||
**作者**:黑伞安全
|
||||
**上传时间**:2024-12-25 19:38:38
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[一款wifi数据抓包破解工具Wireshark](https://mp.weixin.qq.com/s?__biz=MzI1MzQwNjEzNA==&mid=2247484154&idx=1&sn=252b411b617f65ba4513c1dda0fe70aa)
|
||||
**作者**:渗透测试知识学习
|
||||
**上传时间**:2024-12-25 19:35:56
|
||||
**简介**:wife数据包破解
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[银狐黑产组织最新免杀样本详细分析](https://mp.weixin.qq.com/s?__biz=MzA4ODEyODA3MQ==&mid=2247489745&idx=1&sn=92cfd13140b08317c1901f6f89c89239)
|
||||
**作者**:安全分析与研究
|
||||
**上传时间**:2024-12-25 18:30:13
|
||||
**简介**:银狐黑产组织最新免杀样本详细分析
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[警惕!2024年全球零日漏洞利用呈现七大趋势](https://mp.weixin.qq.com/s?__biz=MzI4NDY2MDMwMw==&mid=2247513353&idx=1&sn=cc572d3391797a15aa66590d70d0ac96)
|
||||
**作者**:安全内参
|
||||
**上传时间**:2024-12-25 18:14:14
|
||||
**简介**:零日漏洞的攻击目标迁移
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[Apache Tomcat 漏洞导致服务器易受RCE攻击](https://mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&mid=2247521893&idx=1&sn=867f98595849107577a98fcaf043a177)
|
||||
**作者**:代码卫士
|
||||
**上传时间**:2024-12-25 18:11:51
|
||||
**简介**:速修复
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[绕过Elastic EDR进行横向移动](https://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247526433&idx=1&sn=6ee718605b5d67e3f68417bf664c46f8)
|
||||
**作者**:Ots安全
|
||||
**上传时间**:2024-12-25 18:01:05
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[探索 NASA CryptoLib 的 SDLS 实现中的漏洞](https://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247526433&idx=2&sn=9734352beed4645fcdc599733e607e22)
|
||||
**作者**:Ots安全
|
||||
**上传时间**:2024-12-25 18:01:05
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[利用 WDAC 武器化:粉碎 EDR 的梦想](https://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247526433&idx=3&sn=7fcef7477d3365c9f2905137b1be267e)
|
||||
**作者**:Ots安全
|
||||
**上传时间**:2024-12-25 18:01:05
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[《英雄无敌》4:修改pe导入表注入DLL扩展回城术功能](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458587767&idx=1&sn=dd1c04637890c14cb9d72fb95bbb0010)
|
||||
**作者**:看雪学苑
|
||||
**上传时间**:2024-12-25 17:59:58
|
||||
**简介**:看雪论坛作者ID:fdark
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【漏洞文字】博斯外贸管理软件 SQL注入](https://mp.weixin.qq.com/s?__biz=MzkyMTY1NDc2OA==&mid=2247487244&idx=1&sn=5011bd862eae6337a04f9e1673c7a184)
|
||||
**作者**:小羊安全屋
|
||||
**上传时间**:2024-12-25 17:01:56
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【2024补天白帽黑客年度盛典】Windows服务进程漏洞挖掘](https://forum.butian.net/share/4089)
|
||||
**来源**:subject
|
||||
**上传时间**:2024-12-25 17:39:57
|
||||
**描述**:演讲议题:Windows服务进程漏洞挖掘
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【2024补天白帽黑客年度盛典】大模型越狱攻击与评测](https://forum.butian.net/share/4088)
|
||||
**来源**:subject
|
||||
**上传时间**:2024-12-25 17:33:43
|
||||
**描述**:演讲议题:大模型越狱攻击与评测
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【2024补天白帽黑客年度盛典】当今勒索病毒的攻与防](https://forum.butian.net/share/4087)
|
||||
**来源**:subject
|
||||
**上传时间**:2024-12-25 17:26:49
|
||||
**描述**:演讲议题:当今勒索病毒的攻与防
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[网安瞭望台第18期:警惕新型攻击利用Windows Defender绕过终端检测、CVE-2024-50379 漏洞利用工具分享](https://mp.weixin.qq.com/s?__biz=Mzg2NTkwODU3Ng==&mid=2247514556&idx=1&sn=a10e80238c91658489ebe6cc8657315c)
|
||||
**作者**:东方隐侠安全团队
|
||||
**上传时间**:2024-12-25 20:31:30
|
||||
**简介**:网安资讯分享\\x0d\\x0aDAILY NEWS AND KNOWLEDGE
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[MDUT-Extend(MDUT-增强版) V1.2.0 Released](https://mp.weixin.qq.com/s?__biz=MzI5NDg0ODkwMQ==&mid=2247486138&idx=1&sn=4f881e7e1cc99466d57aa3d95d980b3b)
|
||||
**作者**:格格巫和蓝精灵
|
||||
**上传时间**:2024-12-25 20:16:51
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[CobaltStrike Bof开发(1)](https://mp.weixin.qq.com/s?__biz=Mzg5MDg3OTc0OA==&mid=2247489138&idx=1&sn=3095870df2c9d365db698936abde43b2)
|
||||
**作者**:Relay学安全
|
||||
**上传时间**:2024-12-25 20:05:52
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[Sa7mon-S3scanner:一款针对S3 Bucket的错误配置扫描工具](https://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651310595&idx=4&sn=78fdcc1150147cc6155e1a2e73c31521)
|
||||
**作者**:FreeBuf
|
||||
**上传时间**:2024-12-25 19:56:23
|
||||
**简介**:该工具兼容S3 API,可扫描开放S3 Bucket中潜在的错误配置。
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[免杀对抗从0开始(七)](https://mp.weixin.qq.com/s?__biz=Mzk0MzU5NTg1Ng==&mid=2247484849&idx=1&sn=f075965e73b511cfba0e53536232cf34)
|
||||
**作者**:泾弦安全
|
||||
**上传时间**:2024-12-25 19:50:33
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[针对护网行动中红队溯源工具 - HuntBack](https://mp.weixin.qq.com/s?__biz=MzIzNTE0Mzc0OA==&mid=2247486015&idx=1&sn=bc5b7dea1d9621678e4cc49a85d736ae)
|
||||
**作者**:GSDK安全团队
|
||||
**上传时间**:2024-12-25 19:41:48
|
||||
**简介**:HuntBack(反击狩猎),用于攻防演练中,防守方对恶意ip进行web指纹扫描与识别。在蓝队职守中,安全设备爆出恶意攻击ip地址,如果对方使用的是自己的服务器,并且搭建了一些安全业务,可使用本工具对目前已知工具进行探测
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[MDUT-Extend(MDUT-增强版) V1.2.0 Released](https://mp.weixin.qq.com/s?__biz=MzU0MzkzOTYzOQ==&mid=2247489554&idx=1&sn=d3d5aa81f68c323b815bcabe78f0b46a)
|
||||
**作者**:黑伞安全
|
||||
**上传时间**:2024-12-25 19:38:38
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[一款wifi数据抓包破解工具Wireshark](https://mp.weixin.qq.com/s?__biz=MzI1MzQwNjEzNA==&mid=2247484154&idx=1&sn=252b411b617f65ba4513c1dda0fe70aa)
|
||||
**作者**:渗透测试知识学习
|
||||
**上传时间**:2024-12-25 19:35:56
|
||||
**简介**:wife数据包破解
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[银狐黑产组织最新免杀样本详细分析](https://mp.weixin.qq.com/s?__biz=MzA4ODEyODA3MQ==&mid=2247489745&idx=1&sn=92cfd13140b08317c1901f6f89c89239)
|
||||
**作者**:安全分析与研究
|
||||
**上传时间**:2024-12-25 18:30:13
|
||||
**简介**:银狐黑产组织最新免杀样本详细分析
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[警惕!2024年全球零日漏洞利用呈现七大趋势](https://mp.weixin.qq.com/s?__biz=MzI4NDY2MDMwMw==&mid=2247513353&idx=1&sn=cc572d3391797a15aa66590d70d0ac96)
|
||||
**作者**:安全内参
|
||||
**上传时间**:2024-12-25 18:14:14
|
||||
**简介**:零日漏洞的攻击目标迁移
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[Apache Tomcat 漏洞导致服务器易受RCE攻击](https://mp.weixin.qq.com/s?__biz=MzI2NTg4OTc5Nw==&mid=2247521893&idx=1&sn=867f98595849107577a98fcaf043a177)
|
||||
**作者**:代码卫士
|
||||
**上传时间**:2024-12-25 18:11:51
|
||||
**简介**:速修复
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[绕过Elastic EDR进行横向移动](https://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247526433&idx=1&sn=6ee718605b5d67e3f68417bf664c46f8)
|
||||
**作者**:Ots安全
|
||||
**上传时间**:2024-12-25 18:01:05
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[探索 NASA CryptoLib 的 SDLS 实现中的漏洞](https://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247526433&idx=2&sn=9734352beed4645fcdc599733e607e22)
|
||||
**作者**:Ots安全
|
||||
**上传时间**:2024-12-25 18:01:05
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[利用 WDAC 武器化:粉碎 EDR 的梦想](https://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247526433&idx=3&sn=7fcef7477d3365c9f2905137b1be267e)
|
||||
**作者**:Ots安全
|
||||
**上传时间**:2024-12-25 18:01:05
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[《英雄无敌》4:修改pe导入表注入DLL扩展回城术功能](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458587767&idx=1&sn=dd1c04637890c14cb9d72fb95bbb0010)
|
||||
**作者**:看雪学苑
|
||||
**上传时间**:2024-12-25 17:59:58
|
||||
**简介**:看雪论坛作者ID:fdark
|
||||
|
||||
----------------------------------------
|
||||
#### 文章:[【漏洞文字】博斯外贸管理软件 SQL注入](https://mp.weixin.qq.com/s?__biz=MzkyMTY1NDc2OA==&mid=2247487244&idx=1&sn=5011bd862eae6337a04f9e1673c7a184)
|
||||
**作者**:小羊安全屋
|
||||
**上传时间**:2024-12-25 17:01:56
|
||||
**简介**:None
|
||||
|
||||
----------------------------------------
|
@ -1,18 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import requests
|
||||
import xml.etree.ElementTree as ET
|
||||
import json
|
||||
from requests.exceptions import RequestException
|
||||
from loguru import logger
|
||||
|
||||
|
||||
|
||||
github_headers = {
|
||||
'Authorization': f"token {github_token}"
|
||||
}
|
||||
|
||||
# 抓取本年的
|
||||
year = datetime.datetime.now().year
|
||||
api = "https://api.github.com/search/repositories?q=CVE-{}&sort=updated".format(year)
|
||||
json_str = requests.get(api, headers=github_headers, timeout=10).json()
|
BIN
spider/__pycache__/github.cpython-312.pyc
Normal file
BIN
spider/__pycache__/github.cpython-312.pyc
Normal file
Binary file not shown.
BIN
spider/__pycache__/sougou_wx.cpython-312.pyc
Normal file
BIN
spider/__pycache__/sougou_wx.cpython-312.pyc
Normal file
Binary file not shown.
Binary file not shown.
189
spider/github.py
Normal file
189
spider/github.py
Normal file
@ -0,0 +1,189 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import time
|
||||
import yaml
|
||||
import requests
|
||||
import json
|
||||
import datetime
|
||||
from requests.exceptions import RequestException
|
||||
import xml.etree.ElementTree as ET
|
||||
from loguru import logger
|
||||
|
||||
MAX_DESCRIPTION_LENGTH = 300
|
||||
|
||||
with open('./config/github_config.yaml', 'r', encoding="utf-8") as file:
|
||||
config = yaml.safe_load(file)
|
||||
# list = yaml.load(f,Loader=yaml.FullLoader)
|
||||
token = config['github_token']
|
||||
tool_list, keyword_list, user_list, black_words = config['tool_list'], config['keyword_list'], config['user_list'], config['black_words']
|
||||
|
||||
def fetch_rss(url, timeout=10):
|
||||
if token is None:
|
||||
headers = {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
else:
|
||||
headers = {
|
||||
'Authorization': f"token {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers, timeout=timeout)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.Timeout:
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.error(f"请求 {url} 时发生错误: {e}")
|
||||
|
||||
def save_to_json(data, filename):
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
json.dump(data, f, ensure_ascii=False, indent=4)
|
||||
|
||||
def github_main_keyword(key):
|
||||
all_results = [] # 用于存储所有结果
|
||||
for keyword in key:
|
||||
logger.info(f"github_keyword:关键词【{keyword}】获取开始。")
|
||||
api_node = "https://api.github.com/search/repositories?q={}&sort=updated&per_page=20".format(keyword)
|
||||
result = fetch_rss(api_node)
|
||||
for i in range(0, 20):
|
||||
description = result['items'][i]['description']
|
||||
|
||||
if description is None:
|
||||
pass
|
||||
# 检查描述中是否包含黑名单词汇
|
||||
elif any(word in description for word in black_words):
|
||||
continue # 跳过本次执行
|
||||
# 截断描述并在300字节处添加...
|
||||
elif len(description.encode('utf-8')) > MAX_DESCRIPTION_LENGTH:
|
||||
# 找到300字节处的索引
|
||||
byte_index = 0
|
||||
char_index = 0
|
||||
while byte_index < MAX_DESCRIPTION_LENGTH and char_index < len(description):
|
||||
byte_index += len(description[char_index].encode('utf-8'))
|
||||
char_index += 1
|
||||
description = description[:char_index - 1] + '...'
|
||||
|
||||
link = result['items'][i]['html_url']
|
||||
name = result['items'][i]['name']
|
||||
created_at = result['items'][i]['created_at']
|
||||
author = result['items'][i]['owner']['login']
|
||||
language = result['items'][i]['language']
|
||||
|
||||
# 将每个项目的详细信息存储在一个字典中
|
||||
project_info = {
|
||||
'link': link,
|
||||
'name': name,
|
||||
'created_at': created_at,
|
||||
'description': description,
|
||||
'author': author,
|
||||
'language': language,
|
||||
'keyword': keyword
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(10)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './JSON/github_keyword.json')
|
||||
|
||||
|
||||
def github_main_repo(key):
|
||||
all_results = [] # 用于存储所有结果
|
||||
for keyword in key:
|
||||
logger.info(f"github_repo:项目【{keyword}】更新情况获取开始。")
|
||||
api_node = "https://api.github.com/repos/{}/commits?per_page=1".format(keyword)
|
||||
result = fetch_rss(api_node)
|
||||
|
||||
commit = result[0] # 获取最新的提交记录
|
||||
description = commit['commit']['message']
|
||||
|
||||
if description is None:
|
||||
pass
|
||||
# 截断描述并在300字节处添加...
|
||||
elif len(description.encode('utf-8')) > MAX_DESCRIPTION_LENGTH:
|
||||
byte_index = 0
|
||||
char_index = 0
|
||||
while byte_index < MAX_DESCRIPTION_LENGTH and char_index < len(description):
|
||||
byte_index += len(description[char_index].encode('utf-8'))
|
||||
char_index += 1
|
||||
description = description[:char_index - 1] + '...'
|
||||
|
||||
author = commit['commit']['author']['name']
|
||||
updated_at = commit['commit']['author']['date']
|
||||
link_2 = commit['html_url']
|
||||
|
||||
# 将每个项目的详细信息存储在一个字典中
|
||||
project_info = {
|
||||
'link': f"https://api.github.com/{keyword}",
|
||||
'name': keyword,
|
||||
'updated_at': updated_at,
|
||||
'description': description,
|
||||
'author': author,
|
||||
'link_2': link_2,
|
||||
'keyword': keyword
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(10)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './JSON/github_repo.json')
|
||||
|
||||
def github_main_user(key):
|
||||
all_results = [] # 用于存储所有结果
|
||||
for keyword in key:
|
||||
logger.info(f"github_user:作者【{keyword}】更新情况获取开始。")
|
||||
api_node = "https://api.github.com/users/{}/repos?sort=created&per_page=10".format(keyword)
|
||||
result = fetch_rss(api_node)
|
||||
for i in range(0, len(result)):
|
||||
description = result[i]['description']
|
||||
|
||||
if description is None:
|
||||
pass
|
||||
# 检查描述中是否包含黑名单词汇
|
||||
elif any(word in description for word in black_words):
|
||||
continue # 跳过本次执行
|
||||
# 截断描述并在300字节处添加...
|
||||
elif len(description.encode('utf-8')) > MAX_DESCRIPTION_LENGTH:
|
||||
# 找到300字节处的索引
|
||||
byte_index = 0
|
||||
char_index = 0
|
||||
while byte_index < MAX_DESCRIPTION_LENGTH and char_index < len(description):
|
||||
byte_index += len(description[char_index].encode('utf-8'))
|
||||
char_index += 1
|
||||
description = description[:char_index - 1] + '...'
|
||||
|
||||
link = result[i]['html_url']
|
||||
name = result[i]['name']
|
||||
created_at = result[i]['created_at']
|
||||
author = result[i]['owner']['login']
|
||||
language = result[i]['language']
|
||||
|
||||
# 将每个项目的详细信息存储在一个字典中
|
||||
project_info = {
|
||||
'link': link,
|
||||
'name': name,
|
||||
'created_at': created_at,
|
||||
'description': description,
|
||||
'author': author,
|
||||
'language': language,
|
||||
'keyword': keyword
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(10)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './JSON/github_user.json')
|
||||
|
||||
def github_main():
|
||||
if keyword_list:
|
||||
github_main_keyword(keyword_list)
|
||||
if tool_list:
|
||||
github_main_repo(tool_list)
|
||||
if user_list:
|
||||
github_main_user(user_list)
|
||||
|
||||
if __name__ == "__main__":
|
||||
github_main()
|
@ -27,9 +27,10 @@ def fetch_html(url, headers=headers, timeout=10):
|
||||
response = requests.get(url, headers=headers, timeout=timeout)
|
||||
response.raise_for_status()
|
||||
return response.text
|
||||
except requests.Timeout:
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求出错: {e}")
|
||||
return None
|
||||
logger.error(f"请求 {url} 时发生错误: {e}")
|
||||
|
||||
def parse_html(html_content):
|
||||
soup = BeautifulSoup(html_content, 'html.parser')
|
Loading…
Reference in New Issue
Block a user