Compare commits
No commits in common. "main" and "V1.0" have entirely different histories.
223
Core.py
@ -18,9 +18,7 @@ from spider.common import run, seebug_main, M_4hou_main, anquanke_main, sec_wiki
|
||||
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, load_github_config
|
||||
from spider.baidu import baidu_main
|
||||
from spider.uni import uni_spider
|
||||
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
|
||||
@ -30,15 +28,13 @@ 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 GotoSend.baidu import Src_baidu
|
||||
from GotoSend.uni_rss import Src_uni_rss
|
||||
from config.check_config import get_core_config, get_debug_config, get_keywords_config
|
||||
from config.check_config import get_core_config, get_debug_config, get_kewords_config
|
||||
from loguru import logger
|
||||
|
||||
# 清除所有已有的日志记录器配置
|
||||
logger.remove()
|
||||
|
||||
logger.add("./resources/log/core.log",
|
||||
logger.add("./log/core.log",
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} - {level} - {name}:{function}:{line} - {message}",
|
||||
rotation="100 MB",
|
||||
compression="zip",
|
||||
@ -58,150 +54,92 @@ 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, 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):
|
||||
|
||||
def check_avaliable(info_long, info_short, title, webhook_url, timestamp, sign):
|
||||
if info_long: # 发送完整文章相关内容
|
||||
if fs_activate == "True":
|
||||
# logger.info(f"{title} 递送中(飞书):")
|
||||
webhook_url, timestamp, sign = gen_sign()
|
||||
result = SendToFeishu(info_long, title, webhook_url, timestamp, sign)
|
||||
logger.info(result)
|
||||
time.sleep(15)
|
||||
|
||||
else:
|
||||
pass
|
||||
if info_short: # 发送精简文章相关内容
|
||||
# 企业微信相关
|
||||
if wx_activate == "True":
|
||||
# logger.info(f"{title} 递送中(企业微信):")
|
||||
for info in info_short:
|
||||
result = SendToWX(info, title)
|
||||
result = SendToWX(info_short, title)
|
||||
logger.info(result)
|
||||
time.sleep(15)
|
||||
|
||||
else:
|
||||
pass
|
||||
|
||||
# 钉钉相关
|
||||
if ding_activate == "True":
|
||||
# logger.info(f"{title} 递送中(钉钉):")
|
||||
# for info in info_short: # 开发中,暂未实现
|
||||
# result = SendToDD(info, title)
|
||||
# logger.info(result)
|
||||
# result = SendToWX(info_short, title) # 待完善
|
||||
logger.info(result)
|
||||
time.sleep(15)
|
||||
else:
|
||||
pass
|
||||
if not info_long and not info_short:
|
||||
logger.info(f"{title}数据为空,跳过执行。")
|
||||
|
||||
def send_job_RSS(time_1):
|
||||
Doonsec_switch, Doonsec = get_keywords_config('Doonsec')
|
||||
uni_switch, Unity = get_keywords_config('Unity')
|
||||
|
||||
# Seebug数据获取分发
|
||||
# 爬取数据
|
||||
seebug_main()
|
||||
seebug_results = Src_seebug(time_1)
|
||||
if seebug_results != False:
|
||||
result_seebug_long, result_seebug_short = seebug_results
|
||||
check_avaliable(result_seebug_long, result_seebug_short, "Seebug社区资讯")
|
||||
else:
|
||||
logger.info("Seebug数据为空,跳过执行。")
|
||||
|
||||
# 安全客数据获取分发
|
||||
anquanke_main()
|
||||
anquanke_results = Src_anquanke(time_1)
|
||||
if anquanke_results != False:
|
||||
result_anquanke_long, result_anquanke_short = anquanke_results
|
||||
check_avaliable(result_anquanke_long, result_anquanke_short, "安全客资讯")
|
||||
else:
|
||||
logger.info("安全客数据为空,跳过执行。")
|
||||
|
||||
# 华为数据获取分发
|
||||
huawei_main()
|
||||
|
||||
# 奇安信数据获取分发
|
||||
qianxin_main()
|
||||
qianxin_results = Src_qianxin(time_1)
|
||||
if qianxin_results != False:
|
||||
result_qianxin_long, result_qianxin_short = qianxin_results
|
||||
check_avaliable(result_qianxin_long, result_qianxin_short, "奇安信攻防社区资讯")
|
||||
else:
|
||||
logger.info("奇安信数据为空,跳过执行。")
|
||||
|
||||
# FreeBuf数据获取分发
|
||||
freebuf_main()
|
||||
freebuf_results = Src_freebuf(time_1)
|
||||
if freebuf_results != False:
|
||||
result_freebuf_long, result_freebuf_short = freebuf_results
|
||||
check_avaliable(result_freebuf_long, result_freebuf_short, "FreeBuf资讯")
|
||||
else:
|
||||
logger.info("FreeBuf数据为空,跳过执行。")
|
||||
|
||||
# 先知数据获取分发
|
||||
xianzhi_main()
|
||||
xianzhi_results = Src_xianzhi(time_1)
|
||||
if xianzhi_results != False:
|
||||
result_xianzhi_long, result_xianzhi_short = xianzhi_results
|
||||
check_avaliable(result_xianzhi_long, result_xianzhi_short, "先知社区资讯")
|
||||
else:
|
||||
logger.info("先知数据为空,跳过执行。")
|
||||
|
||||
# 4hou数据获取分发
|
||||
M_4hou_main()
|
||||
M_4hou_results = Src_4hou(time_1)
|
||||
if M_4hou_results != False:
|
||||
result_4hou_long, result_4hou_short = M_4hou_results
|
||||
check_avaliable(result_4hou_long, result_4hou_short, "嘶吼资讯")
|
||||
else:
|
||||
logger.info("嘶吼数据为空,跳过执行。")
|
||||
|
||||
# 洞见微信安全数据获取分发
|
||||
doonsec_main()
|
||||
doonsec_results = Src_doonsec(Doonsec_switch, Doonsec)
|
||||
if doonsec_results != False:
|
||||
result_doonsec_long, result_doonsec_short = doonsec_results
|
||||
check_avaliable(result_doonsec_long, result_doonsec_short, "洞见微信安全资讯")
|
||||
else:
|
||||
logger.info("洞见微信安全数据为空,跳过执行。")
|
||||
qianxin_main()
|
||||
freebuf_main()
|
||||
xianzhi_main()
|
||||
M_4hou_main()
|
||||
|
||||
# 聚合RSS数据获取分发
|
||||
uni_spider()
|
||||
rss_results = Src_uni_rss(uni_switch, Unity)
|
||||
if rss_results != False:
|
||||
result_rss_long, result_rss_short = rss_results
|
||||
check_avaliable(result_rss_long, result_rss_short, "聚合RSS资讯")
|
||||
else:
|
||||
logger.info("聚合RSS数据为空,跳过执行。")
|
||||
# 分析各个数据源的结果(输出长结果)
|
||||
result_4hou_long = Src_4hou(time_1, False)
|
||||
result_anquanke_long = Src_anquanke(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)
|
||||
result_seebug_long = Src_seebug(time_1, False)
|
||||
# 分析各个数据源的结果(输出短结果)
|
||||
result_4hou_short = Src_4hou(time_1, True)
|
||||
result_anquanke_short = Src_anquanke(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)
|
||||
result_seebug_short = Src_seebug(time_1, True)
|
||||
|
||||
webhook_url, timestamp, sign = gen_sign()
|
||||
|
||||
check_avaliable(result_4hou_long, result_4hou_short, "嘶吼资讯", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_anquanke_long, result_anquanke_short, "安全客资讯", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_doonsec_long, result_doonsec_short, "洞见微信安全资讯", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_xianzhi_long, result_xianzhi_short, "先知社区资讯", webhook_url, timestamp, sign)
|
||||
check_avaliable(result_freebuf_long, result_freebuf_short, "FreeBuf资讯", webhook_url, timestamp, sign)
|
||||
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)
|
||||
|
||||
def send_job_SX():
|
||||
Sogou_WX = get_keywords_config('Sogou-WX')
|
||||
sougou_wx_main(Sogou_WX)
|
||||
results = Src_sougou_wx()
|
||||
if results != False:
|
||||
result_sx_long, result_sx_short = results
|
||||
check_avaliable(result_sx_long, result_sx_short, "微信公众号关键词相关内容")
|
||||
else:
|
||||
logger.info("微信公众号数据为空,跳过执行。")
|
||||
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):
|
||||
keyword_list, tool_list, user_list, black_words = load_github_config()
|
||||
github_main(keyword_list, tool_list, user_list, black_words)
|
||||
results = Src_github(time_1)
|
||||
|
||||
# 解构返回的结果
|
||||
result_github_1_long, result_github_1_short = results[0]
|
||||
result_github_2_long, result_github_2_short = results[1]
|
||||
result_github_3_long, result_github_3_short = results[2]
|
||||
result_github_4_long, result_github_4_short = results[3]
|
||||
|
||||
# 检查并处理结果
|
||||
check_avaliable(result_github_1_long, result_github_1_short, "Github项目监控-关键词监控")
|
||||
check_avaliable(result_github_2_long, result_github_2_short, "Github项目监控-项目更新情况")
|
||||
check_avaliable(result_github_3_long, result_github_3_short, "Github项目监控-大佬工具")
|
||||
check_avaliable(result_github_4_long, result_github_4_short, "Github项目监控-项目版本发布监测")
|
||||
|
||||
def send_job_baidu():
|
||||
Baidu = get_keywords_config('Baidu')
|
||||
baidu_main(Baidu)
|
||||
results = Src_baidu()
|
||||
if results != False:
|
||||
result_baidu_long, result_baidu_short = results
|
||||
check_avaliable(result_baidu_long, result_baidu_short, "百度搜索关键词相关内容")
|
||||
else:
|
||||
logger.info("百度搜索数据为空,跳过执行。")
|
||||
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):
|
||||
@ -247,9 +185,6 @@ def main_job(e_hour):
|
||||
send_job_SX()
|
||||
if 2 in choice:
|
||||
send_job_github(e_hour)
|
||||
if 3 in choice:
|
||||
send_job_baidu()
|
||||
logger.info("单次运行结束,等待下一次运行...")
|
||||
|
||||
def main_loop(time_choice):
|
||||
if time_choice == 1:
|
||||
@ -278,6 +213,7 @@ def main_loop(time_choice):
|
||||
time.sleep(60) # 每分钟检查一次是否有任务需要执行
|
||||
|
||||
def send_first_message():
|
||||
rss_info = test_rss_source()
|
||||
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"
|
||||
@ -285,52 +221,25 @@ def send_first_message():
|
||||
start_info += "时间配置:每隔" + str(e_hour) + "小时执行一次推送\n"
|
||||
elif time_choice == 0:
|
||||
start_info += "时间配置:每天固定时间点执行推送\n"
|
||||
start_info += "开启状态:\n"
|
||||
|
||||
if 0 in choice:
|
||||
start_info += "RSS源监测\n"
|
||||
if 1 in choice:
|
||||
# start_info += "搜狗-微信公众号监测\n"
|
||||
Sogou_WX = get_keywords_config('Sogou-WX')
|
||||
start_info += f"微信公众号监测关键词:{Sogou_WX}\n"
|
||||
if 2 in choice:
|
||||
# start_info += "Github项目监测\n"
|
||||
with open('./config/github_config.yaml', 'r', encoding="utf-8") as file:
|
||||
config = yaml.safe_load(file)
|
||||
tool_list = config['tool_list']
|
||||
start_info += f"Github监控项目:{tool_list}\n"
|
||||
keyword_list = config['keyword_list']
|
||||
start_info += f"Github监控关键词:{keyword_list}\n"
|
||||
user_list = config['user_list']
|
||||
start_info += f"Github监控用户:{user_list}\n"
|
||||
if 3 in choice:
|
||||
# start_info += "百度搜索关键词内容监测\n"
|
||||
Baidu = get_keywords_config('Baidu')
|
||||
start_info += f"百度搜索关键词:{Baidu}\n"
|
||||
|
||||
if fs_activate == "True":
|
||||
result = SendToFeishu(start_info, "程序信息", webhook_url_once, timestamp_once, sign_once)
|
||||
logger.info(result)
|
||||
send_result = SendToFeishu(f"[点此访问]({url_web})网站以查看全部文章。", "首次运行提醒", webhook_url_once, timestamp_once, sign_once)
|
||||
logger.info(send_result)
|
||||
if wx_activate == "True":
|
||||
result = SendToWX(start_info, "程序信息")
|
||||
logger.info(result)
|
||||
send_result = SendToWX(f"[点此访问]({url_web})网站以查看全部文章,若未开启网站请忽略本条消息。", "首次运行提醒")
|
||||
logger.info(send_result)
|
||||
|
||||
if 0 in choice:
|
||||
rss_info = test_rss_source()
|
||||
if fs_activate == "True":
|
||||
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":
|
||||
result = SendToWX(start_info, "程序信息")
|
||||
logger.info(result)
|
||||
result = SendToWX(rss_info, "RSS源状态")
|
||||
# logger.info(rss_info)
|
||||
logger.info(result)
|
||||
send_result = SendToWX(f"[点此访问]({url_web})网站以查看全部文章。", "首次运行提醒")
|
||||
logger.info(send_result)
|
||||
else:
|
||||
pass
|
||||
|
||||
|
142
Dev_test.py
@ -14,12 +14,11 @@ import requests
|
||||
from datetime import datetime, timedelta
|
||||
from SendCore.FeishuSendBot import SendToFeishu, gen_sign
|
||||
from SendCore.QiweiSendBot import SendToWX
|
||||
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, load_github_config
|
||||
from spider.baidu import baidu_main
|
||||
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
|
||||
@ -28,123 +27,28 @@ 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 GotoSend.baidu import Src_baidu
|
||||
from config.check_config import get_core_config, get_debug_config, get_keywords_config
|
||||
# from GotoSend.github import Src_github
|
||||
from config.check_config import get_core_config, get_debug_config, get_kewords_config
|
||||
from loguru import logger
|
||||
|
||||
# 清除所有已有的日志记录器配置
|
||||
logger.remove()
|
||||
# # 全局变量
|
||||
# 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()
|
||||
|
||||
logger.add("./resources/log/core.log",
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} - {level} - {name}:{function}:{line} - {message}",
|
||||
rotation="100 MB",
|
||||
compression="zip",
|
||||
encoding="utf-8")
|
||||
# shell终端打印日志
|
||||
debug = get_debug_config()
|
||||
if debug == "True":
|
||||
logger.add(lambda msg: print(msg),
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} - {level} - {name}:{function}:{line} - {message}")
|
||||
# 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)
|
||||
|
||||
def signal_handler(sig, frame):
|
||||
logger.info("接收到退出信号,程序即将退出...")
|
||||
sys.exit(0)
|
||||
|
||||
# 全局变量
|
||||
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, time_choice, choice, fs_activate, wx_activate, ding_activate, lx_activate, url_web = get_core_config()
|
||||
github_main()
|
||||
|
||||
|
||||
def check_avaliable(info_long, info_short, title):
|
||||
if info_short: # 发送精简文章相关内容
|
||||
# 企业微信相关
|
||||
if wx_activate == "True":
|
||||
# logger.info(f"{title} 递送中(企业微信):")
|
||||
print("正在发送精简文章内容...")
|
||||
for info in info_short:
|
||||
result = SendToWX(info, title)
|
||||
print(result)
|
||||
logger.info(result)
|
||||
time.sleep(15)
|
||||
else:
|
||||
print("精简文章内容为空,跳过执行。")
|
||||
pass
|
||||
# # 测试用消息体
|
||||
# test_msg = {
|
||||
# "请单件文档查看昨天讨论的方案相关飞书文档,注意作者为 <font color=red> **张三** <font> 版本为 \n*002* ,版本 ~~001~~ 已经删除。文件地址是 [https://www.feishu.cn](https://www.feishu.cn),打开次数:1次"
|
||||
# }
|
||||
|
||||
if info_long: # 发送完整文章相关内容
|
||||
if fs_activate == "True":
|
||||
# logger.info(f"{title} 递送中(飞书):")
|
||||
webhook_url, timestamp, sign = gen_sign()
|
||||
result = SendToFeishu(info_long, title, webhook_url, timestamp, sign)
|
||||
logger.info(result)
|
||||
time.sleep(15)
|
||||
else:
|
||||
pass
|
||||
|
||||
if not info_long and not info_short:
|
||||
logger.info(f"{title}数据为空,跳过执行。")
|
||||
|
||||
def send_job_RSS(time_1):
|
||||
Doonsec_switch, Doonsec = get_keywords_config('Doonsec')
|
||||
results = Src_doonsec(Doonsec_switch, Doonsec)
|
||||
if results != False:
|
||||
result_doonsec_long, result_doonsec_short = results
|
||||
check_avaliable(result_doonsec_long, result_doonsec_short, "洞见微信安全资讯")
|
||||
|
||||
|
||||
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)
|
||||
logger.info("单次运行结束,等待下一次运行...")
|
||||
|
||||
def main_loop(time_choice):
|
||||
if time_choice == 1:
|
||||
while True:
|
||||
try:
|
||||
# 执行任务
|
||||
main_job(e_hour)
|
||||
time.sleep(e_hour * 60 * 60 - 3 * 60)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"发生错误: {e}, 程序已暂停")
|
||||
# result = SendToFeishu(f"发生错误: {e}, 程序已退出", "报错信息")
|
||||
exit()
|
||||
|
||||
elif time_choice == 0:
|
||||
# 设置每天的特定时间点执行job函数
|
||||
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()
|
||||
time.sleep(60) # 每分钟检查一次是否有任务需要执行
|
||||
|
||||
if __name__ == "__main__":
|
||||
logger.info("程序正在运行当中。")
|
||||
|
||||
results = Src_anquanke(4)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
print("安全客数据为空,跳过执行。")
|
||||
# main_loop(time_choice)
|
||||
# SendToFeishu(test_msg, "先知社区资讯递送", webhook_url, timestamp, sign)
|
||||
|
@ -6,7 +6,7 @@ import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/4hou.db')
|
||||
conn = sqlite3.connect('./db/4hou.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -20,7 +20,7 @@ def create_database():
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/4hou.db')
|
||||
conn = sqlite3.connect('./db/4hou.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
try:
|
||||
@ -41,16 +41,12 @@ def insert_data(data):
|
||||
|
||||
def get_4hou_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/4hou.json'):
|
||||
if not os.path.exists('./JSON/4hou.json'):
|
||||
raise FileNotFoundError(f"4hou.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/4hou.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/4hou.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -72,7 +68,7 @@ def get_4hou_json():
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/4hou.db')
|
||||
conn = sqlite3.connect('./db/4hou.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -91,13 +87,13 @@ def select_articles(e_hour):
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/4hou.db')
|
||||
conn = sqlite3.connect('./db/4hou.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
def record_md(result, filename="./history/sec_news.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -111,46 +107,29 @@ def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
# 写回文件
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n作者:{entry[5]}\n"
|
||||
result_long += f"上传时间:{entry[4]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"链接:{entry[2]}\n上传时间:{entry[4]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n作者:{entry[5]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"链接:{entry[2]}\n上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**作者**:{entry[5]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_4hou(e_hour):
|
||||
if not os.path.exists('./resources/db/4hou.db'):
|
||||
def Src_4hou(e_hour, Is_short):
|
||||
if not os.path.exists('./db/4hou.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -168,27 +147,17 @@ def Src_4hou(e_hour):
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
return ""
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_4hou(4)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_4hou(4, False)
|
||||
if reslts != "":
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
print("嘶吼数据为空,跳过执行。")
|
||||
|
||||
|
@ -7,7 +7,7 @@ from datetime import datetime, timedelta
|
||||
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/anquanke.db')
|
||||
conn = sqlite3.connect('./db/anquanke.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -22,7 +22,7 @@ def create_database():
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/anquanke.db')
|
||||
conn = sqlite3.connect('./db/anquanke.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
cursor.execute('''
|
||||
@ -34,18 +34,12 @@ def insert_data(data):
|
||||
|
||||
def get_anquanke_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/anquanke.json'):
|
||||
data = []
|
||||
# logger.error(f"anquanke.json文件不存在,请检查爬虫程序是否运行正常!")
|
||||
print(f"anquanke.json文件不存在,请检查爬虫程序是否运行正常!")
|
||||
else:
|
||||
if not os.path.exists('./JSON/anquanke.json'):
|
||||
raise FileNotFoundError(f"anquanke.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/anquanke.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/anquanke.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -68,7 +62,7 @@ def get_anquanke_json():
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/anquanke.db')
|
||||
conn = sqlite3.connect('./db/anquanke.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -87,13 +81,13 @@ def select_articles(e_hour):
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/anquanke.db')
|
||||
conn = sqlite3.connect('./db/anquanke.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
def record_md(result, filename="./history/sec_news.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -108,47 +102,30 @@ def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n作者:{entry[6]}\n来源:{entry[3]}\n"
|
||||
result_long += f"上传时间:{entry[5]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[5]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n作者:{entry[6]}\n来源:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif Is_short == True:
|
||||
result += f"文章:{entry[1]}\n"
|
||||
result += f"链接:{entry[2]}\n上传时间:{entry[5]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**作者**:{entry[6]}\n"
|
||||
record += f"**来源**:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[5]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_anquanke(e_hour):
|
||||
if not os.path.exists('./resources/db/anquanke.db'):
|
||||
def Src_anquanke(e_hour, Is_short):
|
||||
if not os.path.exists('./db/anquanke.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -166,26 +143,15 @@ def Src_anquanke(e_hour):
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_anquanke(4)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_anquanke(4, False)
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
@ -1,229 +0,0 @@
|
||||
import os
|
||||
import json
|
||||
import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/baidu.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/baidu.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT,
|
||||
link TEXT,
|
||||
description TEXT,
|
||||
pubDate DATETIME,
|
||||
author TEXT,
|
||||
keyword TEXT,
|
||||
is_sended BOOLEAN
|
||||
)''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/baidu.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
# 检查是否存在相同 title 的记录
|
||||
cursor.execute('''
|
||||
SELECT 1 FROM articles WHERE title = ? AND author = ?
|
||||
''', (entry['title'], entry['author']))
|
||||
|
||||
if cursor.fetchone() is None:
|
||||
# 如果没有找到相同记录,则插入新记录
|
||||
cursor.execute('''
|
||||
INSERT INTO articles (title, link, description, pubDate, author, keyword)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
''', (entry['title'], entry['link'], entry['description'], entry['pubDate'], entry['author'], entry['keyword']))
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/baidu.json'):
|
||||
data = []
|
||||
# logger.error("baidu.json文件不存在,请检查程序是否运行正常!")
|
||||
else:
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/baidu.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
|
||||
# 假设data是一个包含多个关键词的字典
|
||||
total_data = []
|
||||
for keyword, keyword_data in data.items():
|
||||
# 检查关键词对应的数据是否为列表
|
||||
if not isinstance(keyword_data, list):
|
||||
raise ValueError(f"关键词 {keyword} 对应的数据格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
# 提取所需字段并编号
|
||||
for index, item in enumerate(keyword_data, start=1):
|
||||
entry = {
|
||||
"id": index,
|
||||
"title": item.get("title", ""),
|
||||
"link": item.get("link", ""),
|
||||
"description": item.get("description", ""),
|
||||
"pubDate": item.get("pubDate", ""),
|
||||
"author": item.get("author", ""),
|
||||
"keyword": keyword
|
||||
}
|
||||
total_data.append(entry)
|
||||
|
||||
return total_data
|
||||
|
||||
def select_articles():
|
||||
conn = sqlite3.connect('./resources/db/baidu.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
now = datetime.now()
|
||||
two_months_ago = now - timedelta(days=60) # 假设两个月大约60天
|
||||
|
||||
try:
|
||||
# 查询最近且未被标记为True的消息且发布时间不超过两个月
|
||||
cursor.execute('''
|
||||
SELECT * FROM articles
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
ORDER BY pubDate DESC
|
||||
''', (two_months_ago.strftime('%Y-%m-%d'), now.strftime('%Y-%m-%d')))
|
||||
|
||||
# 查询最近且未被标记为True的消息
|
||||
# cursor.execute('''
|
||||
# SELECT * FROM articles
|
||||
# WHERE is_sended IS NULL
|
||||
# ORDER BY pubDate DESC
|
||||
# ''')
|
||||
|
||||
results = cursor.fetchall()
|
||||
# print(results)
|
||||
|
||||
if results:
|
||||
for row in results:
|
||||
article_id = row[0]
|
||||
cursor.execute('''
|
||||
UPDATE articles
|
||||
SET is_sended = True
|
||||
WHERE id = ?
|
||||
''', (article_id,))
|
||||
|
||||
conn.commit() # 提交事务
|
||||
|
||||
except Exception as e:
|
||||
conn.rollback() # 回滚事务
|
||||
print(f"Error: {e}")
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return results
|
||||
|
||||
def record_md(result, filename="./resources/history/baidu_news.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):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n描述:{entry[3]}\n"
|
||||
result_long += f"发布时间:{entry[4]}\n"
|
||||
result_long += f"来源:{entry[5]}\n"
|
||||
result_long += f"关键词:{entry[6]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"关键词:{entry[6]}\n"
|
||||
f"上传时间:{entry[4]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n描述:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += f"**来源**:{entry[5]}\n"
|
||||
record += f"**关键词**:{entry[6]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_baidu():
|
||||
if not os.path.exists('./resources/db/baidu.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
# 清空表
|
||||
# clear_table()
|
||||
|
||||
# 获取 JSON 数据
|
||||
baidu_data = get_json()
|
||||
|
||||
# 插入数据到数据库
|
||||
insert_data(baidu_data)
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
filtered_articles = select_articles()
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_baidu()
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
print("百度数据为空,跳过执行。")
|
@ -7,7 +7,7 @@ from datetime import datetime, timedelta
|
||||
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/doonsec.db')
|
||||
conn = sqlite3.connect('./db/doonsec.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -15,14 +15,13 @@ def create_database():
|
||||
link TEXT,
|
||||
description TEXT,
|
||||
pubDate DATETIME,
|
||||
author TEXT,
|
||||
is_sended BOOLEAN
|
||||
author TEXT
|
||||
)''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/doonsec.db')
|
||||
conn = sqlite3.connect('./db/doonsec.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
try:
|
||||
@ -34,11 +33,6 @@ def insert_data(data):
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
formatted_pub_date = entry['pubDate']
|
||||
|
||||
cursor.execute('''
|
||||
SELECT 1 FROM articles WHERE title = ? AND author = ?
|
||||
''', (entry['title'], entry['author']))
|
||||
|
||||
if cursor.fetchone() is None:
|
||||
cursor.execute('''
|
||||
INSERT INTO articles (title, link, description, pubDate, author)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
@ -48,17 +42,12 @@ def insert_data(data):
|
||||
|
||||
def get_doonsec_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/doonsec.json'):
|
||||
if not os.path.exists('./JSON/doonsec.json'):
|
||||
raise FileNotFoundError(f"doonsec.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/doonsec.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
# print(content)
|
||||
data = json.loads(content)
|
||||
with open('./JSON/doonsec.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -79,65 +68,50 @@ def get_doonsec_json():
|
||||
|
||||
return total_data
|
||||
|
||||
def select_articles(Doonsec_switch, Doonsec):
|
||||
conn = sqlite3.connect('./resources/db/doonsec.db')
|
||||
def select_articles(e_hour, Doonsec_switch, Doonsec):
|
||||
conn = sqlite3.connect('./db/doonsec.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
now = datetime.now()
|
||||
two_days_ago = now - timedelta(days=2)
|
||||
start_time = now - timedelta(hours=e_hour, minutes=3)
|
||||
end_time = now
|
||||
|
||||
if Doonsec_switch == False:
|
||||
# 查询指定时间段内的数据
|
||||
cursor.execute('''
|
||||
SELECT * FROM articles
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
ORDER BY pubDate DESC
|
||||
''', (two_days_ago.strftime('%Y-%m-%d %H:%M:%S'), now.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
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包含特定关键词的数据
|
||||
like_conditions = ' OR '.join([f"title LIKE ?"] * len(Doonsec))
|
||||
|
||||
# 完整的查询语句
|
||||
placeholders = ', '.join(['?'] * len(Doonsec))
|
||||
query = f'''
|
||||
SELECT * FROM articles
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
AND ({like_conditions})
|
||||
ORDER BY pubDate DESC
|
||||
WHERE pubDate BETWEEN ? AND ?
|
||||
AND (title LIKE ? OR title LIKE ? OR title LIKE ?)
|
||||
'''
|
||||
|
||||
# 构建参数列表
|
||||
params = [
|
||||
two_days_ago.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
now.strftime('%Y-%m-%d %H:%M:%S')
|
||||
] + [f'%{keyword}%' for keyword in Doonsec]
|
||||
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()
|
||||
if results:
|
||||
for row in results:
|
||||
user_id = row[0]
|
||||
cursor.execute('''
|
||||
UPDATE articles
|
||||
SET is_sended = True
|
||||
WHERE id = ?
|
||||
''', (user_id,))
|
||||
|
||||
conn.commit() # 提交事务
|
||||
|
||||
conn.close()
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/doonsec.db')
|
||||
conn = sqlite3.connect('./db/doonsec.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/tech_passage.md"):
|
||||
def record_md(result, filename="./history/tech_passage.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -152,87 +126,58 @@ def record_md(result, filename="./resources/history/tech_passage.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result_long += f"作者:{entry[5]}\n"
|
||||
result_long += f"上传时间:{entry[4]}\n"
|
||||
result_long += f"简介:{entry[3]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[4]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"作者:{entry[5]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += f"简介:{entry[3]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**作者**:{entry[5]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += f"**简介**:{entry[3]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
|
||||
return result_long, short_results
|
||||
return result
|
||||
|
||||
|
||||
def Src_doonsec(Doonsec_switch, Doonsec):
|
||||
if not os.path.exists('./resources/db/doonsec.db'):
|
||||
def Src_doonsec(e_hour, Is_short, Doonsec_switch, Doonsec):
|
||||
if not os.path.exists('./db/doonsec.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
# 清空表
|
||||
# clear_table()
|
||||
clear_table()
|
||||
|
||||
# 获取 JSON 数据
|
||||
doonsec_data = get_doonsec_json()
|
||||
M_doonsec_data = get_doonsec_json()
|
||||
|
||||
# 插入数据到数据库
|
||||
insert_data(doonsec_data)
|
||||
insert_data(M_doonsec_data)
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
filtered_articles = select_articles(Doonsec_switch, Doonsec)
|
||||
filtered_articles = select_articles(e_hour, Doonsec_switch, Doonsec)
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_doonsec(False, ["webshell", "2000", "POC", "SQL", "XSS", "CSRF", "漏洞"])
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 写入长文本结果
|
||||
with open("./1.txt", "a", encoding="utf-8") as f:
|
||||
f.write(result_long)
|
||||
f.write("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 写入分块的短文本结果
|
||||
for short_result in short_results:
|
||||
with open("./2.txt", "a", encoding="utf-8") as f:
|
||||
f.write(short_result)
|
||||
f.write("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_doonsec(24, False, True, ["webshell", "2000", "POC"] )
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
@ -6,7 +6,7 @@ import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/freebuf.db')
|
||||
conn = sqlite3.connect('./db/freebuf.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -20,7 +20,7 @@ def create_database():
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/freebuf.db')
|
||||
conn = sqlite3.connect('./db/freebuf.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
try:
|
||||
@ -41,16 +41,12 @@ def insert_data(data):
|
||||
|
||||
def get_freebuf_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/freebuf.json'):
|
||||
if not os.path.exists('./JSON/freebuf.json'):
|
||||
raise FileNotFoundError(f"freebuf.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/freebuf.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/freebuf.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -72,7 +68,7 @@ def get_freebuf_json():
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/freebuf.db')
|
||||
conn = sqlite3.connect('./db/freebuf.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -91,13 +87,13 @@ def select_articles(e_hour):
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/freebuf.db')
|
||||
conn = sqlite3.connect('./db/freebuf.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
def record_md(result, filename="./history/sec_news.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -112,46 +108,29 @@ def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n类型:{entry[5]}\n"
|
||||
result_long += f"上传时间:{entry[4]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[4]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n类型:{entry[5]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
elif Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**类型**:{entry[5]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_freebuf(e_hour):
|
||||
if not os.path.exists('./resources/db/freebuf.db'):
|
||||
def Src_freebuf(e_hour, Is_short):
|
||||
if not os.path.exists('./db/freebuf.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -169,26 +148,15 @@ def Src_freebuf(e_hour):
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_freebuf(24)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_freebuf(4, False)
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
@ -6,7 +6,7 @@ import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/github.db')
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.executescript('''
|
||||
@ -31,13 +31,6 @@ def create_database():
|
||||
keyword TEXT,
|
||||
link2 TEXT
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS releases (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
link TEXT,
|
||||
pubDate DATETIME,
|
||||
author TEXT,
|
||||
keyword TEXT
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT,
|
||||
@ -59,51 +52,28 @@ def insert_data():
|
||||
# 检查文件是否存在
|
||||
# 打开并读取JSON文件
|
||||
# 假设data是一个包含多个JSON对象的列表,然后校验JSON格式是否异常
|
||||
if not os.path.exists('./resources/JSON/github_keyword.json'):
|
||||
if not os.path.exists('./JSON/github_keyword.json'):
|
||||
raise FileNotFoundError(f"github_keyword文件不存在,请检查程序是否运行正常!")
|
||||
with open('./resources/JSON/github_keyword.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data_keyword = json.loads(content)
|
||||
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('./resources/JSON/github_repo.json'):
|
||||
if not os.path.exists('./JSON/github_repo.json'):
|
||||
raise FileNotFoundError(f"github_repo文件不存在,请检查程序是否运行正常!")
|
||||
with open('./resources/JSON/github_repo.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data_repo = json.loads(content)
|
||||
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('./resources/JSON/github_release.json'):
|
||||
raise FileNotFoundError(f"github_release文件不存在,请检查程序是否运行正常!")
|
||||
with open('./resources/JSON/github_release.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data_release = json.loads(content)
|
||||
if not isinstance(data_release, list):
|
||||
raise ValueError("JSON文件格式错误,请检查爬取程序是否异常!")
|
||||
|
||||
if not os.path.exists('./resources/JSON/github_user.json'):
|
||||
if not os.path.exists('./JSON/github_user.json'):
|
||||
raise FileNotFoundError(f"github_user文件不存在,请检查程序是否运行正常!")
|
||||
with open('./resources/JSON/github_user.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data_user = json.loads(content)
|
||||
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('./resources/db/github.db')
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 提取所需字段并编号
|
||||
@ -119,8 +89,9 @@ def insert_data():
|
||||
"language": item.get("language", "")
|
||||
}
|
||||
try:
|
||||
# 解析 pubDate 字符串为 datetime 对象
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
pub_date += timedelta(hours=8)
|
||||
# 格式化 pubDate 为所需的格式
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
@ -143,7 +114,7 @@ def insert_data():
|
||||
entry = {
|
||||
"id": index,
|
||||
"title": item.get("name", ""),
|
||||
"link": f"https://github.com/{item.get('keyword', '')}",
|
||||
"link": item.get("link", ""),
|
||||
"description": item.get("description", ""),
|
||||
"pubDate": item.get("updated_at", ""),
|
||||
"author": item.get("author", ""),
|
||||
@ -151,8 +122,9 @@ def insert_data():
|
||||
"link2": item.get("link_2", "")
|
||||
}
|
||||
try:
|
||||
# 解析 pubDate 字符串为 datetime 对象
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
pub_date += timedelta(hours=8)
|
||||
# 格式化 pubDate 为所需的格式
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
@ -163,27 +135,6 @@ def insert_data():
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (entry['title'], entry['link'], entry['description'], formatted_pub_date, entry['author'], entry['link2'], entry['keyword']))
|
||||
|
||||
for index, item in enumerate(data_release, start=1):
|
||||
entry = {
|
||||
"id": index,
|
||||
"link": item.get("link", ""),
|
||||
"pubDate": item.get("published_at", ""),
|
||||
"author": item.get("author", ""),
|
||||
"keyword": item.get("keyword", "")
|
||||
}
|
||||
try:
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
pub_date += timedelta(hours=8)
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
formatted_pub_date = entry['pubDate']
|
||||
|
||||
cursor.execute('''
|
||||
INSERT INTO releases (link, pubDate, author, keyword)
|
||||
VALUES (?, ?, ?, ?)
|
||||
''', (entry['link'], formatted_pub_date, entry['author'], entry['keyword']))
|
||||
|
||||
|
||||
# 插入 users 数据
|
||||
for index, item in enumerate(data_user, start=1):
|
||||
@ -198,8 +149,9 @@ def insert_data():
|
||||
"language": item.get("language", "")
|
||||
}
|
||||
try:
|
||||
# 解析 pubDate 字符串为 datetime 对象
|
||||
pub_date = datetime.strptime(entry['pubDate'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
pub_date += timedelta(hours=8)
|
||||
# 格式化 pubDate 为所需的格式
|
||||
formatted_pub_date = pub_date.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,使用原始 pubDate 字符串
|
||||
@ -221,7 +173,7 @@ def insert_data():
|
||||
conn.close()
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/github.db')
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -264,6 +216,14 @@ def select_articles(e_hour):
|
||||
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)
|
||||
|
||||
@ -278,27 +238,19 @@ def select_articles(e_hour):
|
||||
|
||||
conn.commit() # 提交事务
|
||||
|
||||
cursor.execute('''
|
||||
SELECT * FROM releases
|
||||
WHERE pubDate BETWEEN ? AND ?
|
||||
''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), now.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
|
||||
result_4 = cursor.fetchall()
|
||||
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return result_1, result_2, result_3, result_4
|
||||
return result_1, result_2, result_3
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/github.db')
|
||||
conn = sqlite3.connect('./db/github.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM repos')
|
||||
cursor.execute('DELETE FROM releases')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/github.md"):
|
||||
def record_md(result, filename="./history/github.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -313,108 +265,70 @@ def record_md(result, filename="./resources/history/github.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries, choice):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short, choice):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
if Is_short == False:
|
||||
if choice == 1:
|
||||
# 构建长文本结果
|
||||
result_long += f"关键词【{entry[6]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
result_long += f"项目描述:{entry[3]}\n"
|
||||
result_long += f"上传时间:{entry[4]}\n"
|
||||
result_long += f"开发语言:{entry[7]}\t\t作者:{entry[5]}\n"
|
||||
result_long += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"关键词【{entry[6]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[4]}\n"
|
||||
f"开发语言:{entry[7]}\t\t作者:{entry[5]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
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_long += f"项目:[{entry[1]}]({entry[2]})存在更新!!!\n"
|
||||
result_long += f"更新描述:{entry[3]}\n"
|
||||
result_long += f"更新时间:{entry[4]}\n"
|
||||
result_long += f"提交者:{entry[5]},[点此查看提交详情]({entry[7]})\n"
|
||||
result_long += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"项目:[{entry[1]}]({entry[2]})存在更新!!!\n"
|
||||
f"更新时间:{entry[4]}\n"
|
||||
f"提交者:{entry[5]},[点此查看提交详情]({entry[7]})\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
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_long += f"大佬 {entry[5]} 上传了一个新工具:[{entry[1]}]({entry[2]})\n"
|
||||
result_long += f"项目描述:{entry[3]}\n"
|
||||
result_long += f"上传时间:{entry[4]}\n"
|
||||
result_long += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"大佬 {entry[5]} 上传了一个新工具:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[4]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
elif choice == 4:
|
||||
# 构建长文本结果
|
||||
result_long += f"【{entry[3]}】为[{entry[4]}]({entry[1]})发布了新版本,请及时查收!\n"
|
||||
result_long += f"发布时间:{entry[2]}\n"
|
||||
result_long += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"【{entry[3]}】为[{entry[4]}]({entry[1]})发布了新版本,请及时查收!\n"
|
||||
f"发布时间:{entry[2]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
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[6]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"#### 关键词【{entry[7]}】发现新项目:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**项目描述**:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += f"**开发语言**:{entry[7]}\n**作者**:{entry[5]}\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[7]})\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" # 添加分隔线以便区分不同文章
|
||||
elif choice == 4:
|
||||
record += f"#### 【{entry[3]}】为[{entry[4]}]({entry[1]})发布了新版本,请及时查收!\n"
|
||||
record += f"**发布时间**:{entry[2]}\n"
|
||||
record += "\n" + "-" * 10 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_github(e_hour):
|
||||
if not os.path.exists('./resources/db/github.db'):
|
||||
def Src_github(e_hour, Is_short):
|
||||
if not os.path.exists('./db/github.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -425,50 +339,31 @@ def Src_github(e_hour):
|
||||
insert_data()
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
keyword_data, repo_data, user_data, release_data = select_articles(e_hour)
|
||||
keyword_data, repo_data, user_data = select_articles(e_hour)
|
||||
|
||||
results = []
|
||||
if keyword_data:
|
||||
result_long_1, short_results_1 = get_filtered_articles(keyword_data, 1)
|
||||
results.append((result_long_1, short_results_1))
|
||||
result_1 = get_filtered_articles(keyword_data, Is_short, 1)
|
||||
else:
|
||||
results.append(("", []))
|
||||
|
||||
result_1 = ""
|
||||
if repo_data:
|
||||
result_long_2, short_results_2 = get_filtered_articles(repo_data, 2)
|
||||
results.append((result_long_2, short_results_2))
|
||||
result_2 = get_filtered_articles(repo_data, Is_short, 2)
|
||||
else:
|
||||
results.append(("", []))
|
||||
|
||||
result_2 = ""
|
||||
if user_data:
|
||||
result_long_3, short_results_3 = get_filtered_articles(user_data, 3)
|
||||
results.append((result_long_3, short_results_3))
|
||||
result_3 = get_filtered_articles(user_data, Is_short, 3)
|
||||
else:
|
||||
results.append(("", []))
|
||||
|
||||
if release_data:
|
||||
result_long_4, short_results_4 = get_filtered_articles(release_data, 4)
|
||||
results.append((result_long_4, short_results_4))
|
||||
else:
|
||||
results.append(("", []))
|
||||
|
||||
return results
|
||||
result_3 = ""
|
||||
return result_1, result_2, result_3
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_github(240)
|
||||
for i, (result_long, short_results) in enumerate(results, start=1):
|
||||
if result_long != "":
|
||||
print(f"长文本结果 {i}:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 10 + "\n")
|
||||
|
||||
if short_results:
|
||||
print(f"分块的短文本结果 {i}:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 10 + "\n")
|
||||
|
||||
if all(result_long == "" and not short_results for result_long, short_results in results):
|
||||
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数据为空,跳过执行。")
|
@ -6,7 +6,7 @@ import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/qianxin.db')
|
||||
conn = sqlite3.connect('./db/qianxin.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -20,7 +20,7 @@ def create_database():
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/qianxin.db')
|
||||
conn = sqlite3.connect('./db/qianxin.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
cursor.execute('''
|
||||
@ -32,16 +32,12 @@ def insert_data(data):
|
||||
|
||||
def get_qianxin_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/qianxin.json'):
|
||||
if not os.path.exists('./JSON/qianxin.json'):
|
||||
raise FileNotFoundError(f"qianxin.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/qianxin.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/qianxin.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -63,7 +59,7 @@ def get_qianxin_json():
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/qianxin.db')
|
||||
conn = sqlite3.connect('./db/qianxin.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -82,13 +78,13 @@ def select_articles(e_hour):
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/qianxin.db')
|
||||
conn = sqlite3.connect('./db/qianxin.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/tech_passage.md"):
|
||||
def record_md(result, filename="./history/tech_passage.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -103,48 +99,31 @@ def record_md(result, filename="./resources/history/tech_passage.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n来源:{entry[3]}\n"
|
||||
result_long += f"上传时间:{entry[5]}\n"
|
||||
result_long += f"描述:{entry[4]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[5]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n来源:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += f"描述:{entry[4]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**来源**:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[5]}\n"
|
||||
record += f"**描述**:{entry[4]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_qianxin(e_hour):
|
||||
if not os.path.exists('./resources/db/qianxin.db'):
|
||||
def Src_qianxin(e_hour, Is_short):
|
||||
if not os.path.exists('./db/qianxin.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -162,26 +141,15 @@ def Src_qianxin(e_hour):
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_qianxin(4)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_qianxin(4, False)
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
@ -8,7 +8,7 @@ import email.utils
|
||||
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/seebug.db')
|
||||
conn = sqlite3.connect('./db/seebug.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -23,7 +23,7 @@ def create_database():
|
||||
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/seebug.db')
|
||||
conn = sqlite3.connect('./db/seebug.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
# 解析并格式化时间
|
||||
@ -39,16 +39,12 @@ def insert_data(data):
|
||||
|
||||
def get_seebug_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/seebug.json'):
|
||||
if not os.path.exists('./JSON/seebug.json'):
|
||||
raise FileNotFoundError(f"seebug.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/seebug.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/seebug.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -70,7 +66,7 @@ def get_seebug_json():
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/seebug.db')
|
||||
conn = sqlite3.connect('./db/seebug.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -89,13 +85,13 @@ def select_articles(e_hour):
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/seebug.db')
|
||||
conn = sqlite3.connect('./db/seebug.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
def record_md(result, filename="./history/sec_news.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -110,48 +106,31 @@ def record_md(result, filename="./resources/history/sec_news.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n类型:{entry[3]}\n"
|
||||
result_long += f"上传时间:{entry[5]}\n"
|
||||
result_long += f"{entry[4]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[5]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n类型:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += f"{entry[4]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})"
|
||||
result += f"上传时间:{entry[5]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**类型**:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[5]}\n"
|
||||
record += f"{entry[4]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_seebug(e_hour):
|
||||
if not os.path.exists('./resources/db/seebug.db'):
|
||||
def Src_seebug(e_hour, Is_short):
|
||||
if not os.path.exists('./db/seebug.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -169,26 +148,15 @@ def Src_seebug(e_hour):
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_seebug(100)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_seebug(100, False)
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
@ -4,14 +4,14 @@ import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/sougou-wx.db')
|
||||
conn = sqlite3.connect('./db/sougou-wx.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/sougou-wx.db')
|
||||
conn = sqlite3.connect('./db/sougou-wx.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -27,7 +27,7 @@ def create_database():
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/sougou-wx.db')
|
||||
conn = sqlite3.connect('./db/sougou-wx.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
# 检查是否存在相同 title 和 author 的记录
|
||||
@ -47,16 +47,12 @@ def insert_data(data):
|
||||
|
||||
def get_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/sougou-wx.json'):
|
||||
if not os.path.exists('./JSON/sougou-wx.json'):
|
||||
raise FileNotFoundError(f"sougou-wx.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/sougou-wx.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/sougou-wx.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个关键词的字典
|
||||
total_data = []
|
||||
@ -81,7 +77,7 @@ def get_json():
|
||||
return total_data
|
||||
|
||||
def select_articles():
|
||||
conn = sqlite3.connect('./resources/db/sougou-wx.db')
|
||||
conn = sqlite3.connect('./db/sougou-wx.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -128,7 +124,7 @@ def select_articles():
|
||||
|
||||
return results
|
||||
|
||||
def record_md(result, filename="./resources/history/wx_news.md"):
|
||||
def record_md(result, filename="./history/wx_news.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -143,50 +139,31 @@ def record_md(result, filename="./resources/history/wx_news.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n描述:{entry[3]}\n"
|
||||
result_long += f"上传时间:{entry[4]}\n"
|
||||
result_long += f"作者:{entry[5]}\n"
|
||||
result_long += f"关键词:{entry[6]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"关键词:{entry[6]}\n"
|
||||
f"上传时间:{entry[4]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n描述:{entry[3]}\n"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += f"作者:{entry[5]}\n"
|
||||
result += f"关键词:{entry[6]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == True:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})"
|
||||
result += f"上传时间:{entry[4]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n描述:{entry[3]}\n"
|
||||
record += f"**上传时间**:{entry[4]}\n"
|
||||
record += f"**作者**:{entry[5]}\n"
|
||||
record += f"**关键词**:{entry[6]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_sougou_wx():
|
||||
if not os.path.exists('./resources/db/sougou-wx.db'):
|
||||
def Src_sougou_wx(Is_short):
|
||||
if not os.path.exists('./db/sougou-wx.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -204,26 +181,15 @@ def Src_sougou_wx():
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_sougou_wx()
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 写入长文本结果
|
||||
with open("./1.txt", "a", encoding="utf-8") as f:
|
||||
f.write(result_long)
|
||||
f.write("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 写入分块的短文本结果
|
||||
for short_result in short_results:
|
||||
with open("./2.txt", "a", encoding="utf-8") as f:
|
||||
f.write(short_result)
|
||||
f.write("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_sougou_wx(False)
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
@ -1,233 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import json
|
||||
import sqlite3
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/uni_rss.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT,
|
||||
link TEXT,
|
||||
author TEXT,
|
||||
description TEXT,
|
||||
pubDate DATETIME,
|
||||
source TEXT,
|
||||
is_sended BOOLEAN
|
||||
)''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/uni_rss.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
cursor.execute('''
|
||||
SELECT 1 FROM articles WHERE title = ? AND author = ?
|
||||
''', (entry['title'], entry['author']))
|
||||
|
||||
if cursor.fetchone() is None:
|
||||
cursor.execute('''
|
||||
INSERT INTO articles (title, link, author, description, pubDate, source)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
''', (entry['title'], entry['link'], entry['author'], entry['description'], entry['published'], entry['source']))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_uni_rss_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/uni_rss.json'):
|
||||
raise FileNotFoundError(f"uni_rss.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/uni_rss.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
raise ValueError("JSON文件格式错误,请检查common.py是否异常!")
|
||||
|
||||
# 提取所需字段并编号
|
||||
total_data = []
|
||||
for index, item in enumerate(data, start=1):
|
||||
entry = {
|
||||
"id": index,
|
||||
"title": item.get("title", ""),
|
||||
"link": item.get("link", ""),
|
||||
"author": item.get("author", ""),
|
||||
"description": item.get("description", ""),
|
||||
"published": item.get("published", ""),
|
||||
"source": item.get("source", ""),
|
||||
}
|
||||
total_data.append(entry)
|
||||
|
||||
return total_data
|
||||
|
||||
def select_articles(uni_rss_switch, Unity):
|
||||
conn = sqlite3.connect('./resources/db/uni_rss.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
now = datetime.now()
|
||||
two_days_ago = now - timedelta(days=2)
|
||||
|
||||
if uni_rss_switch == False:
|
||||
# 查询指定时间段内的数据
|
||||
cursor.execute('''
|
||||
SELECT * FROM articles
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
ORDER BY pubDate DESC
|
||||
''', (two_days_ago.strftime('%Y-%m-%d %H:%M:%S'), now.strftime('%Y-%m-%d %H:%M:%S')))
|
||||
elif uni_rss_switch == True:
|
||||
# 查询指定时间段内且title包含特定关键词的数据
|
||||
like_conditions = ' OR '.join([f"title LIKE ?"] * len(Unity))
|
||||
|
||||
# 完整的查询语句
|
||||
query = f'''
|
||||
SELECT * FROM articles
|
||||
WHERE is_sended IS NULL AND pubDate BETWEEN ? AND ?
|
||||
AND ({like_conditions})
|
||||
ORDER BY pubDate DESC
|
||||
'''
|
||||
|
||||
# 构建参数列表
|
||||
params = [
|
||||
two_days_ago.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
now.strftime('%Y-%m-%d %H:%M:%S')
|
||||
] + [f'%{keyword}%' for keyword in Unity]
|
||||
|
||||
# 执行查询
|
||||
cursor.execute(query, params)
|
||||
|
||||
results = cursor.fetchall()
|
||||
if results:
|
||||
for row in results:
|
||||
user_id = row[0]
|
||||
cursor.execute('''
|
||||
UPDATE articles
|
||||
SET is_sended = True
|
||||
WHERE id = ?
|
||||
''', (user_id,))
|
||||
|
||||
conn.commit() # 提交事务
|
||||
|
||||
conn.close()
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/uni_rss.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/uni_passage.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):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result_long += f"作者:{entry[3]}\n"
|
||||
result_long += f"描述:{entry[4]}\n"
|
||||
result_long += f"上传时间:{entry[5]}\n"
|
||||
result_long += f"来源:{entry[6]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[5]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**作者**:{entry[3]}\n"
|
||||
record += f"**描述**:{entry[4]}\n"
|
||||
record += f"**上传时间**:{entry[5]}\n"
|
||||
record += f"**来源**:{entry[6]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
|
||||
def Src_uni_rss(uni_rss_switch, Unity):
|
||||
if not os.path.exists('./resources/db/uni_rss.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
# 清空表
|
||||
# clear_table()
|
||||
|
||||
# 获取 JSON 数据
|
||||
uni_rss_data = get_uni_rss_json()
|
||||
|
||||
# 插入数据到数据库
|
||||
insert_data(uni_rss_data)
|
||||
|
||||
# 查询指定时间段内的数据
|
||||
filtered_articles = select_articles(uni_rss_switch, Unity)
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_uni_rss(False, ["webshell", "2000", "POC", "SQL", "XSS", "CSRF", "漏洞"])
|
||||
if results:
|
||||
result_long, short_results = results
|
||||
|
||||
# 写入长文本结果
|
||||
with open("./1.txt", "a", encoding="utf-8") as f:
|
||||
f.write(result_long)
|
||||
f.write("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 写入分块的短文本结果
|
||||
for short_result in short_results:
|
||||
with open("./2.txt", "a", encoding="utf-8") as f:
|
||||
f.write(short_result)
|
||||
f.write("\n" + "-" * 40 + "\n")
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
print("聚合RSS数据为空,跳过执行。")
|
@ -6,7 +6,7 @@ import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_database():
|
||||
conn = sqlite3.connect('./resources/db/xianzhi.db')
|
||||
conn = sqlite3.connect('./db/xianzhi.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@ -18,7 +18,7 @@ def create_database():
|
||||
conn.close()
|
||||
|
||||
def insert_data(data):
|
||||
conn = sqlite3.connect('./resources/db/xianzhi.db')
|
||||
conn = sqlite3.connect('./db/xianzhi.db')
|
||||
cursor = conn.cursor()
|
||||
for entry in data:
|
||||
try:
|
||||
@ -40,16 +40,12 @@ def insert_data(data):
|
||||
|
||||
def get_xianzhi_json():
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists('./resources/JSON/xianzhi.json'):
|
||||
if not os.path.exists('./JSON/xianzhi.json'):
|
||||
raise FileNotFoundError(f"xianzhi.json文件不存在,请检查程序是否运行正常!")
|
||||
|
||||
# 打开并读取JSON文件
|
||||
with open('./resources/JSON/xianzhi.json', 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
if not content:
|
||||
pass
|
||||
else:
|
||||
data = json.loads(content)
|
||||
with open('./JSON/xianzhi.json', 'r', encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
|
||||
# 假设data是一个包含多个JSON对象的列表
|
||||
if not isinstance(data, list):
|
||||
@ -69,7 +65,7 @@ def get_xianzhi_json():
|
||||
return total_data
|
||||
|
||||
def select_articles(e_hour):
|
||||
conn = sqlite3.connect('./resources/db/xianzhi.db')
|
||||
conn = sqlite3.connect('./db/xianzhi.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 获取当前日期和时间
|
||||
@ -88,13 +84,13 @@ def select_articles(e_hour):
|
||||
return results
|
||||
|
||||
def clear_table():
|
||||
conn = sqlite3.connect('./resources/db/xianzhi.db')
|
||||
conn = sqlite3.connect('./db/xianzhi.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM articles')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def record_md(result, filename="./resources/history/tech_passage.md"):
|
||||
def record_md(result, filename="./history/tech_passage.md"):
|
||||
# 读取现有内容
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
@ -109,45 +105,28 @@ def record_md(result, filename="./resources/history/tech_passage.md"):
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
file.write(new_content)
|
||||
|
||||
def get_filtered_articles(entries):
|
||||
result_long = ""
|
||||
result_short = ""
|
||||
def get_filtered_articles(entries, Is_short):
|
||||
result = ""
|
||||
record = ""
|
||||
short_results = []
|
||||
|
||||
for entry in entries:
|
||||
# 构建长文本结果
|
||||
result_long += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result_long += f"上传时间:{entry[3]}\n"
|
||||
result_long += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 构建短文本结果并进行分块处理
|
||||
current_entry = (
|
||||
f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
f"上传时间:{entry[3]}\n"
|
||||
"\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
)
|
||||
temp_result = result_short + current_entry
|
||||
if len(temp_result.encode('utf-8')) > 4096:
|
||||
short_results.append(result_short)
|
||||
result_short = current_entry
|
||||
else:
|
||||
result_short = temp_result
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[3]}\n"
|
||||
result += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
if Is_short == False:
|
||||
result += f"文章:[{entry[1]}]({entry[2]})\n"
|
||||
result += f"上传时间:{entry[3]}\n"
|
||||
result += "\n" + "-" * 3 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
record += f"#### 文章:[{entry[1]}]({entry[2]})\n"
|
||||
record += f"**上传时间**:{entry[3]}\n"
|
||||
record += "\n" + "-" * 40 + "\n" # 添加分隔线以便区分不同文章
|
||||
|
||||
# 处理最后一个结果
|
||||
if result_short:
|
||||
short_results.append(result_short)
|
||||
|
||||
record_md(record)
|
||||
return result
|
||||
|
||||
return result_long, short_results
|
||||
|
||||
def Src_xianzhi(e_hour):
|
||||
if not os.path.exists('./resources/db/xianzhi.db'):
|
||||
def Src_xianzhi(e_hour, Is_short):
|
||||
if not os.path.exists('./db/xianzhi.db'):
|
||||
# 创建数据库和表
|
||||
create_database()
|
||||
|
||||
@ -165,26 +144,15 @@ def Src_xianzhi(e_hour):
|
||||
# print(filtered_articles)
|
||||
|
||||
if filtered_articles:
|
||||
result_long, short_results = get_filtered_articles(filtered_articles)
|
||||
return result_long, short_results
|
||||
results = get_filtered_articles(filtered_articles, Is_short)
|
||||
return results
|
||||
else:
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
results = Src_xianzhi(124)
|
||||
if results != False:
|
||||
result_long, short_results = results
|
||||
|
||||
# 打印长文本结果
|
||||
print("长文本结果:")
|
||||
print(result_long)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
|
||||
# 打印分块的短文本结果
|
||||
print("分块的短文本结果:")
|
||||
for short_result in short_results:
|
||||
print(short_result)
|
||||
print("\n" + "-" * 40 + "\n")
|
||||
reslts = Src_xianzhi(4, False)
|
||||
if reslts != False:
|
||||
print(reslts)
|
||||
else:
|
||||
# 如果为空,则跳过执行
|
||||
print("-" * 40)
|
||||
|
1002
JSON/xianzhi.json
Normal file
26
README.md
@ -1,10 +1,7 @@
|
||||
## 持续更新中 <br>
|
||||
RSS订阅链接来源:https://github.com/zhengjim/Chinese-Security-RSS <br>
|
||||
使用python-json进行格式化,然后使用飞书webhook机器人进行发送 <br>
|
||||
./config/config.yaml 可指定发送渠道、运行方式等基础配置信息 <br>
|
||||
./config/keywords.yaml 可指定关键词参数(支持热修改) <br>
|
||||
./config/github_config.yaml 可指定Github相关参数(支持热修改) <br>
|
||||
更新记录请查看./UpdateLOG.md
|
||||
config.yaml可指定大部分可能需要的参数 <br>
|
||||
|
||||
### 项目特色 <br>
|
||||
- 模块化:爬虫(获取信息部分)、分析(对获取的json信息进行筛选分析存储)、推送(推送至各渠道)、网页等各模块均可单独运行。 <br>
|
||||
@ -12,7 +9,7 @@ RSS订阅链接来源:https://github.com/zhengjim/Chinese-Security-RSS <br>
|
||||
- 简单化:配置好config后即可一步运行,效率极高。 <br>
|
||||
|
||||
### 日志相关
|
||||
请查看./resources/log文件夹下内容 <br>
|
||||
请查看./log文件夹下内容 <br>
|
||||
|
||||
### 使用建议: <br>
|
||||
Linux系统建议下载screen于后台持续运行本脚本。 <br>
|
||||
@ -32,12 +29,12 @@ web运行:`python ./web/app.py` <br>
|
||||
|
||||
### 配置 <br>
|
||||
首先先在飞书中创建群组,然后再创建WebHook机器人 <br>
|
||||
<center><img src="./resources/imgs/group.jpg" width="50%" alt="群组"/></center><br>
|
||||
<center><img src="./resources/imgs/add_bot.jpg" width="50%" alt="添加机器人"/></center><br>
|
||||
<center><img src="./imgs/group.jpg" width="50%" alt="群组"/></center><br>
|
||||
<center><img src="./imgs/add_bot.jpg" width="50%" alt="添加机器人"/></center><br>
|
||||
随后,在配置机器人时可打开签名验证(您也可自行选择IP白名单) <br>
|
||||
<center><img src="./resources/imgs/bot_config.jpg" width="50%" alt="机器人配置"/></center><br>
|
||||
<center><img src="./imgs/bot_config.jpg" width="50%" alt="机器人配置"/></center><br>
|
||||
再之后,将配置信息填入config.yaml文件当中 <br>
|
||||
<center><img src="./resources/imgs/config.jpg" width="50%" alt="配置"/></center><br>
|
||||
<center><img src="./imgs/config.jpg" width="50%" alt="配置"/></center><br>
|
||||
那么现在,您就可以开始运行使用了。 <br>
|
||||
|
||||
### Github访问限制配置 <br>
|
||||
@ -45,12 +42,11 @@ web运行:`python ./web/app.py` <br>
|
||||
- 对于未经身份验证的请求,github 速率限制允许每小时最多 60 个请求 <br>
|
||||
- 而通过使用基本身份验证的 API 请求,每小时最多可以发出 5,000 个请求 <br>
|
||||
- https://github.com/settings/tokens/new 创建token,时间建议选择无限制。<br>
|
||||
<center><img src="./resources/imgs/github-token.png" width="80%" alt="飞书运行提示"/></center><br>
|
||||
`./config/github_config.yaml`中可配置github_token <br>
|
||||
<center><img src="./imgs/github-token.png" width="80%" alt="飞书运行提示"/></center><br>
|
||||
`./config/config.yaml`中可配置github_token <br>
|
||||
|
||||
|
||||
### 运行结果 <br>
|
||||
<center><img src="./resources/imgs/run.jpg" width="50%" alt="后端"/></center><br>
|
||||
<center><img src="./resources/imgs/start.jpg" width="50%" alt="飞书运行提示"/></center><br>
|
||||
<center><img src="./resources/imgs/result.jpg" width="50%" alt="飞书运行展示"/></center><br>
|
||||
<center><img src="./resources/imgs/result_mobile.jpg" width="70%" alt="飞书运行展示-安卓"/></center><br>
|
||||
<center><img src="./imgs/start.jpg" width="50%" alt="飞书运行提示"/></center><br>
|
||||
<center><img src="./imgs/result.jpg" width="50%" alt="飞书运行展示"/></center><br>
|
||||
<center><img src="./imgs/run.jpg" width="50%" alt="后端"/></center><br>
|
||||
|
71
UpdateLOG.md
@ -1,53 +1,32 @@
|
||||
### 问题反馈
|
||||
- 准点发送的文章在定点推送模式下可能会被遗漏推送
|
||||
### 问题反馈 <br>
|
||||
- 准点发送的文章在定点推送模式下可能会被遗漏推送 <br>
|
||||
`已通过增加时间范围功能改善此问题,彻底解决需要重构代码`
|
||||
- 钉钉/企业微信/蓝信webhook存在字节长度限制,需要优化程序推送逻辑
|
||||
`重构了短文本推送机制,已解决此bug`
|
||||
- 首次运行时若抓取RSS源失败,筛选模块无法获取json文件时会导致中断
|
||||
`为项目添加一个初始json文件`
|
||||
- 程序运行会产生越来越巨大的DB文件与Markdown文件,同时web网页显示的内容也会非常长,不利于节省服务器流量与加载速度
|
||||
`为系统添加性能限制模块`
|
||||
- 钉钉/企业微信/蓝信webhook存在字节长度限制,需要优化程序推送逻辑 <br>
|
||||
`尽力改善中,彻底解决需重构代码`
|
||||
|
||||
### 下一步计划(待完成)
|
||||
- 添加更多推送方式,如邮件、微信等
|
||||
- 添加谷歌搜索等更多相关检测源,后续将支持谷歌语法
|
||||
### 下一步计划(待完成) <br>
|
||||
- 添加更多RSS订阅源(持续进行中) <br>
|
||||
- 更换筛选模块,由时段筛选改为历史记录筛选以确保不会有资讯漏报 <br>
|
||||
- 添加更多推送方式,如邮件、微信等 <br>
|
||||
- 添加GitHub等监测源(参考github-cve-monitor) <br>
|
||||
- 添加Mysql作为数据库存储 <br>
|
||||
|
||||
|
||||
### 下一步计划(已完成)
|
||||
### 下一步计划(已完成) <br>
|
||||
- 将所有打印信息转为logging info并存档(已完成)<br>
|
||||
- 将logging info转为异步的loguru(已完成)
|
||||
- 探查异常中断原因(已解决,获取rss源时的请求未做超时检测)
|
||||
- 添加超时机制,防止程序异常卡死(已完成)
|
||||
- 存档所有推送文章方便以后查看(已完成)
|
||||
- 创建Web网页以展示最新推送(info.masonliu.com,已完成)
|
||||
- 更换筛选模块,由时段筛选改为历史记录筛选以确保不会有资讯漏报(筛选条件增加了时间筛选和是否已发送筛选)
|
||||
- 添加GitHub等监测源(重构参考项目逻辑并上线)
|
||||
- 添加百度监测源
|
||||
- 添加性能限制模块(限制每次读取数量)
|
||||
- 将搜狗-微信和GitHub同步上网站推送
|
||||
|
||||
### 下一步计划(已作废)
|
||||
- 添加Mysql作为数据库存储(现有sqlite已满足使用)
|
||||
- 将logging info转为异步的loguru(已完成) <br>
|
||||
- 探查异常中断原因(已解决,获取rss源时的请求未做超时检测) <br>
|
||||
- 添加超时机制,防止程序异常卡死(已完成) <br>
|
||||
- 存档所有推送文章方便以后查看(已完成) <br>
|
||||
- 创建Web网页以展示最新推送(info.masonliu.com,已完成) <br>
|
||||
|
||||
### 更新日志
|
||||
#### 从2024年12月15日开始记录
|
||||
- 2024年12月15日早:优化了文件结构,修复了日志记录时的小BUG,添加web展示日志功能
|
||||
- 2024年12月15日晚:修复了单次运行结束时的校验错误问题
|
||||
- 2024年12月18日早:添加了短文本推送机制,一定程度上解决了长字节推送问题(解决办法正在思考中)
|
||||
- 2024年12月24日晚:上传了测试0.1版本,修复了报错问题
|
||||
- 2024年12月25日早:优化了代码逻辑和表现
|
||||
- 2024年12月25日晚:优化了推送报文格式
|
||||
- 2024年12月30日:添加并完善了基于搜狗搜索的微信公众号文章监测
|
||||
- 2024年12月30日晚:为洞见微信资讯推送添加了关键词筛选
|
||||
- 2025年01月02日:更新并上线了Github项目监测功能,readme后续更新中
|
||||
- 2025年01月02日晚:再次优化了文件结构,提高可读性
|
||||
- 2025年01月05日晚:修复了doonsec相关配置的bug,程序现已可正常运行
|
||||
- 2025年01月06日:更新了配置信息自动获取的逻辑,添加关键词等现可在运行时添加,重要配置信息(config.yaml)仍需暂停重新运行
|
||||
- 2025年01月10日上午:修复了github推送的问题(时区,消息配置错误等)
|
||||
- 2025年01月10日下午:上线了百度搜索内容监测
|
||||
- 2025年01月14日晚:添加了网站读取文件逻辑仅读取限制数量的文件,避免文件过大导致程序崩溃或是阅读困难
|
||||
- 2025年01月15日早:优化并精简了web程序的代码
|
||||
- 2025年01月22日:完善短文本推送机制,现已可完美支持推送至企业微信、钉钉、蓝信、微信等,等待后续开发
|
||||
- 2025年01月24日早:修复了json文件为空时程序中断的问题并优化了报错逻辑
|
||||
- 2025年03月10日早:为程序添加了通用rss接口,可支持更多rss源
|
||||
- 2025年03月14日晚:为程序添加了通用rss发送程序,同时修复了一个神奇的bug,现可支持更多rss源
|
||||
- 2024年12月15日早:优化了文件结构,修复了日志记录时的小BUG,添加web展示日志功能 <br>
|
||||
- 2024年12月15日晚:修复了单次运行结束时的校验错误问题 <br>
|
||||
- 2024年12月18日早:添加了短文本推送机制,一定程度上解决了长字节推送问题(解决办法正在思考中) <br>
|
||||
- 2024年12月24日晚:上传了测试0.1版本,修复了报错问题 <br>
|
||||
- 2024年12月25日早:优化了代码逻辑和表现 <br>
|
||||
- 2024年12月25日晚:优化了推送报文格式 <br>
|
||||
- 2024年12月30日:添加并完善了基于搜狗搜索的微信公众号文章监测 <br>
|
||||
- 2024年12月30日晚:为洞见微信资讯推送添加了关键词筛选 <br>
|
||||
- 2025年01月02日:更新并上线了Github项目监测功能,readme后续更新中 <br>
|
@ -4,7 +4,7 @@ from loguru import logger
|
||||
# 清除所有已有的日志记录器配置
|
||||
logger.remove()
|
||||
|
||||
logger.add("./resources/log/core.log",
|
||||
logger.add("./log/core.log",
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} - {level} - {name}:{function}:{line} - {message}",
|
||||
rotation="100 MB",
|
||||
compression="zip",
|
||||
@ -17,9 +17,6 @@ def get_core_config():
|
||||
# 加载参数
|
||||
with open('./config/config.yaml', 'r', encoding="utf-8") as file:
|
||||
config = yaml.safe_load(file)
|
||||
debug = config.get('debug', 'False') # 使用 get 方法提供默认值
|
||||
if str(debug).lower() == "true": # 统一转换为小写进行比较
|
||||
logger.debug("Debug mode is on")
|
||||
logger.debug(f"Loaded config: {config}") # 输出加载的配置
|
||||
|
||||
time_choice = int(f"{config['time_mode']}")
|
||||
@ -66,23 +63,11 @@ def get_debug_config():
|
||||
|
||||
return debug
|
||||
|
||||
def get_keywords_config(item):
|
||||
def get_kewords_config():
|
||||
with open('./config/keywords.yaml', 'r', encoding="utf-8") as file:
|
||||
config = yaml.safe_load(file)
|
||||
if item == 'Doonsec':
|
||||
Doonsec_switch = config.get('Doonsec-switch', False)
|
||||
Doonsec = config['Doonsec']
|
||||
return Doonsec_switch, Doonsec
|
||||
elif item == 'Sogou-WX':
|
||||
Sogou_WX = config['Sogou-WX']
|
||||
return Sogou_WX
|
||||
elif item == 'Baidu':
|
||||
Baidu = config['Baidu']
|
||||
return Baidu
|
||||
elif item == 'Unity':
|
||||
uni_switch = config.get('uni-switch', False)
|
||||
Unity = config['Unity']
|
||||
return uni_switch, Unity
|
||||
else:
|
||||
logger.error("参数错误,请检查./config/keywords.yaml")
|
||||
Doonsec_switch = f"{config['Doonsec-switch']}"
|
||||
Doonsec = config['Doonsec']
|
||||
|
||||
return Sogou_WX, Doonsec_switch, Doonsec
|
@ -1,12 +1,14 @@
|
||||
# 飞书相关配置信息
|
||||
# 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
|
||||
wx_key: 9a3dd6ff-75d6-4208-bc4b-77724a5805d6 # 此处填写token,记得冒号后空一格,如9a3dd6ff-75d6-4208-bc4b-77724a5805d6
|
||||
wx_key: # 此处填写token,记得冒号后空一格,如9a3dd6ff-75d6-4208-bc4b-77724a5805d6
|
||||
|
||||
# 钉钉相关配置信息
|
||||
ding_activate: False
|
||||
@ -27,11 +29,10 @@ e_hour: 4 # 程序运行时间间隔
|
||||
time_mode: 1
|
||||
# 0:定时运行模式,仅在指定时间运行(参照Core.py中设置)
|
||||
# 1:启用循环,一定间隔时间后运行
|
||||
mode: [1, 2, 3] # 运行模式,可多选
|
||||
mode: [1, 2] # 运行模式,可多选
|
||||
# 0:启用RSS抓取模式
|
||||
# 1:启用搜狗-微信公众号文章监测
|
||||
# 2:启用github项目监测
|
||||
# 3:启用百度搜索内容监测
|
||||
|
||||
# 网址配置
|
||||
url: https://info.masonliu.com/ # 请设置为您自己反代的域名,或者改为 http://127.0.0.1:5000 或者对应IP域名
|
||||
|
@ -5,14 +5,45 @@ translate: False # 是否开启翻译
|
||||
# 监控列表
|
||||
tool_list: # 监控已创建的仓库是否更新
|
||||
- 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注入
|
||||
- cnvd
|
||||
- 未授权
|
||||
- 漏洞POC
|
||||
- RCE
|
||||
- 渗透测试
|
||||
- 反序列化
|
||||
- 攻防
|
||||
- webshell
|
||||
- 红队
|
||||
- redteam
|
||||
- 信息收集
|
||||
- 绕过
|
||||
- bypass av
|
||||
|
||||
user_list: # 监控用户
|
||||
|
||||
- su18
|
||||
- BeichenDream
|
||||
- phith0n
|
||||
- zhzyker
|
||||
- lijiejie
|
||||
- projectdiscovery
|
||||
- HavocFramework
|
||||
|
||||
black_words: # 监控违禁词
|
||||
- 反共
|
||||
|
@ -1,6 +1,3 @@
|
||||
Sogou-WX: ["银行测试", "APP逆向", "渗透测试", "手机银行漏洞", "银行漏洞", "支付漏洞"] # 基于搜狗引擎搜索特定关键词的微信公众号文章
|
||||
Doonsec-switch: False
|
||||
Doonsec: ["逆向", "解包", "POC"] # 洞见微信安全资讯关键词
|
||||
uni-switch: False
|
||||
Unity: ["逆向", "解包", "POC", "漏洞"] # 聚合RSS资讯关键词
|
||||
Sogou-WX: ["银行测试", "APP逆向", "渗透测试", "手机银行漏洞", "银行漏洞", "支付漏洞"] # 基于搜狗引擎搜索特定关键词的微信公众号文章
|
||||
Baidu: ["银行测试", "APP逆向", "渗透测试", "手机银行漏洞", "银行漏洞", "支付漏洞"] # 基于百度搜索特定关键词的文章
|
||||
|
@ -1,8 +0,0 @@
|
||||
link:
|
||||
- 美团技术团队|https://tech.meituan.com/feed
|
||||
- 360 Netlab Blog|https://blog.netlab.360.com/rss
|
||||
- 知道创宇404实验室|https://paper.seebug.org/rss
|
||||
- 腾讯安全响应中心|https://security.tencent.com/index.php/feed/blog
|
||||
|
||||
wechat:
|
||||
- 美团技术团队|https://wechat2rss.xlab.app/feed/294bc034c9941529cd86a8a4b8999d100186c04d.xml
|
Before Width: | Height: | Size: 267 KiB After Width: | Height: | Size: 267 KiB |
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 211 KiB |
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 275 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
@ -6,5 +6,3 @@ requests
|
||||
python-dateutil
|
||||
loguru
|
||||
beautifulsoup4
|
||||
|
||||
feedparser
|
@ -1,162 +0,0 @@
|
||||
[
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305052",
|
||||
"title": "腾达 AC7 路由器漏洞:攻击者可借助恶意有效载荷获取 Root Shell 权限",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-14 11:32:33"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305049",
|
||||
"title": "GitLab警告:多个高危漏洞或致使攻击者可冒充有效用户登录",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-14 11:24:45"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305045",
|
||||
"title": "Siemens SINAMICS S200 陷安全危机,引导加载程序漏洞引攻击者觊觎",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-14 11:18:08"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305043",
|
||||
"title": "微软警示:ClickFix 通过虚假 Booking. com 邮件,对酒店业展开网络钓鱼行动",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "TheHackersNews",
|
||||
"pubDate": "2025-03-14 11:05:39"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305041",
|
||||
"title": "黑客滥用Microsoft Copilot进行复杂的网络钓鱼攻击",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-14 10:54:30"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305038",
|
||||
"title": "勒索软件攻击达到历史新高:2025年2月攻击数量激增126%",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "hackread",
|
||||
"pubDate": "2025-03-14 10:36:04"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305035",
|
||||
"title": "Medusa 勒索软件威胁:企业面临的持续挑战",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "securitybrief",
|
||||
"pubDate": "2025-03-14 10:23:46"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305026",
|
||||
"title": "360预警:银狐木马又双叒变异,PDF文件成传播“帮凶”",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "360数字安全",
|
||||
"pubDate": "2025-03-14 10:08:25"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305023",
|
||||
"title": "ExHub 的 IDOR 漏洞可致攻击者篡改网站托管配置",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-13 14:50:25"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305020",
|
||||
"title": "施乐打印机漏洞可致攻击者从PDA和SMB捕获身份验证数据",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-13 14:39:42"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305015",
|
||||
"title": "瞻博网络成功修复 Session Smart Router 关键漏洞",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "securityaffairs 2",
|
||||
"pubDate": "2025-03-13 11:38:18"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305013",
|
||||
"title": "Blind Eagle APT-C-36:快速利用补丁漏洞,借知名平台发动网络攻击",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-13 11:24:58"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305010",
|
||||
"title": "通过 YouTube 传播的 DCRat 恶意软件正攻击用户以窃取登录凭证",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-13 11:03:28"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305007",
|
||||
"title": "不断演变的分布式拒绝服务(DDoS)攻击策略:网络专家剖析社交媒体平台X的遭袭事件",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "securitybrief",
|
||||
"pubDate": "2025-03-13 10:49:42"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305005",
|
||||
"title": "新型Anubis恶意软件:可完全躲避检测,让黑客得以执行远程命令",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-13 10:41:12"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/305002",
|
||||
"title": "Opentext推出人工智能网络安全解决方案抵御威胁",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "securitybrief",
|
||||
"pubDate": "2025-03-13 10:23:40"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/304997",
|
||||
"title": "Nasuni 与 CrowdStrike 合作,大幅提升威胁检测效能",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "securitybrief",
|
||||
"pubDate": "2025-03-13 10:13:45"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/304995",
|
||||
"title": "360携手首都在线 拟推动DeepSeek一体机安全与服务落地合作",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "360数字安全",
|
||||
"pubDate": "2025-03-13 10:01:25"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/304990",
|
||||
"title": "紧急!CISA 警告苹果 iOS 漏洞正被恶意利用",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "cybersecuritynews",
|
||||
"pubDate": "2025-03-12 17:53:54"
|
||||
},
|
||||
{
|
||||
"guid": "https://www.anquanke.com/post/id/304988",
|
||||
"title": "360携手清微智能DeepSeek一体机 拟推动“国产算力+大模型安全+AI应用”协同发展",
|
||||
"author": " 安全客",
|
||||
"description": null,
|
||||
"source": "360数字安全",
|
||||
"pubDate": "2025-03-12 17:40:24"
|
||||
}
|
||||
]
|
@ -1,144 +0,0 @@
|
||||
{
|
||||
"齐鲁银行": [
|
||||
{
|
||||
"title": "齐鲁银行在您身旁",
|
||||
"link": "https://www.qlbchina.com/",
|
||||
"description": "关于规范个人贷款资金使用及警惕冒用银行名义营销的风险提示 — 2024年11月26日 关于银行卡系统维护的公告 — 2024年11月25日 齐鲁银行 关于金融IC借记卡有效期到期服务的客户公告 — 2024年11月22日 关于发售2025年第1期齐鲁银行济南市外机构个人大额存单(3年期 )的公告 ...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-10-22"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行在您身旁总行",
|
||||
"link": "https://www.qlbchina.com/qlbchina/jrql/xwgg/cggg/zx/index.html",
|
||||
"description": "齐鲁银行 银企大集系统优化升级项目(二次)竞争性磋商公告 [2025-01-06] 齐鲁银行信用卡多渠道进件及信用卡审批系统人力外包项目(二次)竞争性磋商公告 [2025-01-06] 齐鲁银行村镇智能柜台系统改造项目竞争性磋商公告 [2025-01-03] 齐鲁银行商用密码安全评估服务项目 ...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2025-01-06"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行(601665)_股票行情,行情首页_中财网",
|
||||
"link": "https://gg.cfi.cn/quote.aspx?stockid=92680&contenttype=outline&client=pc",
|
||||
"description": "中财网提供 齐鲁银行 (601665)实时行情动态分析,全面报道齐鲁银行(601665)基本资料及重大新闻、行业资讯,浏览齐鲁银行(601665)财务数据、行情数据,公司公告,重大事件。",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-12-31"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行股份有限公司德州分行 - 天眼查",
|
||||
"link": "https://www.tianyancha.com/company/2354701752",
|
||||
"description": "简介: 齐鲁银行 股份有限公司德州分行,成立于2014年,位于山东省德州市,是一家以从事货币金融服务为主的企业。通过天眼查大数据分析,齐鲁银行股份有限公司德州分行参与招投标项目9次;此外企业还拥有行政许可8个。风险方面共发现企业有 展开 财产线索 线索47预估价值1亿元 ...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-12-09"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行聊城分行 - 百度百科",
|
||||
"link": "https://baike.baidu.com/item/%E9%BD%90%E9%B2%81%E9%93%B6%E8%A1%8C%E8%81%8A%E5%9F%8E%E5%88%86%E8%A1%8C/6555695",
|
||||
"description": "作为 齐鲁银行 第一家异地分行,聊城分行自2008年3月19日成立以来,在聊城市委、市政府的领导下,在各级各部门的大力支持和帮助下,始终坚持“服务地方经济,服务中小企业,服务市民百姓”的市场定位,以创建“中小企业首选银行”为目标,将营销和服务的重点放在了中小企业和居民个人业务上,优质高效地开展金融服务,有力...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-07-22"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行信用卡申请进度入口查询 - 首页",
|
||||
"link": "https://ebank.qlbchina.com/pbank/",
|
||||
"description": "正在加载请稍候……",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2025-01-08"
|
||||
},
|
||||
{
|
||||
"title": "14项违规!齐鲁银行收1495万罚单,副行长陶文喆连带被罚 - 知乎",
|
||||
"link": "https://zhuanlan.zhihu.com/p/677564348",
|
||||
"description": "最近,国家金融监管总局山东监管局披露相关罚单,显示 齐鲁银行 因存在14项主要违法违规事实,被没收违法所得并罚款合计1495.126802万元。其中,分支机构罚没120万,总行罚没1375.126802万元,罚单开出时间为2023年12月28日。 具体而言,齐鲁银行此次罚单涉及的违法违规事实包括小微企业划型不到位;违规向小微企业收取费用;个贷、房地...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-01-12"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行是国企还是私企?",
|
||||
"link": "http://baijiahao.baidu.com/s?id=1716751640979713811&wfr=spider&for=pc",
|
||||
"description": "齐鲁银行 的性质属于私企,它在1996年6月份正式成立齐鲁银行,有众多股东,这其中包括国有公司中资法人的公司,个人企业以及外资公司等共同组建,是一家股份制的商业银行。它也是全国首批设立的城市商业银行,总部就位于山东的省会济南,该公司最大的股东就是澳洲联邦银行。齐鲁银行作为一家地方性银行,其涵盖领域众多,...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2021-11-18"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行违反《反洗钱法》规定 被罚款30万元 - 每日经济新闻",
|
||||
"link": "http://baijiahao.baidu.com/s?id=1651509754800941149&wfr=spider&for=pc",
|
||||
"description": "齐鲁银行 的性质属于私企,它在1996年6月份正式成立齐鲁银行,有众多股东,这其中包括国有公司中资法人的公司,个人企业以及外资公司等共同组建,是一家股份制的商业银行。它也是全国首批设立的城市商业银行,总部就位于山东的省会济南,该公司最大的股东就是澳洲联邦银行。齐鲁银行作为一家地方性银行,其涵盖领域众多,...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "No timestamp found"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行5.40(-1.46%)_股票行情_新浪财经_新浪网",
|
||||
"link": "http://finance.sina.com.cn/realstock/company/sh601665/nc.shtml",
|
||||
"description": "新浪财经为您提供 齐鲁银行 (601665)股票实时行情走势,实时资金流向,实时新闻资讯,研究报告,股吧互动,交易信息,个股点评,公告,财务指标分析等与齐鲁银行(601665)股票相关的信息与服务.",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2025-01-08"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行",
|
||||
"link": "http://gjxy.sdau.edu.cn/2017/1226/c3557a119546/page.htm",
|
||||
"description": "2008年11月30日,该行天津分行开业,由此成为山东省首家在省外异地设立分行的城市商业银行。 2010年8月27日,青岛分行成立。 截至2009年12月31日, 齐鲁银行 辖有72家分、支行(部),在岗员工1800余人。全行总资产617.35亿元,是成立之初的19倍;各项存款余额546.55亿元,是成立时的20倍;各项贷款余额353.1亿元,是成立时的20...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2017-12-26"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行(601665)股本结构_新浪财经_新浪网",
|
||||
"link": "http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_StockStructure/stockid/601665.phtml",
|
||||
"description": "齐鲁银行 5.59 -0.06-1.06% 2024-12-31 15:00:01 昨收盘:5.65今开盘:5.65最高价:5.70最低价:5.59 市值:270.28亿元 流通:270.28成交:347797手 换手:0.72% 公司资料意见反馈 公司资料: 公司简介 股本结构 主要股东 流通股股东 基金持股 公司高管 公司章程 ...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-12-31"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行(QILU BANK)",
|
||||
"link": "https://bank.cngold.org/index_51.html",
|
||||
"description": "简要名称: 齐鲁银行 法人代表:邱云章成立日期:1996-06-06 银行性质:城市商业银行银行行长:郭涛注册资金: 客服热线:40060-96588公司总部:济南市顺河街176号 银行简介:济南市商业银行是山东省成立的首家地方性股份制商业银行。1996年6月6日,在济南市16家城市信用社和1家城信社联社的基础上组建了济南城市合作银行;1998年...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2022-11-09"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行- 搜狗百科",
|
||||
"link": "https://baike.sogou.com/v7655626.htm",
|
||||
"description": "齐鲁银行 (Qilu Bank)是一家由国有股份、中资法人股份、外资股份和众多个人股份等共同组成独立法人资格的股份制商业银行,实行一级法人体制,成立于1996年6月,总部位于山东省济南市。其原名济南城市合作银行,于1998年6月6日更名为济南市商业银行,于2009年6月更名为齐鲁",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-07-10"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行(601665)_股票价格_行情_走势图—东方财富网",
|
||||
"link": "http://quote.eastmoney.com/unify/r/1.601665?from=classic&eventcode=Web_quote_entrance1",
|
||||
"description": "提供 齐鲁银行 (601665)股票的行情走势、五档盘口、逐笔交易等实时行情数据,及齐鲁银行(601665)的新闻资讯、公司公告、研究报告、行业研报、F10资料、行业资讯、资金流分析、阶段涨幅、所属板块、财务指标、机构观点、行业排名、估值水平、股吧互动等与齐鲁银行(601665)有关",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2025-01-03"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行",
|
||||
"link": "https://yqhome.qlbchina.com/",
|
||||
"description": "服务热线:40060-96588 账号登录 UKey登录 立即登录 立即注册忘记密码保函查验",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2025-01-08"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行(601665.SH)公司高管-PC_HSF10资料",
|
||||
"link": "http://f10.eastmoney.com/f10_v2/CompanyManagement.aspx?code=sh601665",
|
||||
"description": "信贷处办事员、办公室科长,中国农业银行泰安市分行党委委员、副行长,中国农业银行山东省分行办公室副主任、主任,中国农业银行山东省分行党委委员、行长助理,中国农业银行山东省分行党委委员、行长助理兼东营市分行党委书记、行长,中国农业银行山东省分行党委委员、副行长,中国农业银行天津市分行党委书记、行长, 齐鲁银行 党委...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-12-06"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行山东省网点地址电话查询_齐鲁银行网点-金投网(手机金投网...",
|
||||
"link": "http://bank.cngold.org/yhwd/list_city_51_16.html",
|
||||
"description": "齐鲁银行 客服热线:40060-96588 简要名称:齐鲁银行 法定名称:齐鲁银行 银行性质: 城市商业银行 公司总部:济南市顺河街176号山东省-齐鲁银行网点查询 济南(共有105个齐鲁银行网点) 青岛(共有2个齐鲁银行网点) 聊城(共有7个齐鲁银行网点) 热门城市-齐鲁银行网点查询 北京 杭州 天津 重庆 苏州 南京 广州 厦门...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2025-01-07"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行天津分行 - 百度百科",
|
||||
"link": "https://baike.baidu.com/item/%E9%BD%90%E9%B2%81%E9%93%B6%E8%A1%8C%E5%A4%A9%E6%B4%A5%E5%88%86%E8%A1%8C/9614852",
|
||||
"description": "天津分行是 齐鲁银行 成立的首家省外异地分行,是总行新三年发展规划战略实施的重要一步。在地方党委、政府的关怀下,在监管部门的监管指导下,在社会各界的关心支持下,分行于2008年11月30日正式对外营业。分行领导 总行副行长,天津分行党委书记:柴传早,天津分行行长:张宝银,天津分行副行长:张磊、胡立军,天津分行...",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-07-01"
|
||||
},
|
||||
{
|
||||
"title": "齐鲁银行在您身旁齐鲁银行信用卡多渠道进件及信用卡审批系统人力...",
|
||||
"link": "https://www.qlbchina.com/qlbchina/2025-01/06/article_2025010613411012428.html",
|
||||
"description": "齐鲁银行 信用卡多渠道进件及信用卡审批系统人力外包项目(二次)竞争性磋商公告 齐鲁银行信用卡多渠道进件及信用卡审批系统人力外包项目(二次)竞争性磋商公告.docx",
|
||||
"author": "百度快照",
|
||||
"pubDate": "2024-12-27"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,162 +0,0 @@
|
||||
[
|
||||
{
|
||||
"title": "人工智能聊天机器人DeepSeek R1可被操纵用于创建恶意软件",
|
||||
"link": "https://www.freebuf.com/articles/network/424572.html",
|
||||
"description": "DeepSeek R1可被操纵生成恶意软件,降低网络犯罪门槛,尽管仍需手动修正,但加速了恶意软件开发。",
|
||||
"body": "<p>网络安全公司Tenable Research的最新分析揭示,开源人工智能聊天机器人<strong>DeepSeek R1</strong>能够被操纵用于生成恶意软件,包括键盘记录器和勒索软件。Tenable的研究团队评估了DeepSeek生成有害代码的能力,重点测试了两种常见的恶意软件类型:键盘记录器和勒索软件。</p><p>尽管DeepSeek无法直接“开箱即用”生成完全可用的恶意软件,并",
|
||||
"category": "网络安全",
|
||||
"pubDate": "Fri, 14 Mar 2025 00:51:27 +0800"
|
||||
},
|
||||
{
|
||||
"title": "朝鲜威胁组织ScarCruft利用KoSpy恶意软件监控安卓用户",
|
||||
"link": "https://www.freebuf.com/articles/es/424540.html",
|
||||
"description": "朝鲜黑客组织ScarCruft通过伪装应用投放KoSpy恶意软件,监控安卓用户,攻击针对韩语和英语用户。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250313/1741878280398181_a226a43ddb394530a82c72add0dcff49.png!small\" alt=\"image\" /></p><p>据报道,与朝鲜有关的威胁组织ScarCruft开发了一种名为 <strong>KoSpy</strong>的安卓监控工具,专门针对韩",
|
||||
"category": "企业安全",
|
||||
"pubDate": "Thu, 13 Mar 2025 19:53:00 +0800"
|
||||
},
|
||||
{
|
||||
"title": "大模型越狱(通常)比你想象的容易——一种基于伪造对话历史的攻击算法",
|
||||
"link": "https://www.freebuf.com/vuls/424360.html",
|
||||
"description": "一种基于伪造会话历史的大模型对抗算法",
|
||||
"body": "<h1>1.摘要</h1><p>微软的研究团队提出了一种名为“上下文一致性攻击”(Context Compliance Attack,以下简称CCA算法)的大模型越狱攻击算法,这种攻击算法相对轻巧,既不需要复杂的提示词工程,也不要消耗大量算力来迭代优化恶意提示词。</p><p>CCA算法利用了目前大模型架构中一个漏洞——会话历史的无状态性。即用户可以伪造会话历史输入给大模型,而大模型在无法分辨该对",
|
||||
"category": "漏洞",
|
||||
"pubDate": "Thu, 13 Mar 2025 16:37:29 +0800"
|
||||
},
|
||||
{
|
||||
"title": "CISA警告:苹果WebKit越界写入漏洞已被野外利用",
|
||||
"link": "https://www.freebuf.com/vuls/424562.html",
|
||||
"description": "苹果WebKit越界写入漏洞(CVE-2025-24201)已被野外利用,攻击者可执行未经授权的代码。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250314/1741889032347357_5c64ed0a88814dc4bc5fd233083566e8.webp!small\" alt=\"image\" /></p><p>美国网络安全和基础设施安全局(CISA)近日警告称,苹果WebKit浏览器引擎中存在一个被野外利用的零日漏洞,编号为CVE-202",
|
||||
"category": "漏洞",
|
||||
"pubDate": "Thu, 13 Mar 2025 16:21:31 +0800"
|
||||
},
|
||||
{
|
||||
"title": "微信小程序测试技巧总结",
|
||||
"link": "https://www.freebuf.com/articles/web/424498.html",
|
||||
"description": "测试微信小程序跟web网站基本相同,抓包测试接口,逆向看小程序源码。",
|
||||
"body": "<h2 id=\"h2-1\">前言</h2><p>目前越来越多的企业都开始开发微信小程序,如果在web测试过程中没有结果,不如换个思路,去看看微信小程序是否有问题。</p><p>测试微信小程序跟web网站基本相同,抓包测试接口,逆向看小程序源码。本篇文章就来看看如何进行微信小程序抓包以及逆向。</p><p><br /></p><h2 id=\"h2-2\">微信小程序抓包</h2><p>要测试微信小程序",
|
||||
"category": "Web安全",
|
||||
"pubDate": "Thu, 13 Mar 2025 16:16:54 +0800"
|
||||
},
|
||||
{
|
||||
"title": "全美29州逾8.6万名医护人员信息因AWS S3存储桶配置错误遭泄露",
|
||||
"link": "https://www.freebuf.com/articles/database/424561.html",
|
||||
"description": "全美29州逾8.6万名医护人员信息因AWS S3存储桶配置错误遭泄露,包含敏感PII和医疗文件。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250314/1741889027627786_9dbc9c95718140af8ac0145800762e1c.webp!small\" alt=\"image\" /></p><p>近日,一起涉及医护人员敏感信息的大规模数据泄露事件被发现,总部位于新泽西州的健康科技公司ESHYFT的超过8.6万条记录被暴露。<",
|
||||
"category": "数据安全",
|
||||
"pubDate": "Thu, 13 Mar 2025 16:09:35 +0800"
|
||||
},
|
||||
{
|
||||
"title": "黑客滥用微软Copilot发动高仿钓鱼攻击",
|
||||
"link": "https://www.freebuf.com/news/424552.html",
|
||||
"description": "黑客利用微软Copilot发起高仿钓鱼攻击,通过伪造发票邮件和虚假登录页面窃取用户凭据,威胁企业安全。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250314/1741885485840984_47bf608e967345259deb66fcf48bec25.webp!small\" alt=\"image\" /></p><p>随着越来越多企业将微软Copilot集成到其日常工作中,网络犯罪分子瞄准了这一AI助手的用户,发起了高度复杂的钓鱼攻击。微软Cop",
|
||||
"category": "资讯",
|
||||
"pubDate": "Thu, 13 Mar 2025 16:07:50 +0800"
|
||||
},
|
||||
{
|
||||
"title": "FreeBuf早报 | 特朗普提名Sean Plankey掌权CISA;勒索病毒袭美逾300关键机构",
|
||||
"link": "https://www.freebuf.com/news/424478.html",
|
||||
"description": "特朗普提名Sean Plankey掌权CISA;勒索病毒袭美逾300关键机构",
|
||||
"body": "<h2 id=\"h2-1\">全球网安事件速递</h2><h3 id=\"h3-1\">1. Win10 / Win11 装机镜像不再“裸奔”,微软发布 Defender 更新填补安全漏洞</h3><p>微软针对 Windows 10、Windows 11 和 Windows Server 安装镜像,发布了新版 Defender 更新,解决安装镜像中可能存在的旧版反恶意软件问题,提升系统安全性和性能。 ",
|
||||
"category": "资讯",
|
||||
"pubDate": "Thu, 13 Mar 2025 14:10:05 +0800"
|
||||
},
|
||||
{
|
||||
"title": "新手友好,spring内存马学习篇二",
|
||||
"link": "https://www.freebuf.com/articles/web/424441.html",
|
||||
"description": "这是spring内存马第二篇,主要学习实战中如何打内存马",
|
||||
"body": "<h2 id=\"h2-1\">反序列化注入内存马</h2><h3 id=\"h3-1\">Fastjson靶场搭建</h3><p>我们在前面的springboot项目上引入fastjson,模拟一下漏洞环境</p><p><img src=\"https://image.3001.net/images/20250306/1741255427_67c97303619323cef3b85.png!small\" ",
|
||||
"category": "Web安全",
|
||||
"pubDate": "Thu, 13 Mar 2025 09:17:22 +0800"
|
||||
},
|
||||
{
|
||||
"title": "D-link: 轻量级正反向文件同步后渗透持久化控制",
|
||||
"link": "https://www.freebuf.com/sectool/424419.html",
|
||||
"description": "#后渗透 #文件同步 #轻量 #持久化 #正/反向隧道 #C++ #D-Link",
|
||||
"body": "<h1>D-link</h1><p>D-link 是一款用 C++ 编写的轻量级 Linux 文件同步工具。</p><ol><li><p>支持反向文件同步操作。</p></li><li><p>目录监控,实时更新。</p></li><li><p>访问控制:客户端只能自动上传和删除文件,无法从服务器下载敏感文件。就算同步的文件在服务器端被删掉,客户端还是会自动恢复。</p></li><li><p>客户",
|
||||
"category": "工具",
|
||||
"pubDate": "Thu, 13 Mar 2025 00:45:10 +0800"
|
||||
},
|
||||
{
|
||||
"title": "多视角解码大模型安全:以 AI 制衡 AI,突破安全困局",
|
||||
"link": "https://www.freebuf.com/fevents/424379.html",
|
||||
"description": "“模型有界、安全无疆”主题技术研讨会在西安圆满落幕。",
|
||||
"body": "<p>在人工智能快速发展的今天,大模型已经成为了推动各行业变革的核心技术之一,从医疗诊断到智能交通,从金融风险控制到教育个性化推荐,各行各业中都出现了大模型的身影。</p><p>根据Gartner的预测,2026年将有超过80%的企业部署启用生成式人工智能(GenAI)的应用,而2023年这一比例尚不足5%,可以说大模型正以前所未有的速度重塑着我们的世界。</p><p>技术突飞猛进的同时,也伴生着",
|
||||
"category": "活动",
|
||||
"pubDate": "Wed, 12 Mar 2025 17:31:35 +0800"
|
||||
},
|
||||
{
|
||||
"title": "超400个IP地址协同攻击,利用多个SSRF漏洞发起网络攻势",
|
||||
"link": "https://www.freebuf.com/vuls/424412.html",
|
||||
"description": "至少400个IP地址被发现同时利用多个SSRF漏洞,攻击尝试之间表现出显著的重叠。",
|
||||
"body": "\n<p><img src=\"https://image.3001.net/images/20250312/1741788137072942_62d5d71c105a40c7a1be5eeb33fbab11.png!small\" alt=\"image\"></p>\n<p>威胁情报公司GreyNoise发出警告称,近期针对多个平台的服务器端请求伪造(SSRF)漏洞利用活动出现了“协同激增”现象。</p>",
|
||||
"category": "漏洞",
|
||||
"pubDate": "Wed, 12 Mar 2025 17:26:00 +0800"
|
||||
},
|
||||
{
|
||||
"title": "AI会取代渗透测试工程师吗?",
|
||||
"link": "https://www.freebuf.com/articles/neopoints/424414.html",
|
||||
"description": "关于哪些职业会受到AI冲击的讨论从未停止,而渗透测试(Pentesting)最近也被推到了风口浪尖。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250312/1741788229145520_ea88f496d23c41d9b5a2c92b14a8910e.png!small\" alt=\"image\" /></p><p>多年来,我们一直在听到同样的说法:AI将会取代你的工作。事实上,2017年麦肯锡发布了一份报告《消失与新增的岗位:自动化时代下的劳动",
|
||||
"category": "观点",
|
||||
"pubDate": "Wed, 12 Mar 2025 15:55:00 +0800"
|
||||
},
|
||||
{
|
||||
"title": "FreeBuf早报 | 微软与VMware零日漏洞紧急修复指南;TP-Link漏洞感染超6000台设备",
|
||||
"link": "https://www.freebuf.com/news/424346.html",
|
||||
"description": "微软与VMware零日漏洞紧急修复指南;TP-Link漏洞感染超6000台设备",
|
||||
"body": "<h2 id=\"h2-1\">全球网安事件速递</h2><h3 id=\"h3-1\">1. Manus代码遭越狱,季逸超本人回应:“团队一直有开源传统”</h3><p>北京时间3月10日清晨,推特用户jianxliao发布推文称成功“越狱”了Manus AI的代码,据其透露,他只是简单地要求Manus提供\"/opt/.manus/\"目录下的文件,系统便直接提供了沙盒运行时代码,并揭示了Manus使用C",
|
||||
"category": "资讯",
|
||||
"pubDate": "Wed, 12 Mar 2025 14:30:42 +0800"
|
||||
},
|
||||
{
|
||||
"title": "API攻击威胁加剧:2025年如何确保API安全",
|
||||
"link": "https://www.freebuf.com/articles/web/424399.html",
|
||||
"description": "API攻击威胁加剧:59%的组织开放API“写入”权限,黑客可未经授权访问,导致数据窃取、账户接管等重大风险。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250312/1741780939666956_d18f4fcfe4ab4b048c66f1169504989e.png!small\" alt=\"image\" /></p><p>API攻击正持续增加,<strong>一项令人担忧的研究</strong>显示,59%的组织为至少一半的API开放了“写入”权限,这",
|
||||
"category": "Web安全",
|
||||
"pubDate": "Wed, 12 Mar 2025 11:29:24 +0800"
|
||||
},
|
||||
{
|
||||
"title": "攻击者开始利用MFA漏洞在内的高级手段绕过多因素身份验证",
|
||||
"link": "https://www.freebuf.com/articles/web/424386.html",
|
||||
"description": "这些高级技术利用了身份验证工作流程中的漏洞,而非身份验证因素本身。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250312/1741773779537870_8402efd7d8fa46fa8d2f0067903712ee.webp!small\" alt=\"image\" /></p><p>研究人员最近发现了一种令人不安的攻击趋势,这些攻击专门设计来绕过多因素身份验证(MFA)的保护机制。这些高级技术利用了身份验证工作",
|
||||
"category": "Web安全",
|
||||
"pubDate": "Wed, 12 Mar 2025 09:53:49 +0800"
|
||||
},
|
||||
{
|
||||
"title": "Hessian反序列化原理到武器化利用",
|
||||
"link": "https://www.freebuf.com/articles/web/424308.html",
|
||||
"description": "今天和大家共同探讨Java安全领域中一种常见的安全威胁,也就是Hessian反序列化漏洞。",
|
||||
"body": "<p>今天和大家共同探讨Java安全领域中一种常见的安全威胁,也就是Hessian反序列化漏洞。作为贯穿Java生态的RPC通信基石,Hessian协议如同微服务架构的\"神经网络\",其安全风险直接影响多个Java核心组件的命脉,如近几年披露的一些Hessian协议相关的安全组件漏洞:Seata Hessian 反序列化漏洞、Nacos 集群 Hessian 反序列化漏洞、xxl-job Hessi",
|
||||
"category": "Web安全",
|
||||
"pubDate": "Wed, 12 Mar 2025 09:42:19 +0800"
|
||||
},
|
||||
{
|
||||
"title": "新型XCSSET恶意软件利用增强混淆技术攻击macOS用户",
|
||||
"link": "https://www.freebuf.com/articles/web/424375.html",
|
||||
"description": "新型XCSSET恶意软件利用增强混淆技术攻击macOS用户,感染Xcode项目,窃取敏感信息,采用复杂持久化机制,威胁开发者安全。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250312/1741770276931049_1ffd07215f97425f8ba4f5216c276ae5.webp!small\" alt=\"image\" /></p><p>微软威胁情报团队发现了一种新型的XCSSET变种,这是一种复杂的模块化macOS恶意软件,能够感染Xcode项目,并在开发者构建这",
|
||||
"category": "Web安全",
|
||||
"pubDate": "Wed, 12 Mar 2025 07:44:44 +0800"
|
||||
},
|
||||
{
|
||||
"title": "AI 辅助的虚假 GitHub 仓库窃取敏感数据,包括登录凭证",
|
||||
"link": "https://www.freebuf.com/articles/database/424374.html",
|
||||
"description": "AI 辅助的虚假 GitHub 仓库窃取敏感数据,伪装合法项目分发 Lumma Stealer 恶意软件。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250312/1741770262754508_969bbeb5d15b4a8795a84388a5078ab3.webp!small\" alt=\"image\" /></p><p>近期发现了一种复杂的恶意软件活动,该活动利用人工智能创建具有欺骗性的 GitHub 仓库,并分发 SmartLoader 负载,最",
|
||||
"category": "数据安全",
|
||||
"pubDate": "Wed, 12 Mar 2025 07:40:26 +0800"
|
||||
},
|
||||
{
|
||||
"title": "谷歌紧急警告:Chromecast用户切勿进行出厂重置",
|
||||
"link": "https://www.freebuf.com/news/424361.html",
|
||||
"description": "谷歌紧急警告:别对Chromecast进行出厂重置。过期证书导致2000万台设备无法正常运行,用户陷入“变砖”困境。",
|
||||
"body": "<p><img src=\"https://image.3001.net/images/20250312/1741766697560974_acdc23f708a34b058255dc1d9a0b0fcd.webp!small\" alt=\"image\" /></p><p>谷歌已向第二代Chromecast(2015年)和Chromecast Audio设备的所有者发出紧急通知,警告不要进行出厂重置,",
|
||||
"category": "资讯",
|
||||
"pubDate": "Wed, 12 Mar 2025 07:10:20 +0800"
|
||||
}
|
||||
]
|
@ -1,335 +0,0 @@
|
||||
[
|
||||
{
|
||||
"link": "https://github.com/wujun728/jun_api_service",
|
||||
"name": "jun_api_service",
|
||||
"created_at": "2021-07-01T14:43:39Z",
|
||||
"description": "jun_api_service是一个基于我另外一个自定义的starter的动态API框架。项目本身使用技术有SpringBoot+字节码生成执行+动态脚本+动态SQL,可以实时动态生成RESTAPI并动态发布或者热加载。且发布后可动态执行java源码、groovy脚本及SQL脚本...",
|
||||
"author": "wujun728",
|
||||
"language": "JavaScript",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/ballcat-projects/ballcat",
|
||||
"name": "ballcat",
|
||||
"created_at": "2019-10-20T12:18:53Z",
|
||||
"description": "😸一个快速开发脚手架,快速搭建企业级后台管理系统,并提供多种便捷starter进行功能扩展。主要功能包括前后台用户分离,菜单权限,数据权限,定时任务,访问日志,操作日志,异常日志,统一异常处理,XSS过滤,SQL防注...",
|
||||
"author": "ballcat-projects",
|
||||
"language": "Java",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/1024-lab/smart-admin",
|
||||
"name": "smart-admin",
|
||||
"created_at": "2019-11-16T02:30:31Z",
|
||||
"description": "SmartAdmin国内首个以「高质量代码」为核心,「简洁、高效、安全」快速开发平台;基于SpringBoot2/3 + Sa-Token + Mybatis-Plus 和 Vue3 + Vite5 + Ant Design Vue 4.x (同时支持JavaScript和TypeScript双版本);满足国家三级等保要求、支持登录限制、接...",
|
||||
"author": "1024-lab",
|
||||
"language": "Java",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/JaveleyQAQ/SQL-Injection-Scout",
|
||||
"name": "SQL-Injection-Scout",
|
||||
"created_at": "2025-01-03T08:42:22Z",
|
||||
"description": "SQL Injection Scout 是一个用于 Burp Suite 的扩展,专为帮助安全研究人员和开发人员检测和分析 SQL 注入漏洞而设计。该扩展提供了丰富的配置选项和直观的用户界面,便于用户自定义扫描和分析过程。",
|
||||
"author": "JaveleyQAQ",
|
||||
"language": null,
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/henryxm/autumn",
|
||||
"name": "autumn",
|
||||
"created_at": "2018-10-08T12:12:12Z",
|
||||
"description": "采用Spring、Spring Boot、Redis、MyBatis、Shiro、Druid框架开发,搭载mysql数据。 如果你厌烦了MyBatis中需要手动创建表的事情,这个项目非常适合你,自动为你生成表。 从此你不在需要导入sql文件了,项目初始化变得异常简单,结构清...",
|
||||
"author": "henryxm",
|
||||
"language": "JavaScript",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/ProbiusOfficial/ssrf-labs",
|
||||
"name": "ssrf-labs",
|
||||
"created_at": "2025-02-17T16:28:50Z",
|
||||
"description": "一个ssrf的综合靶场,包含RCE,SQL注入,Tomcat,Redis,MySQL提权等ssrf攻击场景",
|
||||
"author": "ProbiusOfficial",
|
||||
"language": "Shell",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/suqianjue/sqlmap_gui",
|
||||
"name": "sqlmap_gui",
|
||||
"created_at": "2025-02-18T08:52:30Z",
|
||||
"description": "sqlmap_gui是一款图形界面化的 SQL 注入漏洞测试工具",
|
||||
"author": "suqianjue",
|
||||
"language": "Java",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/Aki-1038/MySQL",
|
||||
"name": "MySQL",
|
||||
"created_at": "2025-03-03T01:22:07Z",
|
||||
"description": "這個頁面展示了 MySQL 的基本功能,包括 QUERY、INSERT、UPDATE 和 DELETE 等 SQL 操作。 請在下方輸入 SQL 查詢,然後點擊「執行」按鈕,查看結果。 注意:這個頁面僅供測試使用,請勿在正式環境中使用。",
|
||||
"author": "Aki-1038",
|
||||
"language": "HTML",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/saoshao/DetSql",
|
||||
"name": "DetSql",
|
||||
"created_at": "2024-09-03T14:58:23Z",
|
||||
"description": "Burp插件,快速探测可能存在SQL注入的请求并标记,提高测试效率",
|
||||
"author": "saoshao",
|
||||
"language": "Java",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/toolgood/ToolGood.SQLFirewall",
|
||||
"name": "ToolGood.SQLFirewall",
|
||||
"created_at": "2024-06-21T06:31:42Z",
|
||||
"description": "SQL Firewall, Prevent SQL injection, 防sql注入",
|
||||
"author": "toolgood",
|
||||
"language": "C#",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/gege-circle/.github",
|
||||
"name": ".github",
|
||||
"created_at": "2020-09-20T04:47:25Z",
|
||||
"description": "这里是GitHub的草场,也是戈戈圈爱好者的交流地,主要讨论动漫、游戏、科技、人文、生活等所有话题,欢迎各位小伙伴们在此讨论趣事。This is GitHub grassland, and the community place for Gege circle lovers, mainly discusses anime, games, technology,...",
|
||||
"author": "gege-circle",
|
||||
"language": null,
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/yuqingfang2004/AriaDB-for-SDCs-",
|
||||
"name": "AriaDB-for-SDCs-",
|
||||
"created_at": "2024-12-11T08:17:34Z",
|
||||
"description": "本仓库来自确定性执行数据库AriaDB,在此基础上进行修改,实现了SDC注入(SQL层面)",
|
||||
"author": "yuqingfang2004",
|
||||
"language": "C++",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/steveopen1/ruoyi_vulnscan",
|
||||
"name": "ruoyi_vulnscan",
|
||||
"created_at": "2025-02-23T07:15:22Z",
|
||||
"description": "ruuoyi_vulnscan 是一款基于 Python 和 Tkinter 开发的图形化界面工具,用于检测若依 Vue 框架应用程序中的常见漏洞。该工具提供了多种漏洞检测模块,包括 Swagger 检测、Druid 检测、文件下载漏洞检测、SQL 注入检测、定时任务漏洞检...",
|
||||
"author": "steveopen1",
|
||||
"language": "Python",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/LtmThink/SQLRecorder",
|
||||
"name": "SQLRecorder",
|
||||
"created_at": "2025-02-13T12:20:51Z",
|
||||
"description": "SQLRecorder是一个能够实时记录SQL语句的工具,方便代码审计时对SQL注入的实时关注。(A proxy to record all passing SQL statements.)",
|
||||
"author": "LtmThink",
|
||||
"language": "Go",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/DDL08/directory",
|
||||
"name": "directory",
|
||||
"created_at": "2025-02-10T05:44:39Z",
|
||||
"description": "sql注入或rce或者其他的爆破字典,模糊测试fuzz字典",
|
||||
"author": "DDL08",
|
||||
"language": null,
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/peiqiF4ck/WebFrameworkTools-5.1-main",
|
||||
"name": "WebFrameworkTools-5.1-main",
|
||||
"created_at": "2023-01-08T05:21:26Z",
|
||||
"description": "本软件首先集成危害性较大框架和部分主流cms的rce(无需登录,或者登录绕过执行rce)和反序列化(利用链简单)。傻瓜式导入url即可实现批量getshell。批量自动化测试。例如:Thinkphp,Struts2,weblogic。出现的最新漏洞进行实时跟踪并且更...",
|
||||
"author": "peiqiF4ck",
|
||||
"language": "C#",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov",
|
||||
"name": "AreaCity-JsSpider-StatsGov",
|
||||
"created_at": "2018-11-28T05:11:35Z",
|
||||
"description": "省市区县乡镇三级或四级城市数据,带拼音标注、坐标、行政区域边界范围;2025年01月14日最新采集,提供csv格式文件,支持在线转成多级联动js代码、通用json格式,提供软件转成shp、geojson、sql、导入数据库;带浏览器里面运...",
|
||||
"author": "xiangyuecn",
|
||||
"language": "JavaScript",
|
||||
"keyword": "sql注入"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/PstarSec/AI-Ollama",
|
||||
"name": "AI-Ollama",
|
||||
"created_at": "2025-03-07T04:46:28Z",
|
||||
"description": "Ollama 未授权访问【CNVD-2025-04094】验证脚本",
|
||||
"author": "PstarSec",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/KzNight/CNVD-2025-04094-ollama_unauth",
|
||||
"name": "CNVD-2025-04094-ollama_unauth",
|
||||
"created_at": "2025-03-04T07:06:13Z",
|
||||
"description": "国家信息安全漏洞共享平台(CNVD)收录了Ollama未授权访问漏洞(CNVD-2025-04094)。未经授权的攻击者可以远程访问Ollama服务接口执行敏感资产获取、虚假信息投喂、拒绝服务等恶意操作",
|
||||
"author": "KzNight",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/jmtruffa/cnvDownloader",
|
||||
"name": "cnvDownloader",
|
||||
"created_at": "2024-08-13T12:57:34Z",
|
||||
"description": "Downloader de data de CAFCI y parser de mails de FIMA",
|
||||
"author": "jmtruffa",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/Ellison-zhang/cnvd_spider",
|
||||
"name": "cnvd_spider",
|
||||
"created_at": "2025-02-12T05:59:31Z",
|
||||
"description": null,
|
||||
"author": "Ellison-zhang",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/phtcloud-dev/CVE-2024-36837",
|
||||
"name": "CVE-2024-36837",
|
||||
"created_at": "2024-06-15T16:44:51Z",
|
||||
"description": "CVE-2024-36837 | CNVD-2024-30128 POC",
|
||||
"author": "phtcloud-dev",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/phtcloud-dev/CVE-2024-39199",
|
||||
"name": "CVE-2024-39199",
|
||||
"created_at": "2024-06-18T16:36:12Z",
|
||||
"description": "CVE-2024-39119 | CNVD-2024-31551 POC",
|
||||
"author": "phtcloud-dev",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/shagongz/CNVD_Crawler",
|
||||
"name": "CNVD_Crawler",
|
||||
"created_at": "2025-02-05T07:28:32Z",
|
||||
"description": "CNVD的简单爬虫",
|
||||
"author": "shagongz",
|
||||
"language": null,
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/liuguolong139/CNVD-2024-33023",
|
||||
"name": "CNVD-2024-33023",
|
||||
"created_at": "2025-01-16T04:46:44Z",
|
||||
"description": "CNVD-2024-33023 Python poc",
|
||||
"author": "liuguolong139",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/j8agent/CNVD-2024-15077--AJ-Report-RCE--",
|
||||
"name": "CNVD-2024-15077--AJ-Report-RCE--",
|
||||
"created_at": "2024-12-21T08:26:43Z",
|
||||
"description": "CNVD-2024-15077 AJ-Report 中swagger-ui的RCE漏洞",
|
||||
"author": "j8agent",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/must-bioinfo/fastCNVdata",
|
||||
"name": "fastCNVdata",
|
||||
"created_at": "2024-07-17T14:38:38Z",
|
||||
"description": "Datasets to run the vignettes of the R package fastCNV",
|
||||
"author": "must-bioinfo",
|
||||
"language": "R",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/XiaomingX/CNVD-2020-10487-Tomcat-Ajp-lfi",
|
||||
"name": "CNVD-2020-10487-Tomcat-Ajp-lfi",
|
||||
"created_at": "2024-12-08T04:14:03Z",
|
||||
"description": "Tomcat-Ajp协议文件读取漏洞",
|
||||
"author": "XiaomingX",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/lizhianyuguangming/TomcatScanPro",
|
||||
"name": "TomcatScanPro",
|
||||
"created_at": "2024-08-29T06:38:16Z",
|
||||
"description": "tomcat自动化漏洞扫描利用工具,支持批量弱口令检测、后台部署war包getshell、CVE-2017-12615 文件上传、CVE-2020-1938/CNVD-2020-10487 文件包含",
|
||||
"author": "lizhianyuguangming",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/GoesM/ROS-CVE-CNVDs",
|
||||
"name": "ROS-CVE-CNVDs",
|
||||
"created_at": "2024-11-04T07:55:51Z",
|
||||
"description": "record and public CVE/CNVD IDs discovered by my works",
|
||||
"author": "GoesM",
|
||||
"language": null,
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/xiadaogit/CNVD-",
|
||||
"name": "CNVD-",
|
||||
"created_at": "2024-10-30T07:13:00Z",
|
||||
"description": "CNVD挖的多了",
|
||||
"author": "xiadaogit",
|
||||
"language": null,
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/sxq2003/CNVD-2022-10270",
|
||||
"name": "CNVD-2022-10270",
|
||||
"created_at": "2024-10-21T08:01:28Z",
|
||||
"description": null,
|
||||
"author": "sxq2003",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/leonooo13/CNVD-2020-10487-Tomcat-Ajp-lfi",
|
||||
"name": "CNVD-2020-10487-Tomcat-Ajp-lfi",
|
||||
"created_at": "2024-09-27T17:05:09Z",
|
||||
"description": null,
|
||||
"author": "leonooo13",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/Bin4xin/bigger-than-bigger",
|
||||
"name": "bigger-than-bigger",
|
||||
"created_at": "2021-04-16T01:33:26Z",
|
||||
"description": "Expolit Lists. 相关集合💥💥💥 ;) 用友NC反序列化/ CTF/ Java Deserialization/Shiro Vulns/ CNVD or CVE Vulns/ Log4j2/ Hikvision-decrypter...✨✨✨",
|
||||
"author": "Bin4xin",
|
||||
"language": "Java",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/OceanSec/cnvdtools",
|
||||
"name": "cnvdtools",
|
||||
"created_at": "2024-09-11T02:50:32Z",
|
||||
"description": "通过fofa批量查询通用系统,配合去刷cnvd证书",
|
||||
"author": "OceanSec",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/kingqaquuu/CNVDspider",
|
||||
"name": "CNVDspider",
|
||||
"created_at": "2024-08-06T10:16:12Z",
|
||||
"description": "爬取CNVD共享漏洞文件",
|
||||
"author": "kingqaquuu",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
},
|
||||
{
|
||||
"link": "https://github.com/youxox/SeeYouOA-POC",
|
||||
"name": "SeeYouOA-POC",
|
||||
"created_at": "2024-05-12T11:45:28Z",
|
||||
"description": "致远OA ajax.do 任意文件上传漏洞检测 CNVD-2021-01627 ",
|
||||
"author": "youxox",
|
||||
"language": "Python",
|
||||
"keyword": "cnvd"
|
||||
}
|
||||
]
|
@ -1,8 +0,0 @@
|
||||
[
|
||||
{
|
||||
"link": "https://github.com/BeichenDream/Godzilla/releases/tag/v4.0.1-godzilla",
|
||||
"published_at": "2021-11-01T08:54:13Z",
|
||||
"author": "BeichenDream",
|
||||
"keyword": "BeichenDream/Godzilla"
|
||||
}
|
||||
]
|
@ -1,11 +0,0 @@
|
||||
[
|
||||
{
|
||||
"link": "https://api.github.com/BeichenDream/Godzilla",
|
||||
"name": "BeichenDream/Godzilla",
|
||||
"updated_at": "2023-03-07T07:33:10Z",
|
||||
"description": "Update README.md",
|
||||
"author": "beichen",
|
||||
"link_2": "https://github.com/BeichenDream/Godzilla/commit/a5558e6c37139ebb0b7b4491dc3ea7ce8d8f9e49",
|
||||
"keyword": "BeichenDream/Godzilla"
|
||||
}
|
||||
]
|
@ -1,11 +0,0 @@
|
||||
[
|
||||
{
|
||||
"link": "https://github.com/su18/POC",
|
||||
"name": "POC",
|
||||
"created_at": "2023-01-08T01:56:47Z",
|
||||
"description": "收集整理漏洞EXP/POC,大部分漏洞来源网络,目前收集整理了1400多个poc/exp,长期更新。",
|
||||
"author": "su18",
|
||||
"language": null,
|
||||
"keyword": "su18"
|
||||
}
|
||||
]
|
@ -1,122 +0,0 @@
|
||||
[
|
||||
{
|
||||
"title": "安全通告 - 涉及华为全屋音乐系统产品的路径穿越漏洞",
|
||||
"pubDate": "2024-12-11T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-ptvihhms-91f7c6fa-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 华为全屋音乐系统路径穿越漏洞",
|
||||
"pubDate": "2024-06-19T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-ptvihhms-20747ba3-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及部分华为家庭路由器的连接劫持漏洞",
|
||||
"pubDate": "2024-06-19T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-chvishhr-d616b19e-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为部分家庭路由产品的连接劫持漏洞",
|
||||
"pubDate": "2024-04-24T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-chvishhr-d50dedde-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为智能音箱部分产品的内存溢出漏洞",
|
||||
"pubDate": "2024-04-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-samovishss-28e21e39-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为PC部分产品的内存缓冲区边界操作限制不当漏洞",
|
||||
"pubDate": "2024-04-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-hppvtiroowtboamb-bb3261bd-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为终端PC部分产品接口权限控制不当的漏洞",
|
||||
"pubDate": "2024-04-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-iiacviahpp-71ce77ee-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为终端PC部分产品异常条件检查不当的漏洞",
|
||||
"pubDate": "2024-04-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-hppvticfuoec-8ffde288-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为终端PC部分产品对参数长度不一致的处理不当漏洞",
|
||||
"pubDate": "2024-04-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-iholpiiahpp-0ab7d6db-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为终端PC部分产品接口权限控制不当的漏洞",
|
||||
"pubDate": "2024-04-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2024/huawei-sa-voiiaciahpp-6376e0c7-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为终端智慧屏部分产品的身份认证绕过漏洞",
|
||||
"pubDate": "2023-12-06T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-ibvishssp-4bf951d4-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为路由器产品的流量劫持漏洞",
|
||||
"pubDate": "2023-05-17T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-thvihr-7015cbae-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为某打印机产品的系统命令注入漏洞",
|
||||
"pubDate": "2023-04-26T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-sciviahpp-6bcddec5-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为HiLink AI Life产品的身份认证绕过漏洞",
|
||||
"pubDate": "2023-04-26T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-iabvihhalp-ea34d670-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为某打印机产品的对输入的错误解析类漏洞",
|
||||
"pubDate": "2023-04-26T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-moivihp-2f201af9-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为某打印机产品的对输入的错误解析类漏洞",
|
||||
"pubDate": "2023-04-26T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-moivihp-73cabdde-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为某音箱产品的越界写入漏洞",
|
||||
"pubDate": "2023-03-01T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-oobwviatp-89e403d4-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "关于E5573Cs-322产品存在拒绝服务漏洞的声明",
|
||||
"pubDate": "2023-02-10T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-notices/2021/huawei-sn-20230210-01-dos-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为儿童智能手表(Simba-AL00)的身份认证绕过漏洞",
|
||||
"pubDate": "2023-02-08T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-iabvithcswsa-c385b2dc-cn",
|
||||
"description": null
|
||||
},
|
||||
{
|
||||
"title": "安全通告 - 涉及华为全屋智能某软件的不正确的权限分配漏洞",
|
||||
"pubDate": "2023-02-01T00:00:00",
|
||||
"link": "//www.huawei.com/cn/psirt/security-advisories/2023/huawei-sa-ipavihwhis-1556afc2-cn",
|
||||
"description": null
|
||||
}
|
||||
]
|
@ -1,72 +0,0 @@
|
||||
[
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4191",
|
||||
"title": "从域认证协议以及密码凭据机制的角度来看内网渗透",
|
||||
"description": "本文记录了内网渗透中主机之间的认证以及横向,域渗透相关的协议以及思路的多种方式,",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-14 09:00:00"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4181",
|
||||
"title": "XSS防御-揭秘Unicode溢出与CSP Bypass",
|
||||
"description": "Unicode溢出与CSP Bypass",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-13 09:00:01"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4170",
|
||||
"title": "一次渗透过程中的CVE-2022-45460撞洞RCE",
|
||||
"description": "在一次渗透中我们遇到了雄迈(XiongMai)的uc-httpd,这是一款被全球无数网络摄像机使用的轻量级Web服务器。根据Shodan的数据,大约有7万个该软件的实例在互联网上公开暴露。尽管这款软件存在严...",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-12 09:00:02"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4190",
|
||||
"title": "记一次某大厂csrf漏洞通过蠕虫从低危到高危",
|
||||
"description": "本文记载了笔者src漏洞挖掘的经历,如何将一个简单的csrf提高至高危的程度",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-11 09:00:00"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4168",
|
||||
"title": "掌握Django隐秘漏洞:构建内存马,实现命令执行",
|
||||
"description": "内存马作为一种常见的攻击与权限维持手段,往往多见于Java Web应用中,Django在日常开发中使用频率较高的框架,今天来探寻在Python Web场景下的内存马",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-10 17:38:25"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4134",
|
||||
"title": "使用分支对抗进行webshell bypass",
|
||||
"description": "使用分支对抗进行webshell bypass",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-10 11:17:55"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4162",
|
||||
"title": "论如何从发现者视角看 apache solr 的 js 代码执行漏洞",
|
||||
"description": "平时分析和复现了很多 cve,但是一遇到逻辑稍微复杂的,漏洞通告给的位置不是很详细的,代码 diff 很冗杂的,分析起来就会很困难,然后这时候其实就是需要耐心和思维逻辑了,这次花了接近一周的时间来了解这个漏洞,其实这个漏洞倒是不重要,就是逼着自己去锻炼思维和看官方文档的能力,让自己尽量接近发现者的视角,虽然这个漏洞很老,但是我还是感觉发现它的人真的很厉害,前后的分析过程也是花费了整整一周",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-10 10:00:01"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4171",
|
||||
"title": "vaadin反序列化链挖掘:tabby静态分析实践",
|
||||
"description": "在学习前面几条链子的基础上,结合静态分析工具在前面的基础上的一些小发现,包括vaadin的新利用方式以及对tabby的检测缺陷的总结",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-07 09:00:01"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4178",
|
||||
"title": "Tomcat内存马之Upgrade构建调试分析",
|
||||
"description": "在现今攻防演练日趋常态化和网络安全检测设备检测技术越来越成熟的大环境下,传统的以文件形式驻留的后门文件极其容易检测查杀到,随之\"内存马\"技术开始登上历史的舞台。在JAVA安全知识体系中JAVA内存马也是必须要学习的一个关键板块,本篇文章主要介绍Tomcat-Upgrade型内存马",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-06 09:00:02"
|
||||
},
|
||||
{
|
||||
"guid": "https://forum.butian.net/share/4173",
|
||||
"title": ".Net Core下的内存马",
|
||||
"description": "在审计了一套.net core的CMS后的扩展延伸",
|
||||
"source": "subject",
|
||||
"pubDate": "2025-03-05 09:00:00"
|
||||
}
|
||||
]
|
@ -1,122 +0,0 @@
|
||||
[
|
||||
{
|
||||
"title": "机器学习的逻辑回归模型\n",
|
||||
"link": "https://paper.seebug.org/3303/",
|
||||
"description": "\n\n\n .katex img {\n display: block;\n position: absolute;\n width: 100%;\n height: inherit;\n }\n\n作者:0x7F@知道创宇404实验室\n日期:2025年2月28日\n1. 前言\n在「机器学习的线性回归模型」文章中,我们学习了监督学习中如何使用线性回归模型拟合连...\n",
|
||||
"pubDate": "Thu, 13 Mar 2025 07:37:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3303/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最憋屈的漏洞披露\n",
|
||||
"link": "https://paper.seebug.org/3304/",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/Y8-wT88VnLeMUiD-HssPyw\n在网络安全领域,漏洞披露一直被视为保护用户的重要环节,但在现实中,这一过程却充满了争议和矛盾。究竟什么才算得上“负责任的披露”?当厂商在信息公开和补丁发布上占据主导地位,而安全研究者则需要耗费大量精力进行沟通与博弈,这一模式是否还能真正实现保护用户安全的初衷?...\n",
|
||||
"pubDate": "Wed, 12 Mar 2025 08:28:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3304/",
|
||||
"category": "经验心得"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最“安全”的防线\n",
|
||||
"link": "https://paper.seebug.org/3302/",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/LaM5iz_EKbAK_lkaAcBshw\n在攻防对抗日益激烈的2024年,安全软件一直被视为企业安全防线的重要基石。然而,这些安全软件本身也可能存在漏洞,甚至被攻击者利用作为入侵的跳板来对用户造成危害。多年来,因为安全软件而导致的事故不禁让人产生一个疑问——安全软件真的可信吗?\n安全软件被滥用为攻击工...\n",
|
||||
"pubDate": "Tue, 11 Mar 2025 08:39:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3302/",
|
||||
"category": "经验心得"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最难以阻挡的攻防趋势\n",
|
||||
"link": "https://paper.seebug.org/3301/",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/lUA03YjBiCAatcJh-bUHEQ\n近年来,漏洞攻防不断演进。从多年前仅需一个栈溢出就能攻破系统,到如今需要运用各种精妙的手法来突破系统的层层防御。“盾”与“矛”始终处于动态对抗:每当新的防御措施出现,新的攻击手段随之而来。防御机制的升级促使攻击者寻找新的突破口,而攻击方法的创新又推动着防御技术...\n",
|
||||
"pubDate": "Mon, 10 Mar 2025 08:19:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3301/",
|
||||
"category": "经验心得"
|
||||
},
|
||||
{
|
||||
"title": "机器学习的线性回归模型\n",
|
||||
"link": "https://paper.seebug.org/3300/",
|
||||
"description": "\n\n\n .katex img {\n display: block;\n position: absolute;\n width: 100%;\n height: inherit;\n }\n\n作者:0x7F@知道创宇404实验室\n日期:2025年2月28日 \n1. 前言\n跟随着 ChatGPT 等大语言模型掀起的人工智能的浪潮,在这个时间点学习 A...\n",
|
||||
"pubDate": "Fri, 07 Mar 2025 07:22:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3300/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "Llama 的悖论:深入探索 Llama.cpp 的堆迷宫,从堆溢出到远程代码执行\n",
|
||||
"link": "https://paper.seebug.org/3299/",
|
||||
"description": "作者:Patrick Peng \n译者:知道创宇404实验室翻译组\n原文链接:https://retr0.blog/blog/llama-rpc-rce\n我一直对 Llama.cpp 情有独钟,它堪称我在人工智能与机器学习研究领域孜孜以求的“终极目标”。不仅如此,能在如此复杂且成熟的人工智能项目中挖掘出堆栈/堆溢出导致的远程代码执行漏洞,听起来就格外酷炫。当然,我内心深处渴望在人工智能项目中...\n",
|
||||
"pubDate": "Thu, 06 Mar 2025 06:27:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3299/",
|
||||
"category": "漏洞分析"
|
||||
},
|
||||
{
|
||||
"title": "Emoji攻击:增强针对Judge LLMs检测的越狱攻击\n",
|
||||
"link": "https://paper.seebug.org/3297/",
|
||||
"description": "作者:Zhipeng Wei, Yuqi Liu, N. Benjamin Erichson\n译者:知道创宇404实验室翻译组\n原文链接:https://arxiv.org/html/2411.01077v2\n摘要\n越狱(Jailbreaking)技术可以欺骗大型语言模型(LLMs),使其生成受限制的输出,从而构成严重威胁。其中一种防御方法是使用另一个 LLM 作为 Judge(裁判)来评估...\n",
|
||||
"pubDate": "Tue, 04 Mar 2025 09:37:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3297/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "模型序列化攻击\n",
|
||||
"link": "https://paper.seebug.org/3298/",
|
||||
"description": "译者:知道创宇404实验室翻译组\n原文链接:https://github.com/protectai/modelscan/blob/main/docs/model_serialization_attacks.md\n机器学习(ML)模型是基于机器学习的应用程序的核心资产。安全地存储和检索模型对成功至关重要。根据使用的机器学习库,模型可以以多种常见格式保存。流行的选择包括:Pickle、HDF5...\n",
|
||||
"pubDate": "Tue, 04 Mar 2025 07:09:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3298/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "关于 Chat Template 注入方式的学习\n",
|
||||
"link": "https://paper.seebug.org/3296/",
|
||||
"description": "作者: dawu@知道创宇404实验室\n日期: 2025年2月28日 \n1. 前言\n伴随着年后 DeepSeek R1 模型的火热,号称能运行 DeepSeek R1 “满血版” 的 Ktransformers 框架也受到了大量关注。在使用该框架和阅读相关源码时,我发现框架在借助聊天模版(chat template) 将用户输入转化为输入模型的 token 列表的过程中,可能会存在类似于拼...\n",
|
||||
"pubDate": "Mon, 03 Mar 2025 06:35:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3296/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "从零开始搭建:基于本地 DeepSeek 的 Web 蜜罐自动化识别\n",
|
||||
"link": "https://paper.seebug.org/3295/",
|
||||
"description": "作者:wh0am1i@知道创宇404实验室\n日期:2025年2月28日 \n1. 前言\npocsuite3 框架可以通过 --dork 或 --dork-zoomeye 参数获取 ZoomEye 网络空间测绘平台的搜索引擎数据。但随着近几年网络空间领域的攻防对抗升级,导致网络空间中存在大量的蜜罐。为了过滤掉这些蜜罐,ZoomEye 中加入了自动标注蜜罐的识别算法, 同时 pocsuite3 ...\n",
|
||||
"pubDate": "Fri, 28 Feb 2025 06:18:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3295/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "DeepSeek 启示:深度揭秘基于 PTX 的 GPU 底层优化技术\n",
|
||||
"link": "https://paper.seebug.org/3294/",
|
||||
"description": "作者:启明星辰ADLab\n原文链接:https://mp.weixin.qq.com/s/FVVes7UIK_OORUk3fXy9mQ\n一、概述\n近日,DeepSeek连续不断地开源了多个项目,一时间引发了关于GPU底层优化的热潮,这在如今国内算力被广泛打压的背景下,给我国在现代高性能计算(HPC)和人工智能(AI)领域带来了希望,其中尤其引人瞩目的是关于底层PTX优化技术引入,这在一定程度...\n",
|
||||
"pubDate": "Thu, 27 Feb 2025 07:24:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3294/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "银狐突袭!DeepSeek本地化部署暗藏“致命陷阱”\n",
|
||||
"link": "https://paper.seebug.org/3293/",
|
||||
"description": "作者:启明星辰ADLab\n原文链接:https://mp.weixin.qq.com/s/VUzwaR7eti2YoNebGFz80A\n一、前言\n近期,国产大模型DeepSeek凭借其高效的推理能力、创新性的优化技术、低门槛本地化部署能力、灵活的开源商业授权等,迅速成为开源生态中的“现象级选手”。然而,技术普及的加速期往往伴随着网络安全攻防对抗的升级。当前,大量政府、企业和个人开发者在基于D...\n",
|
||||
"pubDate": "Thu, 27 Feb 2025 02:47:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3293/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "使用 DeepSeek-R1 在固件漏洞挖掘领域的新实践\n",
|
||||
"link": "https://paper.seebug.org/3292/",
|
||||
"description": "作者:启明星辰ADLab\n原文链接:https://mp.weixin.qq.com/s/rZ4iGXs2O_xYD1yEOyu3CQ\n1. 前言\n在数字化时代,固件是硬件设备的核心软件组件,直接控制着硬件的运行状态和功能,其安全性至关重要。一旦固件存在安全漏洞,黑客即可利用来攻击设备的运行或者控制设备发起其它网络攻击,典型有Mirai病毒利用设备固件漏洞发起大规模的分布式拒绝服务。因此,挖...\n",
|
||||
"pubDate": "Wed, 26 Feb 2025 07:20:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3292/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "Fuzz 工作流解析与 AI 引入方案分享\n",
|
||||
"link": "https://paper.seebug.org/3291/",
|
||||
"description": "作者:ghost461@知道创宇404实验室\n时间:2025年2月26日\n本文为知道创宇404实验室内部分享沙龙“404 Open Day”的议题内容,作为目前团队AI安全研究系列的一部分,分享出来与大家一同交流学习。\n1. 概述\n本文受 Google 安全博客的《Leveling Up Fuzzing: Finding more vulnerabilities with AI》启发,结合自...\n",
|
||||
"pubDate": "Wed, 26 Feb 2025 06:10:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3291/",
|
||||
"category": "AI安全"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最悲剧的后门\n",
|
||||
"link": "https://paper.seebug.org/3290/",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/BZtSTpTQbNiAY_KDhnqc8Q\n“看到了软件的源码,就意味着没有后门吗?”\n1983年的图灵奖颁奖仪式上,Ken Thompson抛出了这个问题。作为历史上唯三在40岁以下获得图灵奖的传奇之一,他在获奖演讲中向听众展示了如何通过在编译器中植入后门来骇入由无害源码编译得到的Unix系统。Ken...\n",
|
||||
"pubDate": "Tue, 25 Feb 2025 09:17:00 +0000",
|
||||
"guid": "https://paper.seebug.org/3290/",
|
||||
"category": "经验心得"
|
||||
}
|
||||
]
|
@ -1,413 +0,0 @@
|
||||
{
|
||||
"银行测试": [
|
||||
{
|
||||
"title": "一周内连续三家美国银行“爆雷”!会否演变成金融危机?",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd9eGY9uACgt2whpM3uArsKJhtPcW3yngI2os4opoqkJ3CVlyQRDaV_HvuZGgEiqH5qWVyu8f-CdizGGuzUBaUw7bsimoDXdO0tkjwoWmP-IR9FiZxR7Rc1qNIqBowcxeVnIZeM8ubsGmWg6T-TWZRp5hMz8sMk5-v1orwBepw7bhs5eBgmN3LoYQ..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "“压力测试本是帮助银行评估资产风险的有效手段,这(监管“松绑”)为硅谷银行的关闭埋下了伏笔.”新加坡国立大学客座教授白...",
|
||||
"author": "新华网思客",
|
||||
"pubDate": "2023-03-16 10:44:22"
|
||||
},
|
||||
{
|
||||
"title": "工商银行福建自贸试验区平潭片区分行、福州分行、福州鼓楼支行被处罚 累计罚款130万元",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd9_kxI_VvZmKgIBPWuqWqxGjP3L13Sx5Z8ue1Bt6fMWTNbF8uHcSw7yotWKb45hPYOaO6s4gjlb4BSJWEIov6vVWlkKRxOU5zRnkoYXaXVF4CL4XDiNBnzLCkPG3h6guywoth2eDg90PDqC7YyxYWm08OGcMk1MyMvIg8f5XKwm5pFH6In5Ei3zg..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "近日,福建省银保监局对工商银行福建自贸试验区平潭片区分行、福州分行、福州鼓楼支行开出罚单,罚款合计130万元,4名当事人被...",
|
||||
"author": "观八闽",
|
||||
"pubDate": "2022-02-22 15:30:56"
|
||||
},
|
||||
{
|
||||
"title": "银行月榜:大行拼命玩“七夕”,微博为何失宠了?",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd9IchiyQiq6LeEKaAPMU9juA1bCFHqCk42rdC7dGu5J0TJV_TSWviegeqZ9YXMeCE_1wsqouY29bLxCPTCe8uqEk8CV1BaKlRyHJGOUCh3xLg9XozB208ctDIH93tc2FnHL_p4NJMsWg5LVTThT-sYBgI8wmJ55I-ygjm-qJq0CU9flztgI7RZ1g..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "新媒体管家中国银行业新媒体8月排行榜,进入总榜TOP10的银行分别是:中国工商银行、中国银行、中国建设银行、上海浦东发展银...",
|
||||
"author": "人民网舆情数据中心",
|
||||
"pubDate": "2017-09-14 08:16:46"
|
||||
},
|
||||
{
|
||||
"title": "【月榜】12月银行新媒体:工行成功问鼎 上海银行挤进前10",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAvgZg6-4mCHKVgrFeYQugDlpmUNjkvxgvOqXyesYm_zYIpLvlCDM0AmAb0chvsD2fNyhCa8My6Bb-qjlExxIFttyhUQaZsCVtv3xb71Sa6r9ZTma9nR-jBnBcq7_vYLV53c1tpARGY_wMmV95nnREF-XH7MSZGz6MxI276v7hj8etuA22uSlmmQLGdQeR7pI3fwC5XTKkq9kDNJdxFew8RNmF5J1xVuqKMCAHGR_7TST1Ck-cB6ZhGHapdNWZDDb-iZqwg0yoRFw.&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "本榜单共对部分国内银行12月份的新媒体综合能力进行考核,涵盖包括政策性银行、邮政储蓄银行、国有商业银行、股份制商业银行、...",
|
||||
"author": "人民网舆情数据中心",
|
||||
"pubDate": "2017-01-12 17:06:08"
|
||||
},
|
||||
{
|
||||
"title": "美国又一银行倒闭!美联储怎么办?中国受影响大吗?",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd9eGY9uACgt2whpM3uArsKJhtPcW3yngI2os4opoqkJ3CVlyQRDaV_Hro8hmfPwsD9irSLU7ZTXQZPusXiTVPor0eS9LIJKhnse38AsvaT-nG6hJL6b8Kzeyje4PArh_xRW1V5Suf8pEzooHBWUQT7cxZpbLyIjptUldFTpL_yObZ6VKrzu_4XKA..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "规定资产超过500亿美元的银行必须参加美联储年度压力测试,旨在通过更严格监管避免2008年国际金融危机重演.特朗普上台后,将...",
|
||||
"author": "新华网思客",
|
||||
"pubDate": "2023-05-05 13:51:35"
|
||||
},
|
||||
{
|
||||
"title": "支付宝微信拉响警报!40多家银行联合起来,要“抢”你手机",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd9-0BJzlLy1eTjFD1JRuvsfpVuBnJzdO4GM_We8LBGBZfzv5nkrpRBB0MErXwD6mYx_6V1D09fTT_5d3JnQMhdgHrYwSoI_oc0AiMVx1lwOJ1rVNI_Jhpps3az_iRjW0e4QuAW_QYdi8_rH0mz8XQ2U0luG9iCLg784j_DiAYpueDYl_Q5RRZQjg..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "招商银行等全国性商业银行,另有近60家商业银行正在加紧测试并即将开通,年内其他主要银行也将基本实现全部开通.受理方面,全...",
|
||||
"author": "人民网",
|
||||
"pubDate": "2017-05-29 08:02:43"
|
||||
},
|
||||
{
|
||||
"title": "一家银行最多8个APP!功能交叉重叠,是时候该瘦身了……",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd994RykCd99wpOEkXvzxCBzIVUS1LA4FKRqdNCxaFpwnfejFPgpux26ggsJHZMa7xJ7gsX7ZN6JdPWaYdBoLjRwY9SIttIWfKJ4tvsU0VTsoST1rCBrLSNNpFWMnV6TSSUZZaKVHYlDmU51kteFU4c75kSP8zcYxYIrJ-Xg-ls-jvzAjcIGepUqA..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "“你想买理财产品的话,请先下载注册我们银行的APP.”每当走进银行,这样的场景极为常见.近年来,为了增加获客,手机APP成...",
|
||||
"author": "中国网财经",
|
||||
"pubDate": "2019-06-14 17:18:12"
|
||||
},
|
||||
{
|
||||
"title": "今年银行保险业监管工作14大要点:坚决落实“房住不炒”要求 深入推进网络借贷专项整治……",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-31xeF5tPKwMYK6EhXVOSA6VqXa8Fplpd994RykCd99wpOEkXvzxCBzIVUS1LA4FKRqdNCxaFpwnfejFPgpux26sA3XGUDtx3axmAHlXnZgn7rN8UZh4aW0K-vLb1GPNhF2FXQ3glcrc5YLGgLbZ69GCWpbNclo9q8uWawWGL3Do-Kq9tdkvf-V7gbltH5y0CEk6ESiMI9-6w89kyxDwoXvg..&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "稳妥处置高风险机构,压实各方责任,全力做好协调、配合和政策指导.继续拆解影子银行,特别要大力压降高风险影子银行业务,防止死灰复燃.坚决落实“房住不炒”要求,严格执行授信集中度等监管规则,严防信贷资金违规流入房地产领域.",
|
||||
"author": "中国网财经",
|
||||
"pubDate": "2020-01-12 13:33:01"
|
||||
},
|
||||
{
|
||||
"title": "惊人 | 手机这样充电严重泄露隐私 1秒操控你的银行账户",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAvgZg6-4mCHKVgrFeYQugDhBEf4EF8oKrfbCgxSgKqyUQcR05EK0k2hs0mar4IMdiYNuh71rRq0eFifmgfhkzbK3MsPyC4ya4w3uOr8wpkTZe-rcwPrNFQINVjsV5vJ1wOlHEOuNWsLsxmGHQK1jyCZ6MwAG9p7EODSTxKXCJbgrpZDj-zG_ndQ3GsP0o8f2FtAn0-35eJ8OzP63VZ-EaTF4-aXtL55m17xploZKyLyaRGHxSWNMLU7g3Ftgn3b4uiZqwg0yoRFw.&type=2&query=%E9%93%B6%E8%A1%8C%E6%B5%8B%E8%AF%95&token=4B41706ADC842F9947407703731705C747D32AAD67D3A540",
|
||||
"description": "但你要小心了,如果不谨慎,一秒就可能控制你的银行账户!测试:手机用充电桩可被操控央视记者做了一个测试,曝光了不法分子通...",
|
||||
"author": "央视新闻",
|
||||
"pubDate": "2017-04-16 13:37:16"
|
||||
}
|
||||
],
|
||||
"APP逆向": [
|
||||
{
|
||||
"title": "AndroidApp常见逆向工具和使用技巧",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAnkQk5xkE8zWVgrFeYQugDrGFFTyF4j-fIHKmKiWmh_gT1RIk9nIJTomqza81rARJOjZaCXpGyzZr8ZRNe7_PnoyTi_CaSvQnwfm9fgyvvBMGMaUdyBm9-rIkYKlAX-Dj9vW8_i_qrPyk_5Ok-VIGL8Puv9ti7dcGDU1CviXYnFzuSNq_fyLpgrGOxwXysI1AR0NI7jhJYTMVcz7PJUxIxodsB_IuTowGyZv6b-_QmuEJE4oYD-Hd2y51bNkKRyRNiZqwg0yoRFw.&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "前言本文将主要介绍个人在AndroidApp逆向分析时常用到的一些工具和小技巧.说起Android 逆向,就不得不提到常用的逆向分析神...",
|
||||
"author": "黑白之道",
|
||||
"pubDate": "2016-10-26 10:17:15"
|
||||
},
|
||||
{
|
||||
"title": "记某APP登录逆向解密过程",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9dW5oQAMZhc7ZBqfiMFLXG0GQTv2lk_XvxV5bo6L_2VOd4t-r5x3pbI1Gx3EPaC8OJkaDwKAihuibfqYjIBScgTBgSQR65GHD1ovgvuYrz1SLBPf7pGpZz4oa7gW5DCyVlBmNg_TQcN2-Xhwn-8fSxrOrI95WfXBN3EzZ8pTvy0INGbbB75bUeA..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "0x00 前言最近在学习APP逆向相关的知识,刚好拿到了一个APP目标,该APP登录过程存在加密,所以记录下逆向破解的过程.0x01 ...",
|
||||
"author": "黑白之道",
|
||||
"pubDate": "2024-05-03 08:36:47"
|
||||
},
|
||||
{
|
||||
"title": "FlutterAPP逆向实践",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9J_zVaWw2uFg686rt6ZvNVl60K0aBaZDqdFQVXjiv0XhcM1gIerRkPxIxT4lKFS5XT7GwdtE9H4nLgwu6ohgaLTmGcpSyTO8mBlZ-8ML7pptw4tAT8AJhUJTN8HLoTdsqo5mo5LofbMG1GVImin52YaRs1GYXibKaKgMw5X68IbItPujwwRB2Pw..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "本文为看雪论坛优秀文章看雪论坛作者ID:Imyang很长一段时间对于Flutter的app逆向都比较头疼,它不像纯Java app那样可以使用jadx-...",
|
||||
"author": "看雪学苑",
|
||||
"pubDate": "2022-07-21 17:59:03"
|
||||
},
|
||||
{
|
||||
"title": "一文了解安卓APP逆向分析与保护机制",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9PohLElZHBTPQonqCfZ0TtAmg5tVFTq0IqC9Rtf6vksxuBUsHWIRCh-UHGD48L7-I7DWkXnEsIObYXDBg3HYEMXqu0K6h8xhcc62DSq_lv4XrzZVrB48gYRCjyCMepFYVz4yijIGRhQ0g40xftK4fVFS2KAtKzPeWCeu4Cz_SU18tPujwwRB2Pw..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "安卓APP逆向保护作为开发工作中的重要内容,一直是网易云易盾致力于提供的应用服务.“后续,我们将在SO加密保护方面进行更...",
|
||||
"author": "FreeBuf",
|
||||
"pubDate": "2018-03-31 18:12:34"
|
||||
},
|
||||
{
|
||||
"title": "鸿蒙APP逆向分析工具和方法",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd96k-G4vgcspPLYU-OdVbivgE_1CqqMF6EOxcfbY4fKS8ON2lobS7MG9GkIaxxwqKhQfj3i8aWjoLflkGcsoJz5Yx2qNurMgWx40Et_0YV0tuvMTeUdWc2sGljxh1T3xgl7amCkbHc5mEEEJl7le_KnBGLfqHxFcxgZqH1DD98IO654z_tGSZTqA..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "鸿蒙APP逆向分析工具和方法需要结合专用工具与开发环境特性,以下从工具选择、分析流程及注意事项进行详细说明一、逆向分析工...",
|
||||
"author": "哆啦安全",
|
||||
"pubDate": "2025-03-03 07:03:21"
|
||||
},
|
||||
{
|
||||
"title": "APP逆向神器之Frida【Android初级篇】",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9c9ru1dp7EGcNRWc7m9Vto2jfuvCS_Mpc9MSOn0VU2l0FC8Zx3aXpX0UJ2-YXO-jeeL7GMcDHdlao26PENFpEby4g9Zv-Q3ZdqXO1gHmfrrNnzI8NoDM7cHXc_aYfqQL-sRWvLKG59mTHAJVAOjd33gOjee0gAZukCiuzuct1FnhhWLv6O878UA..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,...",
|
||||
"author": "NightTeam",
|
||||
"pubDate": "2019-07-03 09:00:11"
|
||||
},
|
||||
{
|
||||
"title": "对某数藏类app逆向安全分析",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9lXcNX9AOOoTm4CBrpf0a-sBoRZk4Hd4NMf3NFX_hTnPUBFDO-H4INSEcbjxWPpdnBn-AZglZbicNTigYbg2H7qdRL4o9ns-lYIMjPuIxF33xHcrOROK0Ryt7VpTw8LTTZmvGGaQd2pfwj2ErCUI2wmyPNzVj_SyltmhBVT1n_jDm0CtGSSkZQQ..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "对uni-app开发的某app逆向分析不过今天这个app有点不同,我感觉是值得记录的,所以准备再写一篇有关这个的分析首先,打开这个...",
|
||||
"author": "编角料",
|
||||
"pubDate": "2023-03-10 18:32:22"
|
||||
},
|
||||
{
|
||||
"title": "APP逆向系列(一)",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9tUUp5U1amv6rVz_XTmtn0mdOmyG1nqM9oBM4n5C4uAvylPx-49SZoEBhA0b-zBpJsQFk04s6KlDA8AmsqNP4xzefHWP558a5M8BSkLIq_ZaLBrBb6kiIh2RwFHCc_BXVZFugczBJ9VuB_J4lMJKtsrqe2XulivXNeVfmKyOIKAl5LU3lqtPw9g..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "APP逆向系列(一)最近在解决APP逆向问题,之前都是不系统的学习,知道工具,知道hook,但是跟某些金融比起来还是差点意思...",
|
||||
"author": "呼啦啦安全",
|
||||
"pubDate": "2024-04-17 21:59:21"
|
||||
},
|
||||
{
|
||||
"title": "好用的APP逆向工具",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9uOgbmr5Xs6SFGTkWWTq1dNh66X-qAb5cKLOT1QvVslrpp4a4I0-m6j9v9f8cIyfgBPGHNfUgAPQE7f2t1-x9mZihVVB2ngV9kemhL-3At65I3PA5-zIKti84ioUpdJtGEgNkWYF66san6mCWt711PMRU6aMXJ2QQ0uW6HRm-x3UHpHkoPMgL3A..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "从此APP逆向快人一步Apkdb概述《Android APK+Dex文件反编译及回编译工具》 简称:APKDB.是一款,针对Android OS系统APK...",
|
||||
"author": "素人一鸣",
|
||||
"pubDate": "2025-01-16 15:58:50"
|
||||
},
|
||||
{
|
||||
"title": "【APP逆向】某某租车app逆向分析",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-37YKXPxKcstoK6EhXVOSA6VqXa8Fplpd9WI9MBCWBS0I03fDVYwvSJS7gdYQF3g4s1UKXr8nlM8auXXxFDSEuay2Em97i5hnc2dq6Tx8sa55G6iNoA0zIqXpVSeLn19g1yVT4VUQfUVuda8fN42zql4tEBXYdBMqVO6TiiJTVB3N5_Zy45rSzdXDOat6dFjV5Zas3Dyx4RGjy08OLTBhW0A..&type=2&query=APP%E9%80%86%E5%90%91&token=4B41960A4215BF07D8D1E792E3746110D815985C67D3A546",
|
||||
"description": "【APP逆向】某某租车app逆向分析 背景 之前了解了fartext 魔改版的功能用法,但是一直没有合适的app用来测试,这次正好拿来练练...",
|
||||
"author": "EternalBlue",
|
||||
"pubDate": "2025-03-12 00:11:48"
|
||||
}
|
||||
],
|
||||
"渗透测试": [
|
||||
{
|
||||
"title": "200万年薪!人民网这个岗位等你来!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9-0BJzlLy1eTjFD1JRuvsfpVuBnJzdO4GM_We8LBGBZfzv5nkrpRBB2zJSH-XHxJYGg2BRycObnfKc6vqPrRScVijf9WWtRq_tjWUSCTqHZ_zcgr_WXE-m8ZMwKxJ1Y2clHKXN6HAQHSrXT6lBa2GicuNmqm54Rw3bHFnoxEXkhNflztgI7RZ1g..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "服务器及应用进行渗透测试等信息安全相关工作;3、关注最新的安全动态和漏洞信息,及时修复业务系统相关漏洞.任职资格:1、全...",
|
||||
"author": "人民网",
|
||||
"pubDate": "2018-08-03 15:22:17"
|
||||
},
|
||||
{
|
||||
"title": "中新网招新了!打工人,速来!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9m7yv2ccEJ4i5LYy3cPhwUIIrJBaPxbEK8anG_cAz9D5mdEFw6KfCJfNhbADYC1DSHZAO02gCXMIVXr3HxQG1tMPNRm05JJ8Xxu7DlEG3gq69BuoSdIny0WRCDHOB3UXzmb_wXn0lhZVVY7Wc_RgQhKchioy7-HtvNyC4S4f3mI3S-e4Yz84xMA..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "具备独立开展渗透测试的能力;2、熟悉常见Web和移动安全漏洞分析与防范,包括SQL注入、XSS、CSRF等OWASPTOP10 安全风...",
|
||||
"author": "中国新闻网",
|
||||
"pubDate": "2020-11-03 15:52:39"
|
||||
},
|
||||
{
|
||||
"title": "“徐玉玉案”涉案19岁黑客杜天禹受审 获刑6年",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9fP4Xj1QflXiE_uUOtgLs-VC7viQvoqUsNljU1prUHdABMu2hSav0LVZ6cZODAmDPnpDumn6Oge4o9xNUzx7burEBVHUFMhkKFEA_qutuCH-2qxk2BJAF6mCQ45mOP0TZd6VZUnHC8jSEQwYN7mKykz41OOAXs8rxyikQyIhN7BcC2Qmj7RgGwQ..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "他成为了一家公司的渗透测试程序技术员,“职责就是测试网站的漏洞,提出修复建议”,每月工资六七千元. 杜天禹业余时间经常...",
|
||||
"author": "新华网",
|
||||
"pubDate": "2017-08-24 14:13:15"
|
||||
},
|
||||
{
|
||||
"title": "人社部拟新增10个新职业,看看自己能干点啥",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd938XWbZVit1p12c7HjlKcxc0ct2UIRuW2IuQFNtwlOSwNBnqV_XFalJfWH0Fo0sqI2jXtkJpMFXtkJT5spcScNNd43EJRTZQXbKiB8gxe8MmhclEVHlHGuBTdGJnjDE6p1BPfoFHvxLSJhVaPMnaKR4dqv2GDzseij7f4Zuod9ya00NVofL2iDw..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "直播销售员信息安全测试员通过对评测目标的网络和系统进行渗透测试,发现安全问题并提出改进建议,使网络和系统免受恶意攻击的...",
|
||||
"author": "人民网海南频道",
|
||||
"pubDate": "2020-05-13 14:27:12"
|
||||
},
|
||||
{
|
||||
"title": "李佳琦们要“转正”了!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9-0BJzlLy1eTjFD1JRuvsfpVuBnJzdO4GM_We8LBGBZfzv5nkrpRBB0DGECEe9GlcaW9mi2MBmXkLrK2aNKTXvdf2gz9sGguY4io2BKEILJvDOwOoWOamJKwz921jTlhuvjn-9H-nyaoEKqCVj_tYRROprp6YKqkfJpE-dnQJNFFr1dbZWbKUeQ..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "信息安全测试员通过对评测目标的网络和系统进行渗透测试,发现安全问题并提出改进建议,使网络和系统免受恶意攻击的人员.社群...",
|
||||
"author": "人民网",
|
||||
"pubDate": "2020-05-12 19:02:37"
|
||||
},
|
||||
{
|
||||
"title": "李佳琦们“转正”了!又一波新职业发布…",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9-0BJzlLy1eTjFD1JRuvsfpVuBnJzdO4GM_We8LBGBZfzv5nkrpRBB9EW3vvazU96ZKEnoo_JS3x0BzzWn10ximMuBWlT_5O9I0gqXal3SA9xAkmK__NeNaHmTzIKlvgdHMgV46VOYCkU-z-LXgKpny54VryVnWHIeu_sCOlTFyHvzHZXxeLdyg..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "信息安全攻防渗透测试和信息审核评估成为网络安全维护的关键环节,信息安全测试员、互联网信息审核员的工作将越来越重要.据悉...",
|
||||
"author": "人民网",
|
||||
"pubDate": "2020-07-06 15:08:14"
|
||||
},
|
||||
{
|
||||
"title": "妹子们注意!上海消保委测试了40款知名面膜,结果是……",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9fP4Xj1QflXiE_uUOtgLs-VC7viQvoqUsNljU1prUHdABMu2hSav0LXFjP6OboT1q_s_i8-oAShCeQ64qo3_4eMPkTSLPrW7GJxBLlQI_Hx1QeXc9ertFCkSjXIGyr7pYJSgLTFHAd537rsyfHp4-1t3va3n34Gw05SG_XagNHQZe0WC6Sbi7DA..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "4小时保湿功效分别进行了测试.1全部样品均通过激素筛查今年6月国家药品监督管理局通告了27批次不合格化妆品,其中多批次为面...",
|
||||
"author": "新华网",
|
||||
"pubDate": "2018-10-06 16:53:48"
|
||||
},
|
||||
{
|
||||
"title": "柠檬“上海户口、百万房补”?你也不是没有机会!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3BsRBkcbDQRgK6EhXVOSA6VqXa8Fplpd9-0BJzlLy1eTjFD1JRuvsfpVuBnJzdO4GM_We8LBGBZfzv5nkrpRBB3Gf0crth1REpM7pnCtDQFICq64oviefEZ1vGp75hB_-VyPVdkkH4f88ejvmAzB97n9kx5vRkDJvVUmqh55kw-oFE23pG3T_Kpijfgr5UyMHkJlsOtybC6uFW6cwuUnkdA..&type=2&query=%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95&token=4B41BBA12A73D96FB0B680F58546CCA8B1C360E167D3A54B",
|
||||
"description": "信息安全攻防渗透测试和信息审核评估成为网络安全维护的关键环节,此次发布的5个工种里,信息安全测试员、互联网信息审核员的...",
|
||||
"author": "人民网",
|
||||
"pubDate": "2020-07-10 19:38:53"
|
||||
}
|
||||
],
|
||||
"手机银行漏洞": [
|
||||
{
|
||||
"title": "银行手机app存重大漏洞,用户分166笔套取资金300万未被发现",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3RBfDGcuhAcYK6EhXVOSA6VqXa8Fplpd9NFACt4r9XtAYsMhQto1wHGOTujEotFi8vSykO0Z07Xs9-tfxZkeUpY6iBgpIAt2qlcUFBr4NqlmxP_WAkDDHwxeCu0zsfNpcT2AjinmY7IFW1HgYGZhghgZJSXbhsdjNLtVmEDjiEeZ0w2BEIqo-WgT7-0TtL-1jEEemsV1E7q_f3q8uRDTfkw..&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "银行app存重大漏洞判决书显示,朱某系平顶山银行用户,为了更方便的使用各类业务,朱某在手机上下载了平顶山银行app,绑定了...",
|
||||
"author": "支付百科",
|
||||
"pubDate": "2020-03-19 19:33:50"
|
||||
},
|
||||
{
|
||||
"title": "警惕!手机银行APP也会存在高危漏洞",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAxH-o62u-IsyVgrFeYQugDtWJbbJ5gmKdyIb1BwsnXrNcyHcjzrvJNVi8JqrNdaI95E24oXpjz7s0tde0UUnVQU2wSvBGSiqEcBJf6JtGOEEuTsHBXh_3zfXPq_UwJRT6DOmgAA8E1-31epqYloXWzrX1ue8j2gDrpYPwWiONnLh_fKqELnf6cslD4qCPNdksxHjTp5TWgTMtb0QT38qtXqaKAm6xneH4nKOxeqk3nGzTFmHsDF7RoDIQcIWu7eIDiZqwg0yoRFw.&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "实验室的工程师通过实验发现此次测试的手机银行APP普遍存在高危漏洞,用户在进行转账交易时,黑客能够通过一定的技术手段劫持...",
|
||||
"author": "中国信通院CAICT",
|
||||
"pubDate": "2017-03-15 14:13:34"
|
||||
},
|
||||
{
|
||||
"title": "什么操作?一男子发现银行网银端漏洞,存50元取50万,收获3000万",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3RBfDGcuhAcYK6EhXVOSA6VqXa8Fplpd9Hzh_lyNfZEqbnRTiI9rBQm3Q87lpJNG3cN4vp1YvJLDwBSPpNKz66VhemuvDOBKdbKq8zyckFEcDlRvZYhEBeMw9r9kKDTs8JkqrrVxvBBjVhoGJkK0jKZMExOmTHzxEnZwJiUsgHt426TGjjzW-m9d9apFNp5IhfTyuqbmZb4TFcvUoAZZH7Q..&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "他发现上海某银行的网银有漏洞,可以修改定期存单金额和贷款金额,比如存款改成50元,贷款改成50万,就能套现50万.半年内他...",
|
||||
"author": "木火通明",
|
||||
"pubDate": "2019-04-23 21:42:11"
|
||||
},
|
||||
{
|
||||
"title": "手机银行漏洞:五行代码可转走银行250亿美元存款",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAxH-o62u-IsyVgrFeYQugDrGFFTyF4j-fIHKmKiWmh_gT1RIk9nIJTomqza81rARJOjZaCXpGyzbfa51Lk7hnBdd-PXO8zD4bZBzkEs4qL91zXrAssxq_Fx_iURzYopd5FdYNUIpQFKjqT5bbRtXpk6qvJW3YSGGH4mUNEhHT1092NRPfeW2gOckW9rfO5f8Y4zZqnpfFaZ3i-R9z0OfFxpHSTjVCI9DmVfyAhJ0RCVBxAmAH5j2j34zQH5fQsyygiZqwg0yoRFw.&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "在银行客户所使用的手机银行软件之中存在一个严重的安全漏洞. Prakash解释称,通过利用这个漏洞,他可以从任何一名银行客户的...",
|
||||
"author": "黑白之道",
|
||||
"pubDate": "2016-05-27 08:16:49"
|
||||
},
|
||||
{
|
||||
"title": "黑客攻击发现:多家手机银行APP存漏洞",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAxH-o62u-IsyVgrFeYQugDpII3pXlhB4cu4QQVVNjVmAappCK6q5S16c49JwWaZSxh6K1ZbFnBuvxOAGz10wsWDCGOVaVbb4pV_vNEfPvSlDh69B_ygeCeHyP2pP4-9OYzmM9EgVrwn3UJ9paHwZeQ8yY46If-pFETSS-0YEV8fETpKlqv5RkewRoBiPd-aG9Y7g5Zxp-ImqDVr2SrMfwi1gtbpSKZ2v4PWTMZ0URHjtUoGUnTGtCmFj7kb-frKMWiZqwg0yoRFw.&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "手机银行存在的漏洞让人担忧.参赛队伍介绍说,通过对国内20家银行提供给消费者的、基于安卓系统的20个手机银行APP进行攻击...",
|
||||
"author": "E安全",
|
||||
"pubDate": "2016-09-05 11:36:23"
|
||||
},
|
||||
{
|
||||
"title": "银行手机app存重大漏洞,余额为0也能成功转账?被人套取资金数百万4个月后才发现",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3RBfDGcuhAcYK6EhXVOSA6VqXa8Fplpd95FuX7oHuqTy2vXk0m56mQ70Jd5155gD2Md3QcfhtX3-qLVh5LFUOweFf60r0lcM0QVDRCGxYZGQelXNR3W4tYu5LUfYWhH0buEMkJJBVgjYw_NNWnLEmovv2Q7hapVTrJs1xgQwC0o_gxP6VbP9Q8-ADnlWefaUbxpHxVwDXySyFW6cwuUnkdA..&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "揭示了平顶山银行APP中存在过巨大漏洞.判决书显示,罪犯朱某鑫,1996年生人,小学文化.2017年至2018年,朱某鑫在手机上下...",
|
||||
"author": "支付爆光台",
|
||||
"pubDate": "2020-03-19 20:19:19"
|
||||
},
|
||||
{
|
||||
"title": "警惕!有人利用手机银行漏洞,在我市疯狂作案30余起...",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3RBfDGcuhAcYK6EhXVOSA6VqXa8Fplpd9uQLYrci54ZeLmLtABBGBCMIvO4GzVCXt80DQXHrBh8VSd1SY3lJZNDZNyjq5zoKt0mT_fnwtE_JIauljziXMGalNG8OVdv5bTR0I2AF5eLpJa2F-yUwexQGdQ_k6SHQwX3ySM0Gj6eAyQBjnkA7l8ZXOMbRNJafAdPiN8gBUESctPujwwRB2Pw..&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "支付货款受害人手机接收到了到账信息可是到银行查询却未实际到账怀疑被诈骗刑侦大队民警接报后立即展开调查经民警努力追捕犯罪...",
|
||||
"author": "赣州公安",
|
||||
"pubDate": "2019-09-11 18:44:52"
|
||||
},
|
||||
{
|
||||
"title": "警惕!有人利用手机银行漏洞疯狂作案30余起……",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3RBfDGcuhAcYK6EhXVOSA6VqXa8Fplpd9NT8RvUvXV0PFeE3a2kUhkP2ZG_sX8zawtBT3KVXDaagk-cP3LlavEKLsUaYCzd6w6DZhlyQ9YspIRZKmkzay6EZQflQxyhdeqKfuAYpCA52ekN5651P75SmY3qYCzo2bOCCca3RPdx4ylb5AvEf1Wk8wPAKoG25Q9dQcrLNGeD3wdVqCwyPdzA..&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "行账号但受害人手机仍能接收到银行预转账信息此时受害人误认为钱款已到账实际上手机银行端比对银行账号错误后该笔银行转账会退...",
|
||||
"author": "玉山生活",
|
||||
"pubDate": "2019-09-15 17:21:04"
|
||||
},
|
||||
{
|
||||
"title": "某银行手机APP现支付漏洞3天被盗刷40多万",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAxH-o62u-IsyVgrFeYQugDt6m0Zx5D-v1Rwjk3P2iLUhEZ-LRrvFkVfsvQ7RvizarNGtYcShVf1nwcLufi6L-Gk7jKfOPejPKPrq1E8X8xtcLtMuSAR7jeYn91RFWK5aCBjj3TewmabqUEL84ZxANtI9op8YjndHKzRF4Q4i9YVEPKrHFAjjttHYqLtFFSwSzHWEdrYZx40buATK0RtUpeKuK4Xnc6AvoJJ3-8f7g0iBwlwVQ0IawpTKu0NTfZRcaiZqwg0yoRFw.&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "银行手机APP新上线的支付功能被人发现了漏洞,3天内数十名客户的信用卡遭盗刷,共损失40余万元!银行立即停止这项支付功能,...",
|
||||
"author": "支付界",
|
||||
"pubDate": "2016-06-16 09:00:18"
|
||||
},
|
||||
{
|
||||
"title": "浅析某城商行手机银行水平授权漏洞问题",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3RBfDGcuhAcYK6EhXVOSA6VqXa8Fplpd9xDBW9Rl70OcDaZ8d2t3eWLxTzFuASo02mX09efynhG3F4_7-WUI3gC3ZjaOrWCB9EsQUbql0RvIrYgINh8Nu28IO5qsg2KkFcI5Ud9tw-aj4WuHTgESjTlTUICBxW3zzbT2DRbilp0A20hoSggt-li4bneigETdENFVo2Of620Pf3q8uRDTfkw..&type=2&query=%E6%89%8B%E6%9C%BA%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B41E20C0956FC4B9492A4D1A6D81B1B94207FB267D3A551",
|
||||
"description": "也导致此城商行从2019年1月18日至今一直关闭手机银行APP软件中Ⅱ、Ⅲ类账户开户链接功能.-问题原因分析-水平越权缺陷漏洞是...",
|
||||
"author": "51Testing软件测试网",
|
||||
"pubDate": "2022-10-12 12:01:01"
|
||||
}
|
||||
],
|
||||
"银行漏洞": [
|
||||
{
|
||||
"title": "银行漏洞改存单,50元变身50万,半年骗取3000万!这是什么骚操作?",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9pzKu330fp4wKNvjCnpsTYJy_MYuu2jCD8DAS_luExtAWB1N6-Cxv3qasDw3uxHi0z8MjCNPczv36si2m__UqjpsfZTQNAbaoiYscmaVEzka-Nf0uOtaXOO83W4asiYuUGAW-rQuwk6eo8gpCckTFDmjFBvf9GaZ79Fhd4sLWmCqjotuuiAmOIg..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "犯罪嫌疑人马某最终如实交代了他利用银行漏洞进行贷款诈骗的行为.那么他又是如何发现银行这一漏洞的呢?据犯罪嫌疑人马某交代...",
|
||||
"author": "测试届的LV",
|
||||
"pubDate": "2019-06-10 08:18:15"
|
||||
},
|
||||
{
|
||||
"title": "银行漏洞丢钱,中移动花式收费,谁来给我们一个交代?",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9yCKB9iwOJDtLWv88jWC4D3LqwHy7uz5eXXAi1F7RRhfTmxUGPHxNlpTpcgRBQ6HKHK5da9FY-PQYWsW6wwagjjDjk-whi91Qgy9WtCkxb-qLhZaY-aNqNZo-A-90R7nATCrHl4ejTzTSf1l1B9mwUO_aBLTc1iOYrXXwyxVEjXMHpHkoPMgL3A..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "银行给出的回复也就是杂费、服务费之类的正常说法,具体是什么银行也说不出来.民警将该案件上报,总队也觉得有些蹊跷,案件升...",
|
||||
"author": "纽扣资讯网",
|
||||
"pubDate": "2018-08-21 19:29:05"
|
||||
},
|
||||
{
|
||||
"title": "2013年,大妈发现银行漏洞,仅1个月就偷走银行5个亿",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd95i37lwf53KQXhIurbqJ78EwAthuML43VGgVJaQi0-yHjXSXQt6yNSFB9IXhZ2qRlx8h84Wk9DhG-65N7kylrgZSAS8EF4JoB7gLO8CtrkqAkUh-oIJhz2JFYUslUu5suP83v9EowWRAL3jlKxMCZS-F8OToB1kbJVAxZxwFsJHdQL0Hr9Gyd3Q..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "2013年,大妈发现银行漏洞,仅1个月就偷走银行5个亿存到银行的钱,居然不翼而飞了?2013年3月,方德富在工商银行的天台支行,...",
|
||||
"author": "灵枫历史阁",
|
||||
"pubDate": "2023-06-04 17:49:26"
|
||||
},
|
||||
{
|
||||
"title": "华裔女留学生发现银行漏洞消费超2千万 获无罪释放",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9Y9dzG87vgOnZ1Pc8kgUn4bOjDKoqa0WENxM-PZgqv19n30ZqfoqFybLK1SR7LYH-QCkY-6vQJJYQTF1vlweUrhn78sPKj2o_GrDfgQa25qzSTggfIFWslDhRkC_VjqvqrWlk0CAlCiFgyV5xySIl44uhYpsJDbjVNZWI5TFmlNCE8RsmObDbtQ..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "据悉,李佳欣在发现银行漏洞后疯狂消费,购买各种奢侈品,包括爱马仕、迪奥、香奈儿、卡地亚等,甚至在一天之内消费了30万澳元...",
|
||||
"author": "网易新闻客户端",
|
||||
"pubDate": "2017-12-04 19:29:22"
|
||||
},
|
||||
{
|
||||
"title": "银行漏洞还是储户大意?招行贵宾客户竟然这样被“套路”",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9v5ehQ7aW1JrlZRA0hZQJXryemPyhOEIG8SsPkKVwA1sPvJD5lLpq7bzDWppkR171ixxIoa_DU8md1f4wjSote19_OcS3Nh9M6nZ0smXRixVcky8-IucQNTXYuUAh4dDsfikJaUblV14sI7zkCqc8NLDAAOczmKq7RstcmWk3oo5Cy6umSSPEsg..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "正规渠道转出资金银行漏洞还是储户大意?为何李某等人的账户会在其不知情的情况下顺利被他人支取出资金?交易过程中的银行短信...",
|
||||
"author": "新浪财经",
|
||||
"pubDate": "2020-07-21 15:52:31"
|
||||
},
|
||||
{
|
||||
"title": "黑产利用光大银行漏洞,信用卡1万额度可提15万",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9_l1Bjwrux0F8XX3ZwV0YGrjfAMzkM73UoJC81rUsfwUnC0L0pK2NGWNghIH-J-fYIncaKaBKcUsuIlpwk4-3jk4VToaA9SRp9Vr4XkwUF0LCcfIRH-kfYWOyUAhatvlV7uhKM-K6ewbGShFPW_aIOF1TAIpU4sbeTHGWMu-x92t5LU3lqtPw9g..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "5月25日,雷锋网宅客频道(微信ID:letshome)从网络安全公司紫豹科技了解到,其情报团队监控到一起银行漏洞事件.紫豹科技相关...",
|
||||
"author": "可转债摊大饼",
|
||||
"pubDate": "2018-05-26 13:15:31"
|
||||
},
|
||||
{
|
||||
"title": "卷!某银行漏洞管理平台投标限价1115万元,浪潮近半价拿下",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9ifWXEHUoNmfSyLSSYMdnbbqUPPxfMrR_HpEuKaBJKg8PTI9uoyQdisGi3AKbA0cCDIcz0fhIwhmPAuY_jwZcpmJUVzanQWGkl-1v7fBXZvYm5oOi6PffjcUvJJu5EaHf0qt35Qbl3EiiZ3DOOBA-0d2rsxJ5Q5UX7efkrvAUqVI6Ebq8fk9diw..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "近期,农业发展银行采购漏洞管理平台,产品包括漏洞管理系统和漏洞扫描设备,投标限价1115万元,要求提供投标产品的同品牌同类...",
|
||||
"author": "安知讯",
|
||||
"pubDate": "2023-02-06 19:02:16"
|
||||
},
|
||||
{
|
||||
"title": "六安徽商银行再爆监管漏洞!违规吸收存款,罚25万元!负责人被行政处罚!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9kcTUthZEfb8g-5IZT5zCoUSBUeJYC34rdFaDNYyJmAoXFUZ5CJ3JiX9xGPY5VnW5ScRIpQ68upf1GZG4zUK1E4hjcF9tu16epEQS3uFzQnI4_zOPR7F8DHn-d1o-hRu2S5LGk62RcNBRLRFf_9Xto_IOkkmAQabZ_B7BZGsB0cfm0CtGSSkZQQ..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "yuan元:银行漏洞百出,金融部门应该管管了.阿莫:金融行业的蛀虫,破坏金融秩序的健康发展...小龙:这样的人居然在银行担担当...",
|
||||
"author": "六地品安",
|
||||
"pubDate": "2018-10-25 14:25:30"
|
||||
},
|
||||
{
|
||||
"title": "华人女生发现银行漏洞刷爆2千万,挥霍后竟无罪释放",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9oW-h7ODZ-2qwX0zMPf7C6RCHPwN_SVrexdeJKTUt6u70a3A4YFjhJy2-ceZ6AezyCVa99sgWUSMG1BxjJXmQTC9necAA8QWQpGliM5Vh89nlmjp6vgvDSiKLTXkY9DkrRgWkt8QJ-tB-Ir1Q1eXP1H87FuOXldJ_GV0QQxjE3Dyq3X8EKMKOIA..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "李佳欣租住的豪华公寓据悉,李佳欣在发现银行漏洞后疯狂消费,购买各种奢侈品,包括爱马仕、迪奥、香奈儿、卡地亚等,甚至在一...",
|
||||
"author": "外交之声",
|
||||
"pubDate": "2017-12-03 23:54:42"
|
||||
},
|
||||
{
|
||||
"title": "有钱没命花! 3名华人钻银行“漏洞” 获利千万美元 获刑82年!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-3HBP-6BLzry8K6EhXVOSA6VqXa8Fplpd9B4aKooqWHsSX8MfFu9KbHvc4fitnLtTm8fvOyPI9IxxpfezbeTUEo-5I1gXwlj2nzTlA7YViDnsYI3MiVnSH83UGdL_9nfZ5CnPFsoQNVHHv5gJHFUCJbKrvsffl30U9SZwi1LbYQp5Kjb6rwDDLFSiA5W18-Aksmk_8Z_sDxnoSYTqT4eyLmA..&type=2&query=%E9%93%B6%E8%A1%8C%E6%BC%8F%E6%B4%9E&token=4B420630663E9422FDFACDB8C96265A4FD0E1B1467D3A556",
|
||||
"description": "银行明明有时间差漏洞为什么不修补,这其实就是最基本的银行与客户间的信任与承诺,过去的几十年里,对于绝大多数客户来说,这...",
|
||||
"author": "留学生公社",
|
||||
"pubDate": "2023-11-18 18:00:57"
|
||||
}
|
||||
],
|
||||
"支付漏洞": [
|
||||
{
|
||||
"title": "天融信:《电子支付漏洞报告》重磅发布!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9OZBwVnf0OZvVkDThqmS0KvPYf9vd0fHL-1NzwpelId6ZjzS0XkOchUXb-1nTvzwUw2lXvVOhe6UnAbSqXsVbT7SxAOPamN2pIyS9f5HmkZ2B7S2a8JMXTvBYYErM7l8LyDqQEOuupqFCNfmVif-GnjgfY1u-EGPEyR6tmRvfLGcNGbbB75bUeA..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "支付漏洞趋势3电子支付的安全风险3.1线下支付安全风险线下交易要求付款者必须持有有效支付工具,如银行卡和智能手机APP.银行...",
|
||||
"author": "天融信",
|
||||
"pubDate": "2023-07-12 18:21:06"
|
||||
},
|
||||
{
|
||||
"title": "敏付科技存“支付漏洞”被约谈整改",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9mXuxCPlr9wuMG1zGFKYTVdQ6NbOgjV3V00dz2oMl86RWnpNZdq7Kx7bwuNXgqln9u0SXOIrj7gbeHDszmwhzqbV1lKylQ6RfvW3H0ycB_6keGoLVmFkX_AXTykKUvEAJQK3ft1pFVY_Vg6kFWy0wgJjjAXrkYVuU453FXdGyDT9Q_LeJW-Rhtg..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "支付之家网(ZFZJ.CN) 支付之家网获悉,持牌支付机构敏付科技有限公司(简称“敏付”)因存在“支付漏洞”被北海市公安机关约...",
|
||||
"author": "支付之家网",
|
||||
"pubDate": "2022-01-24 08:00:21"
|
||||
},
|
||||
{
|
||||
"title": "手机支付漏洞已成盗刷之源!小编教你如何防范!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAwUyg1TyL97GVgrFeYQugDndALL-7pI3oraek_dUHh9oi3Z6JTpwtmofwF_TsWuaziznq53yTuHU0TY6mSaDfaySSatUm8Q3moWHSxcguBZZMZVuXK0hVAcGyacQrUu5Ux6cGmLX7rcIdYhuFwg_cTwOGdVp36ey1X9nDqO-Kggd2_u5ze64Ec_9Bonpg0IFZDFs5gtIb2zRKTVklZSD7LN6AbwUzvZio_quACiFs8NLmD_Eh-Th7MpDZ-ixMe2dgiZqwg0yoRFw.&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "手机明明揣在兜里,怎么支付宝和微信钱包里的钱就没了?你以为手机丢了只是损失一部手机吗?说不定紧跟着与手机(号)绑定的移...",
|
||||
"author": "电脑爱好者",
|
||||
"pubDate": "2016-05-20 17:30:26"
|
||||
},
|
||||
{
|
||||
"title": "从最近的微信支付看XXE漏洞",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9PohLElZHBTPQonqCfZ0TtAmg5tVFTq0IqC9Rtf6vksxuBUsHWIRChz8_pO8mtSkn9lXhXHUkYMYENsBFAw4MpbDSeZX0cZU1zR3nbXPtYia6L7-46xKO3KmNFRmSu32pWZ_YvGzlmU_R_rWuQm9uNSShFsfQZtiOAS1Eo5m1NxDdrgozfSg6bw..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "这就很能说明问题,于是老大让我对微信支付漏洞做漏洞研究并找出产品出问题的原因.所以才有了这篇文章.由于本文的初衷是为了...",
|
||||
"author": "FreeBuf",
|
||||
"pubDate": "2018-07-08 18:03:00"
|
||||
},
|
||||
{
|
||||
"title": "支付漏洞:你可能收到了假微信转账",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAwUyg1TyL97GVgrFeYQugDonBfgmHjxCOd5XAY1uNSeSCEkLPGf4cu3kGZpLvvkSCuHaUmcDkcnrwDQLZHUliJi-KdKemZNhbMwwfs2qZ-ey2WueZfM3Q2xvQYgxQa-wMRl520NthlI2CaKKPCpDZe-eWIvRYrW2ZNcTo3KmF86iEowge5WjG0YYa5AR-5kBvaRxFoZVxS3OmJechIZPIVjJajuUu5V_Us1XMZbTAxic6vsr67-iOh1v5FwtbFaAkiZqwg0yoRFw.&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "这一支付方式被别有用心的不法分子玩出了“新套路”.从事服装生意7年的晓雯,眼看“回头客”已将钱转至自己的微信上,谁知是...",
|
||||
"author": "画乡之窗",
|
||||
"pubDate": "2017-02-28 18:28:24"
|
||||
},
|
||||
{
|
||||
"title": "就一加手机支付漏洞讨论在线支付中的安全风险",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9PohLElZHBTPQonqCfZ0TtAmg5tVFTq0IqC9Rtf6vksxuBUsHWIRCh-L5VoC6JnrqApIEh_-2oIPZjtRsmX4pPhbTbM6tiyMB93hkLeBBYoEZOkmyt0NGPjZnp902yylFJvxWBnNXdCSxEFrHicHaEgf3IuPe41nQmxVL51aVjsJflztgI7RZ1g..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "支付交易的处理是由CyberSource处理的,但是支付表单却仍然托管在OnePlus的基础设施中.如果攻击者拥有该页面的读写权限,那...",
|
||||
"author": "FreeBuf",
|
||||
"pubDate": "2018-02-12 19:17:27"
|
||||
},
|
||||
{
|
||||
"title": "利用支付漏洞套现1300万被判15年",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9NFACt4r9XtAYsMhQto1wHGOTujEotFi8vSykO0Z07Xs9-tfxZkeUpTcjypPGbjy1dzndMaxfsw-B9kMCysl9Q2JC1F-c4KWIii5atqTrR2E5H27QHHkcE0EslGSb2u3Sda0wOdznXVXGERgXa2BsvbMBN1ghMG_zS-JkohXtNAgY-UZGbO56rA..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "利用支付漏洞,他在半年时间里收入1300万元,光用来打赏主播就花了400万元.撰文 | 张浩东出品 | 支付百科 今年8月份,一个17岁黑...",
|
||||
"author": "支付百科",
|
||||
"pubDate": "2022-01-03 13:54:08"
|
||||
},
|
||||
{
|
||||
"title": "支付漏洞实战",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9Mhk1GjVLnS3VHON7gk3zpZbU9KmHHCJJLg47g3ZmcNtZwp5Wq-oGePXvAK5urD-4C4yk8q__JM5Jcdj-G0RjPcE93MwAKtCMZRGrluOMy6HFTdJK5HByXKYdciKZTBSxD8fZWRsvoT7OjCsM5Jo-FiA9YWwQV24IAKCjGJg0JjHS-e4Yz84xMA..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "本文作者:Heart(Ms08067实验室 SRSP TEAM小组成员) 首先先了解支付漏洞:支付漏洞的理解通常都是篡改价格.比如,一分钱买...",
|
||||
"author": "Ms08067安全实验室",
|
||||
"pubDate": "2020-08-28 09:00:22"
|
||||
},
|
||||
{
|
||||
"title": "银行卡免密支付漏洞这么大!",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6ft3wfAVofsP5Peu-UiA4DCOjX66B0wQAwUyg1TyL97GVgrFeYQugDuQ4kL7uR81Sd2Pr115nJuaGM5bMh5P11s3nipXYh7GfWqnDDAJY_PIfdbK8hCMlRkr3S_2VjJLus9RPhsk5RWH7sUYR0dd2wdL7a2QZgEM0OgnsQfgmP4ojfo-M4oiDVPRlI4SIFNmId2K64e_gRujQTWJyfib4dr5Q4nGwc20xoJoT7dq0ZINPpTcUcFfc5Yu3qxonRRd6dOgptLPH2lD_2VmKXtAg58IEiz6Zny7IiZqwg0yoRFw.&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "仔细想想,我们信用卡设定的自动还款也是一样,不需要密码,钱就划走了,还有去超市被商户扫支付宝和微信支付的付款码的时候,...",
|
||||
"author": "犀牛生意经",
|
||||
"pubDate": "2016-08-29 09:23:44"
|
||||
},
|
||||
{
|
||||
"title": "某小程序的支付漏洞+任意地址删除",
|
||||
"link": "https://weixin.sogou.com/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS0Sn1n1P5K-34ZVeDnWy53UK6EhXVOSA6VqXa8Fplpd9AKiOW-WJ7zh0-bPf6gXkyGutYIrVVRNKhs5Zma6jodl3HgUbak8MkfEx6b8RQNbvd8Ml2TZMWJlGlNstepzq4wMfBNggnY_PHlanDvUbRD6Nm-vWZS8ZccVToRBI7HqsiJmSmiuTe5jjbPG3Qbk94xqlbuVgE15V_OmylOfgzc1hWLv6O878UA..&type=2&query=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E&token=4B422930C9903A8D5255631767A2805A5348862F67D3A55C",
|
||||
"description": "常见的逻辑漏洞有交易支付、密码修改、密码找回、越权修改、越权查询、突破限制等,下图是简单的逻辑漏洞总结,在挖掘的过程中...",
|
||||
"author": "狐狸说安全",
|
||||
"pubDate": "2023-09-14 14:25:44"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,642 +0,0 @@
|
||||
[
|
||||
{
|
||||
"title": "老显卡福音!美团开源首发INT8无损满血版DeepSeek R1",
|
||||
"link": "https://tech.meituan.com/2025/03/07/meituan-int8-deepseek-r1.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "DeepSeek R1模型权重原生为FP8类型,仅能被英伟达新型GPU支持。美团技术团队进行了INT8精度量化的尝试,量化后模型精度基本无损,可部署到A100等其他型号GPU,从而解锁了芯片限制;相比BF16实现了50%的吞吐提升,降低了推理成本。相关技术已在Hugging Face上开源。",
|
||||
"published": "2025-03-07 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "上下文感知的聚合页广告优化实践",
|
||||
"link": "https://tech.meituan.com/2025/03/02/context-enhanced-learning-for-intelligent-marketing.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "聚合页广告将商家和优惠信息以多种形式聚合展示给用户,是美团广告业务中一个重要的业务场景。本文从最能影响用户决策的“发券”和“排序”两个方向出发,介绍了上下文感知建模在广告场景的落地方案,证明了聚合页上下文感知的收益空间。希望能对从事相关研究的同学带来一些启发或帮助。",
|
||||
"published": "2025-03-02 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "行为正则化与顺序策略优化结合的离线多智能体学习算法",
|
||||
"link": "https://tech.meituan.com/2025/02/21/marl-in-meituan.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "离线多智能体强化学习(MARL)是一个新兴领域,目标是在从预先收集的数据集中学习最佳的多智能体策略。随着人工智能技术的发展,多智能体系统在诸如自动驾驶、智能家居、机器人协作以及智能调度决策等方面展现了巨大的应用潜力。但现有的离线MARL方法也面临很多挑战,仍存在不协调行为和分布外联合动作的问题。为了应对这些挑战,中山大学计算机学院、美团履约平台技术部开展了学术合作项目,并取得了一些的成果,希望分享给大家。",
|
||||
"published": "2025-02-21 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "预测技术在美团弹性伸缩场景的探索与应用",
|
||||
"link": "https://tech.meituan.com/2025/02/14/prediction-technology-in-meituan-elastic-scaling.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "在管理企业大规模服务弹性伸缩的场景下,Web应用的负载时序数据分析和预测至关重要。然而,由于应用的周期性特征和负载的复杂性,寻找一种能够适应所有应用的预测模型成为了一项挑战。美团与中国人民大学信息学院柴云鹏教授团队展开了“预测技术在弹性伸缩场景的应用”科研合作,取得了较好的成果。希望能给从事相关研究工作的同学带来一些帮助或启发。",
|
||||
"published": "2025-02-14 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "美团技术年货 | 600+页电子书,算法、工程、测试、数据、安全系列大合集",
|
||||
"link": "https://tech.meituan.com/2025/01/16/2024-spring-festival-present.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "值蛇年春节到来之际,我们精选过去一年公众号30多篇技术文章和科研论文,整理制作成一本600多页的电子书,作为一份特别的新年礼物,献给每一位热爱技术的你。愿大家乘风破浪,勇往直前!",
|
||||
"published": "2025-01-16 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "鸿蒙应用签名实操及机制探究",
|
||||
"link": "https://tech.meituan.com/2025/01/06/openharmony.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "本文对鸿蒙公开资料进行了深入分析和解读,梳理了鸿蒙单框架应用的签名机制,拆解每一步的实操过程和背后的实现原理,并对源码分析整理签名的校验机制。从中管中窥豹,探究鸿蒙系统的安全设计思路,希望能给从事鸿蒙研发的同学提供一些借鉴。",
|
||||
"published": "2025-01-06 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "2024 | 美团技术团队热门技术文章汇总",
|
||||
"link": "https://tech.meituan.com/2024/12/26/2024-happy-new-year-top10.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "本文整理了2024年美团技术团队最为热门的10篇技术文章,这些文章覆盖了基础理论、数据存储、因果推断、搜索推荐、智能测试、知识图谱、领域驱动设计等多个技术领域,期望这些精选内容能为大家带来一些启发或帮助。愿大家在新的一年里,持续深耕技术沃土,稳步前行,不断攀登新的高峰。",
|
||||
"published": "2024-12-26 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "AutoConsis:UI内容一致性智能检测",
|
||||
"link": "https://tech.meituan.com/2024/11/21/autoconsis-ui-meituan.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "美团到店研发平台质量工程部与复旦大学计算机学院周扬帆教授团队展开了大前端智能化测试领域的科研合作,从UI界面内容一致性校验入手,并实现了一套自动化智能检测流程,相关论文被软件工程领域具有国际影响力的会议ICSE 2024(CCF-A类会议)的Software In Practice Track(软件工程实践应用)收录。",
|
||||
"published": "2024-11-21 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "CIKM 2024 | 美团技术团队精选论文解读",
|
||||
"link": "https://tech.meituan.com/2024/10/31/cikm-2024-meituan.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "本文精选了美团技术团队被 CIKM 2024 收录的 8 篇论文进行解读,覆盖了自监督学习、解释生成、CTR预测、跨域推荐、向量召回、图像生成、时效预测等多个技术领域。这些论文有美团独立研究,还有跟高校、科研机构合作的成果。希望能给从事相关研究工作的同学带来一些帮助或启发。",
|
||||
"published": "2024-10-31 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "大前端:如何突破动态化容器的天花板?",
|
||||
"link": "https://tech.meituan.com/2024/10/18/recce-in-meituan.html",
|
||||
"author": "美团技术团队",
|
||||
"description": "长久以来,容器要实现动态化和双端复用,难免要牺牲掉一些性能。有没有办法让动态化容器的性能尽可能接近原生?美团金服大前端团队给出了一种解决方案,尝试突破动态化容器的天花板。",
|
||||
"published": "2024-10-18 08:00:00",
|
||||
"source": "美团技术团队"
|
||||
},
|
||||
{
|
||||
"title": "僵尸网络911 S5的数字遗产",
|
||||
"link": "https://blog.netlab.360.com/911s5/",
|
||||
"author": "lvxing",
|
||||
"description": "<h1 id=\"%E6%A6%82%E8%BF%B0\">概述</h1><p>2024年5月29日,美国司法部发布通告,声称其执法活动摧毁了"史上最大的僵尸网络" 911 S5,查封了相关域名</p>",
|
||||
"published": "Fri, 14 Jun 2024 09:20:11 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "Heads up! Xdr33, A Variant Of CIA’s HIVE Attack Kit Emerges",
|
||||
"link": "https://blog.netlab.360.com/headsup_xdr33_variant_of_ciahive_emeerges/",
|
||||
"author": "Alex.Turing",
|
||||
"description": "<h1 id=\"overview\">Overview</h1>\n<p>On Oct 21, 2022, 360Netlab's honeypot system captured a suspicious ELF file <code>ee07a74d12c0bb3594965b51d0e45b6f</code>, which propagated via F5 vulnerability with zero VT detection, our system observces that it communicates with IP <code>45.9.150.144</code> using SSL with <strong>forged Kaspersky certificates</strong>, this caught our attention. After further lookup,</p>",
|
||||
"published": "Tue, 10 Jan 2023 14:00:37 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "警惕:魔改后的CIA攻击套件Hive进入黑灰产领域",
|
||||
"link": "https://blog.netlab.360.com/warning-hive-variant-xdr33-is-coming_cn/",
|
||||
"author": "Alex.Turing",
|
||||
"description": "<!--kg-card-begin: markdown--><h1 id=\"id\">概述</h1>\n<p>2022年10月21日,360Netlab的蜜罐系统捕获了一个通过F5漏洞传播,VT 0检测的可疑ELF文件<code>ee07a74d12c0bb3594965b51d0e45b6f</code>,流量监控系统提示它和</p>",
|
||||
"published": "Mon, 09 Jan 2023 03:13:20 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "快讯:使用21个漏洞传播的DDoS家族WSzero已经发展到第4个版本",
|
||||
"link": "https://blog.netlab.360.com/new-ddos-botnet-wszeor/",
|
||||
"author": "Hui Wang",
|
||||
"description": "<!--kg-card-begin: markdown--><h2 id=\"id\">概述</h2>\n<p>近期,我们的BotMon系统连续捕获到一个由Go编写的DDoS类型的僵尸网络家族,它用于DDoS攻击,使用了包括SSH/Telnet弱口</p>",
|
||||
"published": "Wed, 07 Dec 2022 12:58:21 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "P2P Botnets: Review - Status - Continuous Monitoring",
|
||||
"link": "https://blog.netlab.360.com/p2p-botnets-review-status-continuous-monitoring/",
|
||||
"author": "360Netlab",
|
||||
"description": "<h1 id=\"origins\">Origins</h1>\n<p>P2P networks are more scalable and robust than traditional C/S structures, and these advantages were recognized by the botnet authors early on and used in their botnets. In terms of time, <a href=\"https://en.wikipedia.org/wiki/Storm_botnet?ref=blog.netlab.360.com\">Storm</a>, which appeared in 2007, can be considered the progenitor of this area, when botnet threats were</p>",
|
||||
"published": "Thu, 03 Nov 2022 14:00:00 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "P2P 僵尸网络:回顾·现状·持续监测",
|
||||
"link": "https://blog.netlab.360.com/p2p-botnet-monitor/",
|
||||
"author": "360Netlab",
|
||||
"description": "<!--kg-card-begin: markdown--><h1 id=\"id\">缘起</h1>\n<p>P2P结构的网络比传统的C/S结构具有更好的可扩展性和健壮性,这些优点很早就为botnet的作者所认识到并被用到</p>",
|
||||
"published": "Wed, 02 Nov 2022 03:11:33 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "Fodcha Is Coming Back, Raising A Wave of Ransom DDoS",
|
||||
"link": "https://blog.netlab.360.com/fodcha-is-coming-back-with-rddos/",
|
||||
"author": "Alex.Turing",
|
||||
"description": "<h1 id=\"background\">Background</h1>\n<p>On April 13, 2022, 360Netlab first disclosed the <code>Fodcha</code> botnet. After our article was published, Fodcha suffered a crackdown from the relevant authorities, and its authors quickly responded by leaving <code>"Netlab pls leave me alone I surrender"</code> in an updated sample.No surprise, Fodcha's authors</p>",
|
||||
"published": "Mon, 31 Oct 2022 14:00:00 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "卷土重来的DDoS狂魔:Fodcha僵尸网络再次露出獠牙",
|
||||
"link": "https://blog.netlab.360.com/ddosmonster_the_return_of__fodcha_cn/",
|
||||
"author": "Alex.Turing",
|
||||
"description": "<h1 id=\"%E8%83%8C%E6%99%AF\">背景</h1>\n<p>2022年4月13日,360Netlab首次向社区披露了Fodcha僵尸网络,在我们的文章发表之后,Fodcha遭受到相关部门的打击,其作者</p>",
|
||||
"published": "Thu, 27 Oct 2022 02:49:26 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "PureCrypter is busy pumping out various malicious malware families",
|
||||
"link": "https://blog.netlab.360.com/purecrypter-is-busy-pumping-out-various-malicious-malware-families/",
|
||||
"author": "wanghao",
|
||||
"description": "<p>In our daily botnet analysis work, it is common to encounter various loaders.Compared to other types of malware, loaders are unique in that they are mainly used to "promote", i.e., download and run other malware on the infected machine. According to our observations, most loaders are</p>",
|
||||
"published": "Mon, 29 Aug 2022 13:00:00 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "PureCrypter Loader持续活跃,已经传播了10多个其它家族",
|
||||
"link": "https://blog.netlab.360.com/purecrypter/",
|
||||
"author": "wanghao",
|
||||
"description": "<!--kg-card-begin: markdown--><p>在我们的日常botnet分析工作中,碰到各种loader是常事。跟其它种类的malware相比,loader的特殊之处在于它主要用来“推广”,</p>",
|
||||
"published": "Mon, 29 Aug 2022 01:20:17 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "A new botnet Orchard Generates DGA Domains with Bitcoin Transaction Information",
|
||||
"link": "https://blog.netlab.360.com/a-new-botnet-orchard-generates-dga-domains-with-bitcoin-transaction-information/",
|
||||
"author": "daji",
|
||||
"description": "<p>DGA is one of the classic techniques for botnets to hide their C2s, attacker only needs to selectively register a very small number of C2 domains, while for the defenders, it is difficult to determine in advance which domain names will be generated and registered.</p><p>360 netlab has long focused</p>",
|
||||
"published": "Fri, 05 Aug 2022 14:00:00 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "DGA家族Orchard持续变化,新版本用比特币交易信息生成DGA域名",
|
||||
"link": "https://blog.netlab.360.com/orchard-dga/",
|
||||
"author": "daji",
|
||||
"description": "<!--kg-card-begin: markdown--><p>DGA是一种经典的botnet对抗检测的技术,其原理是使用某种DGA算法,结合特定的种子和当前日期,定期生成大量的域名</p>",
|
||||
"published": "Fri, 05 Aug 2022 03:31:07 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "公有云网络安全威胁情报(202204)",
|
||||
"link": "https://blog.netlab.360.com/public-cloud-threat-intelligence-202204/",
|
||||
"author": "360Netlab",
|
||||
"description": "<!--kg-card-begin: markdown--><h2 id=\"id\">概述</h2>\n<!--kg-card-end: markdown--><blockquote>本文聚焦于云上重点资产的扫描攻击、云服务器总体攻击情况分析、热门漏洞及恶意程序的攻击威胁。</blockquote><!--kg-card-begin: markdown--><ul>\n<li><a href=\"https://netlab.360.com/zh/honeypot?ref=blog.netlab.360.com\">360高级</a></li></ul>",
|
||||
"published": "Wed, 11 May 2022 02:53:55 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "公有云网络安全威胁情报(202203)",
|
||||
"link": "https://blog.netlab.360.com/public-cloud-threat-intelligence-202203/",
|
||||
"author": "360Netlab",
|
||||
"description": "<h3 id=\"-\">概述</h3><blockquote>本文聚焦于云上重点资产的扫描攻击、云服务器总体攻击情况分析、热门漏洞及恶意程序的攻击威胁。</blockquote><ul><li><a href=\"https://netlab.360.com/zh/honeypot?ref=blog.netlab.360.com\">360高级</a></li></ul>",
|
||||
"published": "Tue, 19 Apr 2022 02:24:17 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "Fodcha, a new DDos botnet",
|
||||
"link": "https://blog.netlab.360.com/fodcha-a-new-ddos-botnet/",
|
||||
"author": "Hui Wang",
|
||||
"description": "<h2 id=\"overview\">Overview</h2><p>Recently, CNCERT and 360netlab worked together and discovered a rapidly spreading DDoS botnet on the Internet. The global infection looks fairly big as just in China there are more than 10,000 daily active bots (IPs) and alsomore than 100 DDoS victims beingtargeted on a daily basis. We named</p>",
|
||||
"published": "Wed, 13 Apr 2022 14:01:14 GMT",
|
||||
"source": "360 Netlab Blog"
|
||||
},
|
||||
{
|
||||
"title": "机器学习的逻辑回归模型",
|
||||
"link": "https://paper.seebug.org/3303/",
|
||||
"author": "",
|
||||
"description": ".katex img {\n display: block;\n position: absolute;\n width: 100%;\n height: inherit;\n }\n\n作者:0x7F@知道创宇404实验室\n日期:2025年2月28日\n1. 前言\n在「机器学习的线性回归模型」文章中,我们学习了监督学习中如何使用线性回归模型拟合连...",
|
||||
"published": "2025-03-13 15:37:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最憋屈的漏洞披露",
|
||||
"link": "https://paper.seebug.org/3304/",
|
||||
"author": "",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/Y8-wT88VnLeMUiD-HssPyw\n在网络安全领域,漏洞披露一直被视为保护用户的重要环节,但在现实中,这一过程却充满了争议和矛盾。究竟什么才算得上“负责任的披露”?当厂商在信息公开和补丁发布上占据主导地位,而安全研究者则需要耗费大量精力进行沟通与博弈,这一模式是否还能真正实现保护用户安全的初衷?...",
|
||||
"published": "2025-03-12 16:28:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最“安全”的防线",
|
||||
"link": "https://paper.seebug.org/3302/",
|
||||
"author": "",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/LaM5iz_EKbAK_lkaAcBshw\n在攻防对抗日益激烈的2024年,安全软件一直被视为企业安全防线的重要基石。然而,这些安全软件本身也可能存在漏洞,甚至被攻击者利用作为入侵的跳板来对用户造成危害。多年来,因为安全软件而导致的事故不禁让人产生一个疑问——安全软件真的可信吗?\n安全软件被滥用为攻击工...",
|
||||
"published": "2025-03-11 16:39:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最难以阻挡的攻防趋势",
|
||||
"link": "https://paper.seebug.org/3301/",
|
||||
"author": "",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/lUA03YjBiCAatcJh-bUHEQ\n近年来,漏洞攻防不断演进。从多年前仅需一个栈溢出就能攻破系统,到如今需要运用各种精妙的手法来突破系统的层层防御。“盾”与“矛”始终处于动态对抗:每当新的防御措施出现,新的攻击手段随之而来。防御机制的升级促使攻击者寻找新的突破口,而攻击方法的创新又推动着防御技术...",
|
||||
"published": "2025-03-10 16:19:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "机器学习的线性回归模型",
|
||||
"link": "https://paper.seebug.org/3300/",
|
||||
"author": "",
|
||||
"description": ".katex img {\n display: block;\n position: absolute;\n width: 100%;\n height: inherit;\n }\n\n作者:0x7F@知道创宇404实验室\n日期:2025年2月28日 \n1. 前言\n跟随着 ChatGPT 等大语言模型掀起的人工智能的浪潮,在这个时间点学习 A...",
|
||||
"published": "2025-03-07 15:22:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "Llama 的悖论:深入探索 Llama.cpp 的堆迷宫,从堆溢出到远程代码执行",
|
||||
"link": "https://paper.seebug.org/3299/",
|
||||
"author": "",
|
||||
"description": "作者:Patrick Peng \n译者:知道创宇404实验室翻译组\n原文链接:https://retr0.blog/blog/llama-rpc-rce\n我一直对 Llama.cpp 情有独钟,它堪称我在人工智能与机器学习研究领域孜孜以求的“终极目标”。不仅如此,能在如此复杂且成熟的人工智能项目中挖掘出堆栈/堆溢出导致的远程代码执行漏洞,听起来就格外酷炫。当然,我内心深处渴望在人工智能项目中...",
|
||||
"published": "2025-03-06 14:27:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "Emoji攻击:增强针对Judge LLMs检测的越狱攻击",
|
||||
"link": "https://paper.seebug.org/3297/",
|
||||
"author": "",
|
||||
"description": "作者:Zhipeng Wei, Yuqi Liu, N. Benjamin Erichson\n译者:知道创宇404实验室翻译组\n原文链接:https://arxiv.org/html/2411.01077v2\n摘要\n越狱(Jailbreaking)技术可以欺骗大型语言模型(LLMs),使其生成受限制的输出,从而构成严重威胁。其中一种防御方法是使用另一个 LLM 作为 Judge(裁判)来评估...",
|
||||
"published": "2025-03-04 17:37:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "模型序列化攻击",
|
||||
"link": "https://paper.seebug.org/3298/",
|
||||
"author": "",
|
||||
"description": "译者:知道创宇404实验室翻译组\n原文链接:https://github.com/protectai/modelscan/blob/main/docs/model_serialization_attacks.md\n机器学习(ML)模型是基于机器学习的应用程序的核心资产。安全地存储和检索模型对成功至关重要。根据使用的机器学习库,模型可以以多种常见格式保存。流行的选择包括:Pickle、HDF5...",
|
||||
"published": "2025-03-04 15:09:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "关于 Chat Template 注入方式的学习",
|
||||
"link": "https://paper.seebug.org/3296/",
|
||||
"author": "",
|
||||
"description": "作者: dawu@知道创宇404实验室\n日期: 2025年2月28日 \n1. 前言\n伴随着年后 DeepSeek R1 模型的火热,号称能运行 DeepSeek R1 “满血版” 的 Ktransformers 框架也受到了大量关注。在使用该框架和阅读相关源码时,我发现框架在借助聊天模版(chat template) 将用户输入转化为输入模型的 token 列表的过程中,可能会存在类似于拼...",
|
||||
"published": "2025-03-03 14:35:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "从零开始搭建:基于本地 DeepSeek 的 Web 蜜罐自动化识别",
|
||||
"link": "https://paper.seebug.org/3295/",
|
||||
"author": "",
|
||||
"description": "作者:wh0am1i@知道创宇404实验室\n日期:2025年2月28日 \n1. 前言\npocsuite3 框架可以通过 --dork 或 --dork-zoomeye 参数获取 ZoomEye 网络空间测绘平台的搜索引擎数据。但随着近几年网络空间领域的攻防对抗升级,导致网络空间中存在大量的蜜罐。为了过滤掉这些蜜罐,ZoomEye 中加入了自动标注蜜罐的识别算法, 同时 pocsuite3 ...",
|
||||
"published": "2025-02-28 14:18:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "DeepSeek 启示:深度揭秘基于 PTX 的 GPU 底层优化技术",
|
||||
"link": "https://paper.seebug.org/3294/",
|
||||
"author": "",
|
||||
"description": "作者:启明星辰ADLab\n原文链接:https://mp.weixin.qq.com/s/FVVes7UIK_OORUk3fXy9mQ\n一、概述\n近日,DeepSeek连续不断地开源了多个项目,一时间引发了关于GPU底层优化的热潮,这在如今国内算力被广泛打压的背景下,给我国在现代高性能计算(HPC)和人工智能(AI)领域带来了希望,其中尤其引人瞩目的是关于底层PTX优化技术引入,这在一定程度...",
|
||||
"published": "2025-02-27 15:24:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "银狐突袭!DeepSeek本地化部署暗藏“致命陷阱”",
|
||||
"link": "https://paper.seebug.org/3293/",
|
||||
"author": "",
|
||||
"description": "作者:启明星辰ADLab\n原文链接:https://mp.weixin.qq.com/s/VUzwaR7eti2YoNebGFz80A\n一、前言\n近期,国产大模型DeepSeek凭借其高效的推理能力、创新性的优化技术、低门槛本地化部署能力、灵活的开源商业授权等,迅速成为开源生态中的“现象级选手”。然而,技术普及的加速期往往伴随着网络安全攻防对抗的升级。当前,大量政府、企业和个人开发者在基于D...",
|
||||
"published": "2025-02-27 10:47:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "使用 DeepSeek-R1 在固件漏洞挖掘领域的新实践",
|
||||
"link": "https://paper.seebug.org/3292/",
|
||||
"author": "",
|
||||
"description": "作者:启明星辰ADLab\n原文链接:https://mp.weixin.qq.com/s/rZ4iGXs2O_xYD1yEOyu3CQ\n1. 前言\n在数字化时代,固件是硬件设备的核心软件组件,直接控制着硬件的运行状态和功能,其安全性至关重要。一旦固件存在安全漏洞,黑客即可利用来攻击设备的运行或者控制设备发起其它网络攻击,典型有Mirai病毒利用设备固件漏洞发起大规模的分布式拒绝服务。因此,挖...",
|
||||
"published": "2025-02-26 15:20:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "Fuzz 工作流解析与 AI 引入方案分享",
|
||||
"link": "https://paper.seebug.org/3291/",
|
||||
"author": "",
|
||||
"description": "作者:ghost461@知道创宇404实验室\n时间:2025年2月26日\n本文为知道创宇404实验室内部分享沙龙“404 Open Day”的议题内容,作为目前团队AI安全研究系列的一部分,分享出来与大家一同交流学习。\n1. 概述\n本文受 Google 安全博客的《Leveling Up Fuzzing: Finding more vulnerabilities with AI》启发,结合自...",
|
||||
"published": "2025-02-26 14:10:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "「深蓝洞察」2024年度最悲剧的后门",
|
||||
"link": "https://paper.seebug.org/3290/",
|
||||
"author": "",
|
||||
"description": "作者:DARKNAVY\n原文链接:https://mp.weixin.qq.com/s/BZtSTpTQbNiAY_KDhnqc8Q\n“看到了软件的源码,就意味着没有后门吗?”\n1983年的图灵奖颁奖仪式上,Ken Thompson抛出了这个问题。作为历史上唯三在40岁以下获得图灵奖的传奇之一,他在获奖演讲中向听众展示了如何通过在编译器中植入后门来骇入由无害源码编译得到的Unix系统。Ken...",
|
||||
"published": "2025-02-25 17:17:00",
|
||||
"source": "知道创宇404实验室"
|
||||
},
|
||||
{
|
||||
"title": "AI 帮你高效构建代码安全策略【大模型应用实践系列四】",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/213",
|
||||
"author": "",
|
||||
"description": "腾讯啄木鸟代码安全团队,依托混元大模型的超强代码理解和安全分析能力,在SQL注入威胁检测场景验证中,新增识别上百个漏洞检测策略,相比传统方法人效比提升3.8倍,在Github高star项目上斩获10+0day漏洞。",
|
||||
"published": "2025-01-08 10:26:57",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "AI猎手:我们用大模型挖到了0day漏洞!【大模型应用实践系列三】",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/212",
|
||||
"author": "",
|
||||
"description": "AI版“赏金猎人”登场,基于混元大模型能力打造的自动漏洞挖掘工具,7*24小时自动感知、追踪、挖橱0day。 AI猎人VS黑客的角逐战正式开始。",
|
||||
"published": "2025-01-03 10:23:17",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "AI助力!明文密码泄漏无处遁形【大模型应用实践系列二】",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/211",
|
||||
"author": "",
|
||||
"description": "本文聚焦于密钥硬编码的问题,分析了传统检测策略的缺陷,并详细介绍了大模型在该场景下的优势、检测实施方案和效果。我们将继续推出更多关于大模型在研发安全、网络安全、威胁情报等领域的应用探索与总结",
|
||||
"published": "2024-12-05 17:14:13",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "大模型应用实践(一):AI助力Code Review安全漏洞发现",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/210",
|
||||
"author": "",
|
||||
"description": "借助混元大模型,腾讯啄木鸟代码安全团队在代码评审(Code Review,下文简称CR)场景下的安全漏洞检出能力取得显著提升,日均发现和阻断300+个代码安全风险,极大提升了公司核心数据资产安全性。",
|
||||
"published": "2024-11-27 10:39:46",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "警惕Hugging Face开源组件风险被利用于大模型供应链攻击",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/209",
|
||||
"author": "",
|
||||
"description": "著名AI社区Hugging Face开源组件datasets存在不安全特性,可引发供应链后门投毒攻击风险。",
|
||||
"published": "2023-11-03 14:00:00",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "虚拟货币挖矿检测与防御",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/208",
|
||||
"author": "",
|
||||
"description": "从流量和主机层入手,分析挖矿木马的防御之策。",
|
||||
"published": "2021-11-18 18:00:58",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "安全通知|NPM官方仓库遭遇coa等恶意包投毒攻击",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/207",
|
||||
"author": "",
|
||||
"description": "腾讯洋葱入侵检测系统发现开源软件沙箱主机出现异常行为,跟进发现npm官方仓库的coa、rc被投毒攻击,已经在腾讯软件源紧急拦截相关版本。目前npm官方仓库已将相应版本的恶意包删除,但由于国内开源镜像站均同步npm官方仓库且存在缓存,所以恶意包还可能通过各个开源镜像站影响广大用户。",
|
||||
"published": "2021-11-05 21:31:07",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "云原生安全攻防|使用eBPF逃逸容器技术分析与实践",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/206",
|
||||
"author": "",
|
||||
"description": "在新版本容器运行时中适用的攻击手法,并使用新方式把“任意文件写”转化为“远程代码执行”。",
|
||||
"published": "2021-11-03 18:56:37",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "Ghostscript沙箱绕过(CVE-2021-3781)分析",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/205",
|
||||
"author": "",
|
||||
"description": "完整分析从ImageMagick到Ghostscript的攻击利用链",
|
||||
"published": "2021-10-29 18:40:35",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "实时中文语音克隆——开源项目MockingBird体验",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/204",
|
||||
"author": "",
|
||||
"description": "5秒内克隆生成任意声音?以语音克隆开源项目MockingBird为例看AI项目面临的安全风险",
|
||||
"published": "2021-10-27 22:06:51",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "关于BGP那些事儿",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/203",
|
||||
"author": "",
|
||||
"description": "这是Facebook创立以来最严重的一次网络访问事故,在这起故障中,我们又看到了BGP的身影",
|
||||
"published": "2021-10-19 18:10:52",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "红蓝对抗之隐蔽通信应用及防御",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/202",
|
||||
"author": "",
|
||||
"description": "腾讯蓝军和红军十多年案例经验、总结沉淀",
|
||||
"published": "2021-09-27 16:40:43",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "Web应用组件自动化发现的探索",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/201",
|
||||
"author": "",
|
||||
"description": "另一种方式的指纹识别",
|
||||
"published": "2021-09-17 19:30:59",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "云原生——容器和应用安全运营实践思考",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/200",
|
||||
"author": "",
|
||||
"description": "从安全攻击面出发,以防御视角分享我们在云原生安全运营上的一些实践和思考",
|
||||
"published": "2021-09-07 18:00:59",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "自动化数据分析下的威胁发现",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/199",
|
||||
"author": "",
|
||||
"description": "企业防御之安全运营数据分析",
|
||||
"published": "2021-08-16 18:41:00",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "可信安全网络 —— 安全左移之DDoS对抗",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/198",
|
||||
"author": "",
|
||||
"description": "DDoS对抗新思路",
|
||||
"published": "2021-07-28 18:13:13",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "攻防启示:Chromium组件风险剖析与收敛",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/197",
|
||||
"author": "",
|
||||
"description": "Chromium内核的安全问题,早已悄无声息地牵动着互联网生活方方面面。基于对实战经历的复盘,本文将从Chromium架构及安全机制概况入手,剖析Chromium组件在多场景下给企业带来的安全风险并一探收敛方案。",
|
||||
"published": "2021-07-15 10:30:58",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "腾讯 SOAR 的安全运营探索",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/196",
|
||||
"author": "",
|
||||
"description": "与业界先行者相比,我们数据面板、剧本等平台功能方面仍有一些差距,未来也会持续建设",
|
||||
"published": "2021-07-09 17:55:48",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "警惕!这种新型挖矿可能盯上你主机",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/195",
|
||||
"author": "",
|
||||
"description": "除了门罗币,这种不消耗CPU资源的虚拟货币可能成为黑产的新宠儿,提前预知,方能不乱阵脚。",
|
||||
"published": "2021-07-01 20:27:10",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "腾讯自研HIDS「洋葱」后台上云架构演进实践",
|
||||
"link": "https://security.tencent.com/index.php/blog/msg/194",
|
||||
"author": "",
|
||||
"description": "云计算时代,洋葱拥抱云原生方案实践,希望能为大家系统上云提供参考。",
|
||||
"published": "2021-06-17 18:16:08",
|
||||
"source": "腾讯安全响应中心"
|
||||
},
|
||||
{
|
||||
"title": "荣誉 | 美团SRC2024年终奖励荣耀揭晓",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493717&idx=1&sn=fe94bf647a29fff908cc7ed29b70554c&chksm=ec180986db6f80904efbb237256479db8ebb60e2521763cbbb272c604f641c3549211606bcc5&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "向每一位守护者致敬!",
|
||||
"published": "2025-01-17 18:01:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "美团SRC邀您领取新年礼盒啦!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493717&idx=2&sn=f317d3190e4e199c933d1b29fa2f2d94&chksm=ec180986db6f809093c190d72edcad5b3b289422052597427f2eeb42ea44a93a729aff84a87c&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "获取方式见文中。",
|
||||
"published": "2025-01-17 18:01:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "鸿蒙应用签名实操及机制探究",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493695&idx=1&sn=89a37bdee61841877d1acf28b8a68cbf&chksm=ec1809ecdb6f80faccbf32d3be7076832bfb6b0d443881e05d93cac96cecaad3952bdf8fba50&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "本文对鸿蒙公开资料进行了深入分析和解读,梳理了鸿蒙单框架应用的签名机制,拆解每一步的实操过程和背后的实现原理,并对源码分析整理签名的校验机制。",
|
||||
"published": "2024-12-31 10:01:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "白帽世界大会 | 美团SRC期待与您在澳门相见",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493590&idx=1&sn=0281d8d3faa07d26a91b338102cb7c61&chksm=ec180605db6f8f138853b493e0e34cf24d9ccc265a72fc721fba5cfbd25c0854f757b3cd0e16&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "HackProve World 2025,用真正的技术,验证数字世界的安全。",
|
||||
"published": "2024-12-19 17:31:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "年末冲刺!2024漏洞马拉松『美团站』正式启动",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493372&idx=1&sn=f8ed6cc9dc514805d164f9d47277e8f5&chksm=ec18072fdb6f8e39c609c95ac1b0aba49aa2e9f70246d4c7af7ce82ca6d40ee9caa7fef0e362&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "活动时间:即日起至2024年12月15日。",
|
||||
"published": "2024-12-03 18:30:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "活动|短视频激励系统专测开启!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493353&idx=1&sn=60d8aea7934fa17d1e2077e2b879d3ae&chksm=ec18073adb6f8e2cdb2c0881302bcad6094724119dd5f6d5e0ecccc18fc1e2323067d6d00593&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "活动时间:11月25日-11月28日",
|
||||
"published": "2024-11-25 10:00:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "活动|美团SRC七周年,多重惊喜派送中!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493342&idx=1&sn=5aadfd7e004ccab04ad3286741aeca6f&chksm=ec18070ddb6f8e1b739a0a4e922e09723ce21d5d296c78c97d8c69a515bcf67f4c84e27e7972&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "活动时间:11月11日10: 00-11月18日0: 00",
|
||||
"published": "2024-11-11 10:08:00",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "活动正式开启|美团SRC邀您加入双11安全保卫战",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493302&idx=1&sn=38e8eb7b46ba68d83932055efcf06386&chksm=ec180765db6f8e73f7e8e9039563065a99de826daeafcb49ee5b0231e48816907e306d43fe1c&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "美团SRC活动时间:2024.09.19-09.30",
|
||||
"published": "2024-09-18 19:36:05",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "你的中秋福利已上线!美团SRC预祝各位中秋佳节愉快",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493276&idx=1&sn=02f5b0a74938d0be8764ba9658a0c98e&chksm=ec18074fdb6f8e593725883103e1ae90af22dda6af3e178d008da8c28713a6d0ba252605396e&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "兑换时间:9月5日18:00起。",
|
||||
"published": "2024-09-05 11:42:42",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "美团安全25届秋招启动,心动offer等你拿!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493276&idx=2&sn=ca4080f1e1607bb22730e538f02ea6a0&chksm=ec18074fdb6f8e5920d56d573dd6c838afb76315ebd36dc1f113f5a747fdf584302ecd8faf0b&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "网申时间:即日起至2024年10月31日。",
|
||||
"published": "2024-09-05 11:42:42",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "美团安全亮相KCon 2024,分享RDI技术新视角",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493266&idx=1&sn=148ab2c53446796b415384e9fd0dbaf2&chksm=ec180741db6f8e572f536ff844ca8d39d378c9d8a24b6cdbaaad31101f21175ab9637b7f578d&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "RDI技术以其高效和隐蔽的特性,在恶意代码开发中占据了不可替代的地位,尤其是在现代C2架构中发挥着关键作用。",
|
||||
"published": "2024-09-04 10:27:03",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "美团安全25届秋招启动,心动offer等你拿!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493248&idx=1&sn=74436f59fe2d7b203814c0aa0c91800a&chksm=ec180753db6f8e45010393fcad6b673a46c7db73b98e93dbdff667495e798104c8ec3b8345b8&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "网申时间:即日起至2024年10月31日。",
|
||||
"published": "2024-08-28 10:27:44",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "美团安全团队在第五期移动互联网APP产品安全漏洞技术沙龙中分享移动应用自动化安全实践历程",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493233&idx=1&sn=fcbc3a07cee5cf64e3c6b24925e2bd46&chksm=ec1807a2db6f8eb4f9e072ab8c517a39542fe6943b282abfc2271cd3ac558ac504c019e15748&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "",
|
||||
"published": "2024-08-20 14:21:24",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "新机会,新挑战,新可能,美团信息安全部邀你加入~",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493119&idx=1&sn=ce5d6f489f9d802e5ff5075d90c1ca17&chksm=ec18042cdb6f8d3a4e15bdc3051d92275f75a65008e0b8ce8f0a67746aa967ad5e8cdd1be831&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "欢迎向我们投递简历或推荐身边朋友投递简历!",
|
||||
"published": "2024-07-29 14:37:08",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "活动 | 开店宝专测已开启,邀你参加!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493104&idx=1&sn=3f5514acce114a1dfeb40fbba5738023&chksm=ec180423db6f8d356d65dc19e7934dca55a1fb1c9ff7b8428f7962b13e552a13af3920ba89b0&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "活动时间:6月24日—6月30日",
|
||||
"published": "2024-06-24 10:06:08",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "美团安全团队携议题亮相CSOP大会,共探网络安全高效运营之道",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493090&idx=1&sn=8b1c7315ef4ae4b2331c0f75d181825e&chksm=ec180431db6f8d27893e8aa04f4f005c2dfa6ce34ad5d62215a6ce17fe070977e33e213ec309&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "议题聚焦于SOC平台的构建历程,从概念的萌芽到实践的落地,再到不断的优化升级各阶段进行深入探讨。",
|
||||
"published": "2024-05-17 18:54:11",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "招聘 | 美团安全实习生招聘正在进行中",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493059&idx=1&sn=362fa696530db9493fa8c165e6f64e6b&chksm=ec180410db6f8d06d8e74196d9ef89d31c92ce0964c8fddc638fe17e2642ff0b9806086b55e5&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "一起成长,一起BETTER!",
|
||||
"published": "2024-05-07 17:27:47",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "活动 | 优选专测,提供测试账号,速来!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493041&idx=1&sn=daf61012fec9f3aa6fd227dd1f39b828&chksm=ec180462db6f8d74fdff596bd8b60fab42607b31db7c8a820b9a1007af9036c59da29cc74151&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "4月23日至4月30日0:00,邀你参与优选业务专测!",
|
||||
"published": "2024-04-23 09:56:55",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "特别漏洞奖励,祝你挖洞把把都超神~",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493024&idx=1&sn=c0b762ef29c35ece879f1fdb7560c710&chksm=ec180473db6f8d65ce15c48fdcd8ef0c2525421c8f95a70f6cb7f7d282ccc304faf03ac0c8a8&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "",
|
||||
"published": "2024-03-26 19:58:18",
|
||||
"source": "微信公众号"
|
||||
},
|
||||
{
|
||||
"title": "3倍活动?戳这里!",
|
||||
"link": "https://mp.weixin.qq.com/s?__biz=MzI5MDc4MTM3Mg==&mid=2247493024&idx=2&sn=9ca5dd0591b7ffb8dd9cbd166d94826d&chksm=ec180473db6f8d65e4e4b185143fe292dc4aac665b4ae9e5607d14a79213d690aec68dce3daa&scene=58&subscene=0#rd",
|
||||
"author": "美团技术团队",
|
||||
"description": "",
|
||||
"published": "2024-03-26 19:58:18",
|
||||
"source": "微信公众号"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 1.7 MiB |
150
spider/baidu.py
@ -1,150 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
import json
|
||||
import time
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
from requests.exceptions import RequestException
|
||||
from loguru import logger
|
||||
|
||||
headers = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
|
||||
"Accept-Language": "en-US,en;q=0.9",
|
||||
"Cache-Control": "no-cache",
|
||||
"Connection": "keep-alive",
|
||||
"Pragma": "no-cache",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"Sec-Fetch-User": "?1",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"sec-ch-ua": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Windows"'
|
||||
}
|
||||
|
||||
def fetch_html(url, timeout=10):
|
||||
try:
|
||||
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:
|
||||
logger.warning(f"请求 {url} 时发生错误: {e}")
|
||||
|
||||
def normalize_pub_date(pub_date):
|
||||
# 检查是否为日期格式 2024-12-06
|
||||
if re.match(r'\d{4}-\d{2}-\d{2}', pub_date):
|
||||
return pub_date
|
||||
|
||||
# 检查是否为 '8天前' 格式
|
||||
days_ago_match = re.match(r'(\d+)天前', pub_date)
|
||||
if days_ago_match:
|
||||
days_ago = int(days_ago_match.group(1))
|
||||
return (datetime.now() - timedelta(days=days_ago)).strftime('%Y-%m-%d')
|
||||
|
||||
# 检查是否为 '小时前' 格式
|
||||
hours_ago_match = re.match(r'(\d+)小时前', pub_date)
|
||||
if hours_ago_match:
|
||||
return datetime.now().strftime('%Y-%m-%d')
|
||||
|
||||
# 如果都不匹配,返回原始值
|
||||
return pub_date
|
||||
|
||||
def parse_html(html_content):
|
||||
soup = BeautifulSoup(html_content, 'html.parser')
|
||||
|
||||
# 提取所有符合条件的<table>标签
|
||||
tables = soup.find_all('table', class_='result')
|
||||
|
||||
results = []
|
||||
|
||||
for table in tables:
|
||||
# 提取标题和链接
|
||||
h3_tag = table.find('h3', class_='t')
|
||||
if h3_tag:
|
||||
a_tag = h3_tag.find('a')
|
||||
title = a_tag.get_text(strip=True) if a_tag else "No title found"
|
||||
link = a_tag['href'] if a_tag else "No link found"
|
||||
else:
|
||||
title = "No title found"
|
||||
link = "No link found"
|
||||
|
||||
# 提取摘要
|
||||
td_element = table.find('td', class_='f')
|
||||
|
||||
# 从td中进一步查找div.realtime之后的所有文本
|
||||
realtime_div = td_element.find('div', class_='realtime')
|
||||
if realtime_div:
|
||||
text_parts = []
|
||||
for sibling in realtime_div.next_siblings:
|
||||
if sibling.name == 'font':
|
||||
break
|
||||
if isinstance(sibling, str) and sibling.strip():
|
||||
text_parts.append(sibling.strip())
|
||||
elif sibling.name and sibling.get_text(strip=True):
|
||||
text_parts.append(sibling.get_text(strip=True))
|
||||
|
||||
# 将所有文本片段合并成一个字符串,并整理格式
|
||||
cleaned_text = ' '.join(text_parts)
|
||||
|
||||
# 提取发布者
|
||||
publisher_tag = table.find('a', class_='m')
|
||||
publisher = publisher_tag.get_text(strip=True) if publisher_tag else "百度快照"
|
||||
|
||||
# 提取时间戳
|
||||
time_tag = table.find('div', class_='realtime')
|
||||
pub_date = time_tag.get_text(strip=True) if time_tag else "No timestamp found"
|
||||
pub_date = normalize_pub_date(pub_date)
|
||||
|
||||
results.append({
|
||||
"title": title,
|
||||
"link": link,
|
||||
"description": cleaned_text,
|
||||
"author": publisher,
|
||||
"pubDate": pub_date
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def baidu_main(keywords):
|
||||
all_results = {} # 用于存储所有关键词的结果
|
||||
|
||||
for keyword in keywords:
|
||||
url = f"https://www.baidu.com/s?tn=baidurt&cl=3&rn=20&ie=utf-8&rsv_bp=1&wd={keyword}"
|
||||
# print(url)
|
||||
html_content = fetch_html(url)
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
with open('./test.html', 'w', encoding='utf-8') as f:
|
||||
f.write(html_content)
|
||||
# print(html_content)
|
||||
|
||||
if html_content is None:
|
||||
logger.warning(f"无法获取百度搜索内容,跳过保存操作。关键词: {keyword}")
|
||||
continue
|
||||
|
||||
results = parse_html(html_content)
|
||||
# 移除非法代理对
|
||||
logger.info(f"关键词【{keyword}】的百度搜索内容保存成功。")
|
||||
all_results[keyword] = results # 将结果存储在字典中,以关键词为键
|
||||
time.sleep(5)
|
||||
|
||||
# 将所有结果转换为JSON格式
|
||||
json_results = json.dumps(all_results, ensure_ascii=False, indent=4)
|
||||
# print(json_results)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/baidu.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
with open('./resources/JSON/baidu.json', 'w', encoding='utf-8') as f:
|
||||
f.write(json_results)
|
||||
|
||||
if __name__ == "__main__":
|
||||
keywords = ["齐鲁银行"]
|
||||
baidu_main(keywords)
|
@ -11,8 +11,12 @@ headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Cache-Control": "no-cache",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0",
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-User": "?1",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9"
|
||||
}
|
||||
|
||||
@ -40,7 +44,7 @@ def fetch_rss(url, headers, timeout=60):
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
return None
|
||||
except RequestException as e:
|
||||
logger.warning(f"请求 {url} 时发生错误: {e}")
|
||||
logger.error(f"请求 {url} 时发生错误: {e}")
|
||||
return None # 返回None表示请求失败
|
||||
|
||||
def parse_rss(rss_content):
|
||||
@ -69,11 +73,11 @@ def seebug_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/seebug.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/seebug.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/seebug.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/seebug.json!")
|
||||
save_to_json(items, './JSON/seebug.json')
|
||||
logger.info("数据已保存到 ./JSON/seebug.json!")
|
||||
|
||||
# 4hou 爬虫
|
||||
def M_4hou_main():
|
||||
@ -87,11 +91,11 @@ def M_4hou_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/4hou.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/4hou.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/4hou.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/4hou.json!")
|
||||
save_to_json(items, './JSON/4hou.json')
|
||||
logger.info("数据已保存到 ./JSON/4hou.json!")
|
||||
|
||||
# 安全客 爬虫
|
||||
def anquanke_main():
|
||||
@ -105,11 +109,11 @@ def anquanke_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/anquanke.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/anquanke.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/anquanke.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/anquanke.json!")
|
||||
save_to_json(items, './JSON/anquanke.json')
|
||||
logger.info("数据已保存到 ./JSON/anquanke.json!")
|
||||
|
||||
# sec_wiki 爬虫
|
||||
def sec_wiki_main():
|
||||
@ -123,11 +127,11 @@ def sec_wiki_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/sec_wiki.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/sec_wiki.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/sec_wiki.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/sec_wiki.json!")
|
||||
save_to_json(items, './JSON/sec_wiki.json')
|
||||
logger.info("数据已保存到 ./JSON/sec_wiki.json!")
|
||||
|
||||
# 华为 爬虫
|
||||
def huawei_main():
|
||||
@ -141,11 +145,11 @@ def huawei_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/huawei.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/huawei.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/huawei.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/huawei.json!")
|
||||
save_to_json(items, './JSON/huawei.json')
|
||||
logger.info("数据已保存到 ./JSON/huawei.json!")
|
||||
|
||||
# 洞见微信聚合爬虫
|
||||
def doonsec_main():
|
||||
@ -159,11 +163,11 @@ def doonsec_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/doonsec.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/doonsec.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/doonsec.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/doonsec.json!")
|
||||
save_to_json(items, './JSON/doonsec.json')
|
||||
logger.info("数据已保存到 ./JSON/doonsec.json!")
|
||||
|
||||
# 奇安信攻防社区 爬虫
|
||||
def qianxin_main():
|
||||
@ -177,11 +181,11 @@ def qianxin_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/qianxin.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/qianxin.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/qianxin.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/qianxin.json!")
|
||||
save_to_json(items, './JSON/qianxin.json')
|
||||
logger.info("数据已保存到 ./JSON/qianxin.json!")
|
||||
|
||||
def run():
|
||||
seebug_main()
|
||||
@ -191,6 +195,3 @@ def run():
|
||||
huawei_main()
|
||||
doonsec_main()
|
||||
qianxin_main()
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
@ -29,7 +29,7 @@ def fetch_rss(url, headers, timeout=20):
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
return None
|
||||
except RequestException as e:
|
||||
logger.warning(f"请求 {url} 时发生错误: {e}")
|
||||
logger.error(f"请求 {url} 时发生错误: {e}")
|
||||
return None # 返回None表示请求失败
|
||||
|
||||
def parse_rss(rss_content):
|
||||
@ -62,13 +62,13 @@ def freebuf_main():
|
||||
items = parse_rss(rss_content)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/freebuf.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/freebuf.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
save_to_json(items, './resources/JSON/freebuf.json')
|
||||
logger.info("数据已保存到 ./resources/JSON/freebuf.json!")
|
||||
save_to_json(items, './JSON/freebuf.json')
|
||||
logger.info("数据已保存到 ./JSON/freebuf.json!")
|
||||
except Exception as e:
|
||||
logger.warning(f"解析或保存Freebuf RSS内容时发生错误: {e}")
|
||||
logger.error(f"解析或保存Freebuf RSS内容时发生错误: {e}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
freebuf_main()
|
@ -12,17 +12,9 @@ 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']
|
||||
|
||||
def load_github_config():
|
||||
with open('./config/github_config.yaml', 'r', encoding="utf-8") as file:
|
||||
config = yaml.safe_load(file)
|
||||
tool_list = config['tool_list']
|
||||
keyword_list = config['keyword_list']
|
||||
user_list = config['user_list']
|
||||
black_words = config['black_words']
|
||||
|
||||
return keyword_list, tool_list, user_list, black_words
|
||||
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:
|
||||
@ -41,26 +33,20 @@ def fetch_rss(url, timeout=10):
|
||||
return response.json()
|
||||
except requests.Timeout:
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.warning(f"请求 {url} 时发生错误: {e}")
|
||||
return None
|
||||
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, black_words):
|
||||
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)
|
||||
if result == None:
|
||||
time.sleep(3)
|
||||
continue
|
||||
n = len(result['items'])
|
||||
for i in range(0, n):
|
||||
for i in range(0, 20):
|
||||
description = result['items'][i]['description']
|
||||
|
||||
if description is None:
|
||||
@ -96,10 +82,10 @@ def github_main_keyword(key, black_words):
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(3)
|
||||
time.sleep(10)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './resources/JSON/github_keyword.json')
|
||||
save_to_json(all_results, './JSON/github_keyword.json')
|
||||
|
||||
|
||||
def github_main_repo(key):
|
||||
@ -108,9 +94,6 @@ def github_main_repo(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)
|
||||
if result == None:
|
||||
time.sleep(3)
|
||||
continue
|
||||
|
||||
commit = result[0] # 获取最新的提交记录
|
||||
description = commit['commit']['message']
|
||||
@ -142,55 +125,17 @@ def github_main_repo(key):
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(3)
|
||||
time.sleep(10)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './resources/JSON/github_repo.json')
|
||||
save_to_json(all_results, './JSON/github_repo.json')
|
||||
|
||||
def github_main_release(key):
|
||||
all_results = [] # 用于存储所有结果
|
||||
for keyword in key:
|
||||
logger.info(f"github_repo:项目【{keyword}】发版情况获取开始。")
|
||||
api_node = "https://api.github.com/repos/{}/releases?per_page=1".format(keyword)
|
||||
result = fetch_rss(api_node)
|
||||
if result == None:
|
||||
time.sleep(3)
|
||||
continue
|
||||
if not result:
|
||||
logger.warning(f"github_repo:项目【{keyword}】不存在版本发布情况。")
|
||||
time.sleep(3)
|
||||
continue
|
||||
|
||||
# print(result)
|
||||
# print(keyword)
|
||||
commit = result[0] # 获取最新的提交记录
|
||||
author = commit['author']['login']
|
||||
published_at = commit['published_at']
|
||||
link = commit['html_url']
|
||||
|
||||
# 将每个项目的详细信息存储在一个字典中
|
||||
project_info = {
|
||||
'link': link,
|
||||
'published_at': published_at,
|
||||
'author': author,
|
||||
'keyword': keyword
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(3)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './resources/JSON/github_release.json')
|
||||
|
||||
def github_main_user(key, black_words):
|
||||
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)
|
||||
if result == None:
|
||||
time.sleep(3)
|
||||
continue
|
||||
for i in range(0, len(result)):
|
||||
description = result[i]['description']
|
||||
|
||||
@ -227,20 +172,18 @@ def github_main_user(key, black_words):
|
||||
}
|
||||
# print(project_info)
|
||||
all_results.append(project_info)
|
||||
time.sleep(3)
|
||||
time.sleep(10)
|
||||
|
||||
# 将所有结果写入JSON文件
|
||||
save_to_json(all_results, './resources/JSON/github_user.json')
|
||||
save_to_json(all_results, './JSON/github_user.json')
|
||||
|
||||
def github_main(keyword_list, tool_list, user_list, black_words):
|
||||
def github_main():
|
||||
if keyword_list:
|
||||
github_main_keyword(keyword_list, black_words)
|
||||
github_main_keyword(keyword_list)
|
||||
if tool_list:
|
||||
github_main_repo(tool_list)
|
||||
github_main_release(tool_list)
|
||||
if user_list:
|
||||
github_main_user(user_list, black_words)
|
||||
github_main_user(user_list)
|
||||
|
||||
if __name__ == "__main__":
|
||||
keyword_list, tool_list, user_list, black_words = load_github_config()
|
||||
github_main(keyword_list, tool_list, user_list, black_words)
|
||||
github_main()
|
@ -12,6 +12,12 @@ headers = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Site": "none",
|
||||
"Sec-Fetch-User": "?1",
|
||||
"Priority": "u=0, i",
|
||||
"Te": "trailers",
|
||||
"Connection": "keep-alive"
|
||||
}
|
||||
@ -24,7 +30,7 @@ def fetch_html(url, headers=headers, timeout=10):
|
||||
except requests.Timeout:
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.warning(f"请求 {url} 时发生错误: {e}")
|
||||
logger.error(f"请求 {url} 时发生错误: {e}")
|
||||
|
||||
def parse_html(html_content):
|
||||
soup = BeautifulSoup(html_content, 'html.parser')
|
||||
@ -93,7 +99,7 @@ def sougou_wx_main(keywords):
|
||||
results = parse_html(html_content)
|
||||
# 移除非法代理对
|
||||
cleaned_results = [{k: remove_surrogates(v) for k, v in item.items()} for item in results]
|
||||
logger.info(f"关键词【{keyword}】的微信公众号-Sogou搜索内容保存成功。")
|
||||
logger.warning(f"关键词【{keyword}】的微信公众号-Sogou搜索内容保存成功。")
|
||||
all_results[keyword] = cleaned_results # 将结果存储在字典中,以关键词为键
|
||||
time.sleep(5)
|
||||
|
||||
@ -102,10 +108,10 @@ def sougou_wx_main(keywords):
|
||||
# print(json_results)
|
||||
|
||||
# 确保目录存在
|
||||
os.makedirs(os.path.dirname('./resources/JSON/sougou-wx.json'), exist_ok=True)
|
||||
os.makedirs(os.path.dirname('./JSON/sougou-wx.json'), exist_ok=True)
|
||||
|
||||
# 将解析后的数据保存到 JSON 文件
|
||||
with open('./resources/JSON/sougou-wx.json', 'w', encoding='utf-8') as f:
|
||||
with open('./JSON/sougou-wx.json', 'w', encoding='utf-8') as f:
|
||||
f.write(json_results)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
@ -1,86 +0,0 @@
|
||||
import feedparser
|
||||
import json
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from loguru import logger
|
||||
import yaml
|
||||
|
||||
def fetch_rss_data(feed_urls, wechat_urls):
|
||||
all_entries = []
|
||||
|
||||
# 处理通用 RSS 链接
|
||||
for rss_url in feed_urls:
|
||||
source, url = rss_url.split('|')
|
||||
feed = feedparser.parse(url)
|
||||
for entry in feed.entries:
|
||||
entry_data = {
|
||||
'title': entry.get('title', ''),
|
||||
'link': entry.get('link', ''),
|
||||
'author': entry.get('author', ''),
|
||||
'description': entry.get('summary', ''),
|
||||
'published': entry.get('published', ''),
|
||||
'source': source.strip()
|
||||
}
|
||||
|
||||
# 处理 published 字段
|
||||
if entry_data['published']:
|
||||
try:
|
||||
# 尝试解析 published 字段
|
||||
dt = datetime.strptime(entry_data['published'], '%a, %d %b %Y %H:%M:%S %z')
|
||||
dt_china = dt.astimezone(timezone(timedelta(hours=8)))
|
||||
entry_data['published'] = dt_china.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,直接使用 published 字段
|
||||
pass
|
||||
|
||||
all_entries.append(entry_data)
|
||||
|
||||
# 处理微信 RSS 链接
|
||||
for wx_url in wechat_urls:
|
||||
author, url = wx_url.split('|')
|
||||
feed = feedparser.parse(url)
|
||||
for entry in feed.entries:
|
||||
entry_data = {
|
||||
'title': entry.get('title', ''),
|
||||
'link': entry.get('link', ''),
|
||||
'author': author.strip(), # 使用 YAML 文件中指定的作者名
|
||||
'description': entry.get('summary', ''),
|
||||
'published': entry.get('published', ''),
|
||||
'source': '微信公众号'
|
||||
}
|
||||
|
||||
# 处理 published 字段
|
||||
if entry_data['published']:
|
||||
try:
|
||||
# 尝试解析 published 字段
|
||||
dt = datetime.strptime(entry_data['published'], '%a, %d %b %Y %H:%M:%S %z')
|
||||
dt_china = dt.astimezone(timezone(timedelta(hours=8)))
|
||||
entry_data['published'] = dt_china.strftime('%Y-%m-%d %H:%M:%S')
|
||||
except ValueError:
|
||||
# 如果解析失败,直接使用 published 字段
|
||||
pass
|
||||
|
||||
all_entries.append(entry_data)
|
||||
|
||||
return all_entries
|
||||
|
||||
def save_to_json(data, filename):
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
json.dump(data, f, ensure_ascii=False, indent=4)
|
||||
logger.info(f"通用爬虫数据已保存到 {filename}")
|
||||
|
||||
def uni_spider():
|
||||
# 读取 links.yaml 文件
|
||||
with open('./config/uni_rss.yaml', 'r', encoding='utf-8') as f:
|
||||
links = yaml.safe_load(f)
|
||||
|
||||
feed_urls = links.get('link', [])
|
||||
wechat_urls = links.get('wechat', [])
|
||||
|
||||
# 获取 RSS 数据
|
||||
rss_data = fetch_rss_data(feed_urls, wechat_urls)
|
||||
|
||||
# 保存到 JSON 文件
|
||||
save_to_json(rss_data, './resources/JSON/uni_rss.json')
|
||||
|
||||
if __name__ == "__main__":
|
||||
uni_spider()
|
@ -24,7 +24,7 @@ def fetch_rss(url, headers, timeout=20):
|
||||
logger.warning(f"请求 {url} 超时,跳过保存操作。")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.warning(f"请求 {url} 时发生错误: {e}")
|
||||
logger.error(f"请求 {url} 时发生错误: {e}")
|
||||
return None # 返回None表示请求失败
|
||||
|
||||
# 先知社区 爬虫
|
||||
@ -61,12 +61,12 @@ def xianzhi_main():
|
||||
json_data = json.dumps(entries_json, ensure_ascii=False, indent=4)
|
||||
|
||||
# 保存 JSON 数据到文件
|
||||
with open('./resources/JSON/xianzhi.json', 'w', encoding='utf-8') as json_file:
|
||||
with open('./JSON/xianzhi.json', 'w', encoding='utf-8') as json_file:
|
||||
json_file.write(json_data)
|
||||
|
||||
logger.info("数据已保存到 ./resources/JSON/xianzhi.json!")
|
||||
logger.info("数据已保存到 ./JSON/xianzhi.json!")
|
||||
except Exception as e:
|
||||
logger.warning(f"解析或保存先知社区RSS内容时发生错误: {e}")
|
||||
logger.error(f"解析或保存先知社区RSS内容时发生错误: {e}")
|
||||
|
||||
# 示例调用
|
||||
if __name__ == "__main__":
|
||||
|
13
test.py
@ -1,13 +0,0 @@
|
||||
import feedparser
|
||||
|
||||
feed_url = "https://security.tencent.com/index.php/feed/blog/0"
|
||||
feed = feedparser.parse(feed_url)
|
||||
|
||||
for entry in feed.entries:
|
||||
print(entry.title)
|
||||
print(entry.link)
|
||||
print(entry.id)
|
||||
print(entry.summary)
|
||||
print(entry.id)
|
||||
# 打印所有属性,找出正确的日期字段名
|
||||
# print(entry.keys())
|
105
web/app.py
@ -1,6 +1,4 @@
|
||||
from flask import Flask, jsonify, render_template
|
||||
from flask import send_from_directory
|
||||
from collections import deque
|
||||
import os
|
||||
import logging
|
||||
|
||||
@ -9,13 +7,10 @@ app = Flask(__name__)
|
||||
# 配置文件路径
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
PARENT_DIR = os.path.dirname(BASE_DIR) # 上一个文件夹
|
||||
SEC_NEWS_PATH = os.path.join(PARENT_DIR, 'resources', 'history', 'sec_news.md')
|
||||
TECH_PASSAGE_PATH = os.path.join(PARENT_DIR, 'resources', 'history', 'tech_passage.md')
|
||||
BAIDU_NEWS_PATH = os.path.join(PARENT_DIR, 'resources', 'history', 'baidu_news.md')
|
||||
GITHUB_PATH = os.path.join(PARENT_DIR, 'resources', 'history', 'github.md')
|
||||
WX_NEWS_PATH = os.path.join(PARENT_DIR, 'resources', 'history', 'wx_news.md')
|
||||
CORE_LOG_PATH = os.path.join(PARENT_DIR, 'resources', 'log', 'core.log')
|
||||
WEB_LOG_PATH = os.path.join(PARENT_DIR, 'resources', 'log', 'app.log')
|
||||
SEC_NEWS_PATH = os.path.join(PARENT_DIR, 'history', 'sec_news.md')
|
||||
TECH_PASSAGE_PATH = os.path.join(PARENT_DIR, 'history', 'tech_passage.md')
|
||||
CORE_LOG_PATH = os.path.join(PARENT_DIR, 'log', 'core.log')
|
||||
WEB_LOG_PATH = os.path.join(PARENT_DIR, 'log', 'app.log')
|
||||
|
||||
# 配置日志记录器
|
||||
logging.basicConfig(
|
||||
@ -24,50 +19,52 @@ logging.basicConfig(
|
||||
format= '%(asctime)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
logging.info("访问主页")
|
||||
return render_template('index.html')
|
||||
|
||||
@app.route('/static/favicon.ico')
|
||||
def favicon():
|
||||
return send_from_directory(os.path.join(app.root_path, 'templates/static'), 'favicon.ico')
|
||||
|
||||
def replace_content(content):
|
||||
content = content.replace('####', '###')
|
||||
content = content.replace(r"e:\Self-Tool-Code\PyBot", '.') # 修改: 使用原始字符串避免转义问题
|
||||
return content
|
||||
|
||||
def get_records(content, num_records=20, delimiter='-'*40):
|
||||
records = content.split(delimiter)
|
||||
selected_records = records[:num_records]
|
||||
return delimiter.join(selected_records)
|
||||
@app.route('/')
|
||||
def index():
|
||||
logging.info("访问主页")
|
||||
return render_template('index.html')
|
||||
|
||||
def read_last_lines(file_path, num_lines=100):
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
return deque(file, maxlen=num_lines)
|
||||
|
||||
def read_md_file(file_path):
|
||||
@app.route('/get-sec-news')
|
||||
def get_sec_news():
|
||||
logging.info(f"尝试打开安全新闻历史推送文件: {SEC_NEWS_PATH}")
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
with open(SEC_NEWS_PATH, 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
content = replace_content(content)
|
||||
content = get_records(content)
|
||||
return content, 200
|
||||
return jsonify({'content': content}), 200
|
||||
except FileNotFoundError:
|
||||
logging.error(f"文件缺失: {file_path}")
|
||||
return f"{os.path.basename(file_path)} 文件缺失!", 404
|
||||
logging.error(f"文件缺失: {SEC_NEWS_PATH}")
|
||||
return jsonify({'error': '安全新闻历史推送文件缺失!'}), 404
|
||||
except Exception as e:
|
||||
logging.error(f"读取时出错: {file_path}, 原因: {str(e)}")
|
||||
return str(e), 500
|
||||
logging.error(f"读取时出错: {SEC_NEWS_PATH}, 原因: {str(e)}")
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/get-tech-passage')
|
||||
def get_tech_passage():
|
||||
logging.info(f"尝试打开技术文章历史推送文件: {TECH_PASSAGE_PATH}")
|
||||
try:
|
||||
with open(TECH_PASSAGE_PATH, 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
content = replace_content(content)
|
||||
return jsonify({'content': content}), 200
|
||||
except FileNotFoundError:
|
||||
logging.error(f"文件缺失: {TECH_PASSAGE_PATH}")
|
||||
return jsonify({'error': '技术文章历史推送文件缺失!'}), 404
|
||||
except Exception as e:
|
||||
logging.error(f"读取时出错: {TECH_PASSAGE_PATH}, 原因: {str(e)}")
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/log')
|
||||
def get_log():
|
||||
logging.info(f"尝试打开核心日志文件: {CORE_LOG_PATH}")
|
||||
# 读取日志文件内容
|
||||
log_content = read_last_lines(CORE_LOG_PATH)
|
||||
log_content = '\n'.join(log_content)
|
||||
with open(CORE_LOG_PATH, 'r', encoding='utf-8') as file:
|
||||
log_content = file.read()
|
||||
# 将日志内容传递给模板
|
||||
return render_template('log.html', log_content=log_content)
|
||||
|
||||
@ -75,40 +72,12 @@ def get_log():
|
||||
def get_weblog():
|
||||
logging.info(f"尝试打开Web应用日志文件: {WEB_LOG_PATH}")
|
||||
with open(WEB_LOG_PATH, 'r') as file:
|
||||
log_content = deque(file, maxlen=100)
|
||||
log_content = '\n'.join(log_content)
|
||||
log_content = file.read()
|
||||
log_content = replace_content(log_content)
|
||||
return render_template('log.html', log_content=log_content)
|
||||
|
||||
@app.route('/get-sec-news')
|
||||
def get_sec_news():
|
||||
logging.info(f"尝试打开安全新闻历史推送文件: {SEC_NEWS_PATH}")
|
||||
content, status_code = read_md_file(SEC_NEWS_PATH)
|
||||
return jsonify({'content': content}), status_code
|
||||
|
||||
@app.route('/get-tech-passage')
|
||||
def get_tech_passage():
|
||||
logging.info(f"尝试打开技术文章历史推送文件: {TECH_PASSAGE_PATH}")
|
||||
content, status_code = read_md_file(TECH_PASSAGE_PATH)
|
||||
return jsonify({'content': content}), status_code
|
||||
|
||||
@app.route('/get-baidu-news')
|
||||
def get_baidu_news():
|
||||
logging.info(f"尝试打开百度新闻历史推送文件: {BAIDU_NEWS_PATH}")
|
||||
content, status_code = read_md_file(BAIDU_NEWS_PATH)
|
||||
return jsonify({'content': content}), status_code
|
||||
|
||||
@app.route('/get-github-news')
|
||||
def get_github_news():
|
||||
logging.info(f"尝试打开GitHub历史推送文件: {GITHUB_PATH}")
|
||||
content, status_code = read_md_file(GITHUB_PATH)
|
||||
return jsonify({'content': content}), status_code
|
||||
|
||||
@app.route('/get-wx-news')
|
||||
def get_wx_news():
|
||||
logging.info(f"尝试打开微信历史推送文件: {WX_NEWS_PATH}")
|
||||
content, status_code = read_md_file(WX_NEWS_PATH)
|
||||
return jsonify({'content': content}), status_code
|
||||
def run_server():
|
||||
app.run(host='0.0.0.0', port=5000)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, port=666) # 在生产环境中应设置为 False
|
||||
app.run(debug=False) # 在生产环境中应设置为 False
|
@ -4,7 +4,6 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>资讯推送Web端</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
|
||||
<!-- 引入 Layui 的 CSS -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui-src/dist/css/layui.css">
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||
@ -40,13 +39,6 @@
|
||||
#back-to-top:hover {
|
||||
background-color: #777;
|
||||
}
|
||||
#markdown-content a {
|
||||
color: blue;
|
||||
text-decoration: none; /* 可选:去掉下划线 */
|
||||
}
|
||||
#markdown-content a:hover {
|
||||
text-decoration: underline; /* 可选:鼠标悬停时显示下划线 */
|
||||
}
|
||||
|
||||
/* 移动端样式调整 */
|
||||
@media only screen and (max-width: 600px) {
|
||||
@ -63,46 +55,13 @@
|
||||
font-size: 14px;
|
||||
padding: 8px;
|
||||
}
|
||||
#markdown-content a {
|
||||
color: blue;
|
||||
text-decoration: none; /* 可选:去掉下划线 */
|
||||
}
|
||||
#markdown-content a:hover {
|
||||
text-decoration: underline; /* 可选:鼠标悬停时显示下划线 */
|
||||
}
|
||||
|
||||
/* 按钮样式调整 */
|
||||
#button-container {
|
||||
flex-direction: column; /* 换行显示按钮 */
|
||||
align-items: center; /* 按钮居中对齐 */
|
||||
}
|
||||
#button-container .layui-btn {
|
||||
margin: 5px 0; /* 增加按钮间距 */
|
||||
width: 90%; /* 调整按钮宽度 */
|
||||
max-width: 300px; /* 设置最大宽度 */
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="layui-container">
|
||||
<center><h1 class="layui-title" id="page-title">历史推送读取</h1><br>
|
||||
<!-- 折叠面板 -->
|
||||
<div class="layui-collapse" lay-filter="test">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">选择监控源新闻类型</h2>
|
||||
<div class="layui-colla-content">
|
||||
<div id="button-container" class="layui-btn-group">
|
||||
<button id="sec-news-btn" class="layui-btn">安全新闻</button>
|
||||
<button id="tech-passage-btn" class="layui-btn">技术文章</button>
|
||||
<button id="baidu-news-btn" class="layui-btn">百度新闻</button>
|
||||
<button id="github-news-btn" class="layui-btn">GitHub新闻</button>
|
||||
<button id="wx-news-btn" class="layui-btn">微信新闻</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h4>为保证网页运作性能,默认仅读取前20条记录,若您有需求可自行更改app.py</h4></center>
|
||||
<button id="toggle-fetch-btn" class="layui-btn">切换读取源</button><br></center>
|
||||
<div id="markdown-content" class="layui-card-body"></div>
|
||||
</div>
|
||||
|
||||
@ -112,48 +71,33 @@
|
||||
<!-- 引入 Layui 的 JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/layui-src/dist/layui.js"></script>
|
||||
<script>
|
||||
layui.use(['layer', 'element'], function(){
|
||||
layui.use(['layer'], function(){
|
||||
var layer = layui.layer;
|
||||
var element = layui.element;
|
||||
|
||||
var buttonMap = {
|
||||
'sec-news-btn': '/get-sec-news',
|
||||
'tech-passage-btn': '/get-tech-passage',
|
||||
'baidu-news-btn': '/get-baidu-news',
|
||||
'github-news-btn': '/get-github-news',
|
||||
'wx-news-btn': '/get-wx-news'
|
||||
};
|
||||
|
||||
var currentUrl = '/get-sec-news';
|
||||
var titleMap = {
|
||||
'/get-sec-news': '安全新闻',
|
||||
'/get-tech-passage': '技术文章',
|
||||
'/get-baidu-news': '百度新闻',
|
||||
'/get-github-news': 'GitHub监控',
|
||||
'/get-wx-news': '微信文章监控'
|
||||
'/get-tech-passage': '技术文章'
|
||||
};
|
||||
|
||||
function updateTitle(url) {
|
||||
document.getElementById('page-title').innerText = titleMap[url] || '历史推送读取';
|
||||
}
|
||||
|
||||
function fetchContent(url, buttonId) {
|
||||
// Disable all buttons
|
||||
Object.keys(buttonMap).forEach(key => {
|
||||
document.getElementById(key).disabled = false;
|
||||
});
|
||||
// Enable the clicked button
|
||||
document.getElementById(buttonId).disabled = true;
|
||||
document.getElementById('toggle-fetch-btn').addEventListener('click', function() {
|
||||
if (currentUrl === '/get-sec-news') {
|
||||
currentUrl = '/get-tech-passage';
|
||||
} else {
|
||||
currentUrl = '/get-sec-news';
|
||||
}
|
||||
|
||||
updateTitle(url);
|
||||
updateTitle(currentUrl);
|
||||
|
||||
fetch(url)
|
||||
fetch(currentUrl)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.content) {
|
||||
const htmlContent = marked.parse(data.content);
|
||||
document.getElementById('markdown-content').innerHTML = htmlContent;
|
||||
// 添加这一行代码
|
||||
addTargetBlankToLinks();
|
||||
} else {
|
||||
document.getElementById('markdown-content').innerHTML = '<p>加载历史推送文件时出错!(推送历史记录为空)</p>';
|
||||
}
|
||||
@ -161,25 +105,27 @@
|
||||
.catch(error => {
|
||||
console.error('获取源文件失败:', error);
|
||||
document.getElementById('markdown-content').innerHTML = '<p>无法加载历史推送文件!</p>';
|
||||
layer.msg('加载资源失败', {icon: 5});
|
||||
});
|
||||
}
|
||||
|
||||
// Add event listeners to buttons
|
||||
Object.keys(buttonMap).forEach(key => {
|
||||
document.getElementById(key).addEventListener('click', function() {
|
||||
fetchContent(buttonMap[key], key);
|
||||
// Check if the device is mobile
|
||||
if (isMobileDevice()) {
|
||||
// Collapse the panel
|
||||
element.collapse('hide', 'test', 0);
|
||||
}
|
||||
layer.msg('Failed to load markdown.', {icon: 5});
|
||||
});
|
||||
});
|
||||
|
||||
// Initial fetch on page load
|
||||
var initialButtonId = 'sec-news-btn'; // Default button
|
||||
fetchContent(buttonMap[initialButtonId], initialButtonId);
|
||||
updateTitle(currentUrl);
|
||||
|
||||
fetch(currentUrl)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.content) {
|
||||
const htmlContent = marked.parse(data.content);
|
||||
document.getElementById('markdown-content').innerHTML = htmlContent;
|
||||
} else {
|
||||
document.getElementById('markdown-content').innerHTML = '<p>加载历史推送文件时出错!(推送历史记录为空)</p>';
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('获取源文件失败:', error);
|
||||
document.getElementById('markdown-content').innerHTML = '<p>无法加载历史推送文件!</p>';
|
||||
layer.msg('Failed to load markdown.', {icon: 5});
|
||||
});
|
||||
|
||||
// 显示或隐藏返回顶部按钮
|
||||
@ -200,23 +146,7 @@
|
||||
document.body.scrollTop = 0;
|
||||
document.documentElement.scrollTop = 0;
|
||||
});
|
||||
|
||||
// 检测是否为移动设备
|
||||
function isMobileDevice() {
|
||||
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
||||
}
|
||||
|
||||
function addTargetBlankToLinks() {
|
||||
var links = document.querySelectorAll('#markdown-content a');
|
||||
links.forEach(function(link) {
|
||||
link.setAttribute('target', '_blank');
|
||||
});
|
||||
}
|
||||
|
||||
// 在页面加载完成后调用该函数
|
||||
window.onload = function() {
|
||||
addTargetBlankToLinks();
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -22,7 +22,6 @@
|
||||
<body>
|
||||
<div class="layui-container">
|
||||
<h1 class="layui-title">程序运行日志</h1>
|
||||
<h4>为保证网页运作性能,默认仅读取后100条记录,若您有需求可自行更改app.py</h4><br>
|
||||
<pre>{{ log_content }}</pre>
|
||||
<div id="markdown-content" class="layui-card-body"></div>
|
||||
</div>
|
||||
|
@ -5,20 +5,20 @@
|
||||
config.yaml: 配置各模块参数以及Token密钥
|
||||
check_config.py: 核查配置信息并获取到配置信息返回给核心程序
|
||||
|
||||
- ./resources/log
|
||||
- ./log
|
||||
app.py: web运行日志
|
||||
core.py: 程序运行日志
|
||||
|
||||
- ./spider
|
||||
- ./media
|
||||
爬取RSS源以及信息源的json数据并保存
|
||||
|
||||
- ./resources/JSON
|
||||
- ./JSON
|
||||
存储获取到的原始json数据
|
||||
|
||||
- ./GotoSend
|
||||
对获取到的json数据进行处理,将其存储值db文件内
|
||||
|
||||
- ./resources/db
|
||||
- ./db
|
||||
存储处理过后的数据
|
||||
|
||||
- ./SendCore
|
||||
@ -27,8 +27,8 @@ FeishuSendBot.py: 飞书推送核心程序
|
||||
MailSendBot.py: 邮件推送核心程序
|
||||
QiweiSendBot.py: 企业微信推送核心程序
|
||||
|
||||
- ./resources/history
|
||||
- ./history
|
||||
存储历史推送记录为markdown文件
|
||||
|
||||
- ./web
|
||||
- ./Web
|
||||
网页运行程序
|
@ -1,22 +0,0 @@
|
||||
### 设计思路
|
||||
前情提要:百度搜索的爬取处理逻辑和搜狗-微信公众号的逻辑基本一致,但是百度搜索杂系数太大,存在大量不相关内容,所以使用百度的一个参数进行调整。
|
||||
api地址:
|
||||
www.baidu.com/s?wd={关键词}&cl=3&pn=1&ie=utf-8&rn=20&tn=baidurt
|
||||
- wd={关键词}:设置查询关键词
|
||||
- cl=3:查询类型,3为网页,2为图片,默认为3
|
||||
- pn=1:指定查询页数
|
||||
- rn=20:每页显示数量
|
||||
- ie=utf-8:指定查询编码格式
|
||||
- tn=baidurt:设置为简化格式,爬虫友好化
|
||||
|
||||
### 速率限制
|
||||
建议设置高每页数量,减小搜索次数以规避反爬虫措施。
|
||||
|
||||
### 使用技术
|
||||
- python-bs4网页解析
|
||||
- python-sqlite联动
|
||||
- python-request爬虫
|
||||
- sqlite筛选
|
||||
|
||||
### 问题阐述
|
||||
- 百度抓取的文章若是时间是近日,则不会显示具体时间,而是显示【*天前】,需要处理
|
@ -1,40 +0,0 @@
|
||||
### 个人监测源接入
|
||||
#### 配置信息
|
||||
- 路径:./config/
|
||||
- 配置输出:参考下面函数
|
||||
```python
|
||||
def get_debug_config(): # 函数名称,获取调试配置信息
|
||||
with open('./config/config.yaml', 'r', encoding="utf-8") as file: # 获取配置文件路径
|
||||
config = yaml.safe_load(file)
|
||||
debug = f"{config['debug']}" # 加载需要的配置
|
||||
|
||||
return debug # 返回配置信息
|
||||
```
|
||||
|
||||
#### 爬虫程序
|
||||
- 路径:./spider/
|
||||
- 开发方法:使用普通爬虫程序,然后提取其中的有用信息以json格式存储于./resources/JSON/中
|
||||
|
||||
#### 分析程序
|
||||
- 路径:./GotoSend/
|
||||
- 开发方法:将json文件中各元素依次存储于./resources/db/内(利用sqlite技术,存储过程中记得将时间格式化:年月日 时分秒),使用cursor查询数据库中符合筛选条件的文章,最后构造发送文本,以markdown+数列的形式返回(return)。
|
||||
###### 注意事项:RSS类订阅信息大多结构类似,仅需复制其他RSS源爬虫(如common.py)进行保留字段删改即可,在分析模块中仅需处理时间格式并且注意字段的删改即可复用,然后可以现在单独创建函数,也可以选择合并入send_job_RSS函数中
|
||||
|
||||
#### 核心程序
|
||||
- 路径:./Core.py
|
||||
- 开发方法:先引入爬虫和分析模块(import),直接创建新函数,然后再main_loop函数中执行即可
|
||||
参考代码:
|
||||
```python
|
||||
from config.check_config import get_core_config, get_debug_config, get_kewords_config # 引入配置信息
|
||||
from spider.sougou_wx import sougou_wx_main # 引入爬虫模块
|
||||
from GotoSend.sougou_wx import Src_sougou_wx # 引入分析模块
|
||||
|
||||
def send_job_SX(): # 创建新函数
|
||||
Sogou_WX = get_kewords_config('Sogou_WX') # 获取配置信息
|
||||
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) # 进入筛选程序分发到各渠道
|
||||
```
|
||||
- 温馨提示:您还可更改send_first_message函数,使程序的首次运行提示更加符合程序的运行。
|