问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
奇安信攻防社区文章转换工具
安全工具
社区提供的md在线写作编辑框对我来说实在是太小了,并且将本地图片文件上传到编辑框的过程实在是体验不佳,所以写了一个文章转换脚本,脚本编写的过程也是提供给各位师傅开发工具的一点点思路。
工具目的 ---- 1. 解决编写文章时将本地图片上传到在线编辑框的繁琐,特别是写文章的时候,在线编辑图片上传完成时会自动定位到文章开头,又得慢慢往下拉页面... 2. 专注于文章创作 适合人群 ---- - 喜欢在本地用`Typora`工具 md 写作的师傅 脚本编写 ---- 这里一共有两个文件夹和两个文件 > old\_file:用来存放本地编写的原md文件 > > new\_file:运行脚本后生成的新md文件 > > config.ini:配置文件 > > convert.py:python脚本 其实想法也很简单,首先读取 old\_file 文件夹下的原md文件,并且使用正则去提取其中的本地图片路径存进列表中 ```python def old_file_read(file_name): file = open("./old_file/"+file_name, 'r', encoding="utf-8").read() file = urllib.parse.unquote(file) return file def get_image(file_name): short_file_name = file_name.split(".")[0] file_content = old_file_read(file_name) img_pattern = r'(!\[.*?\]\({0}\.assets/image-.*?.png\))'.format(short_file_name) image_list = re.findall(img_pattern, file_content) return image_list ``` 接着就是写请求将图片进行上传,并且提取返回包中的图片路径存在列表中 ```python def upload_img(file_name): img_list = get_image(file_name) dir_list = [] img_path_list = [] for i in img_list: short_file_name = file_name.split(".")[0] img_pattern = r'({0}\.assets/image-.*?.png)'.format(short_file_name) dir = re.findall(img_pattern, i) print(dir) dir_list.extend(dir) for i in dir_list: i = str(i) real_file = "./old_file/" + i headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0", "Host": "forum.butian.net", "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "X-CSRF-TOKEN": config['settings']['X-CSRF-TOKEN'], "Connection": "close", "Referer": "https://forum.butian.net/share/create", "Cookie": config['settings']['cookie'] } pattern = r"(image-.*?.png)" img_name = re.search(pattern, i).group() res = requests.post(url="https://forum.butian.net/image/uploadS3", headers=headers, files ={"file": open(real_file,"rb")}, verify=False) img_url = res.text print(f"\033[1;35m[+]{file_name} upload success! >> \033[0m" + img_url) img_path = f"![{img_name}]" + f"({img_url})" img_path_list.append(img_path) return img_path_list ``` 然后接下来将原文件中的本地图片路径替换为上传至奇安信攻防社区图床后的图片路径,并且生成新文件到 new\_file 文件夹中 ```python def custom_make_translation(text, translation): regex = re.compile('|'.join(map(re.escape, translation))) return regex.sub(lambda match: translation[match.group(0)], text) def create_file(file_name): content = old_file_read(file_name) img_list = get_image(file_name) if img_list: path_list = upload_img(file_name) dicts = dict() for i,j in zip(img_list,path_list): dicts[i]=j content = custom_make_translation(content, dicts) new_file = open("./new_file/"+file_name, 'w') print(f"\033[1;32m[ok]{file_name} create success!\033[0m") new_file.write(content) ``` 完整代码如下 ```python ''' Author: dota_st blog: www.wlhhlc.top ''' import requests import re import configparser import warnings import os import urllib.parse warnings.filterwarnings("ignore") config = configparser.ConfigParser() config.read("config.ini") def old_file_read(file_name): file = open("./old_file/"+file_name, 'r', encoding="utf-8").read() file = urllib.parse.unquote(file) return file def get_image(file_name): short_file_name = file_name.split(".")[0] file_content = old_file_read(file_name) img_pattern = r'(!\[.*?\]\({0}\.assets/image-.*?.png\))'.format(short_file_name) image_list = re.findall(img_pattern, file_content) return image_list def upload_img(file_name): img_list = get_image(file_name) dir_list = [] img_path_list = [] for i in img_list: short_file_name = file_name.split(".")[0] img_pattern = r'({0}\.assets/image-.*?.png)'.format(short_file_name) dir = re.findall(img_pattern, i) print(dir) dir_list.extend(dir) for i in dir_list: i = str(i) real_file = "./old_file/" + i headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0", "Host": "forum.butian.net", "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "X-CSRF-TOKEN": config['settings']['X-CSRF-TOKEN'], "Connection": "close", "Referer": "https://forum.butian.net/share/create", "Cookie": config['settings']['cookie'] } pattern = r"(image-.*?.png)" img_name = re.search(pattern, i).group() res = requests.post(url="https://forum.butian.net/image/uploadS3", headers=headers, files ={"file": open(real_file,"rb")}, verify=False) img_url = res.text print(f"\033[1;35m[+]{file_name} upload success! >> \033[0m" + img_url) img_path = f"![{img_name}]" + f"({img_url})" img_path_list.append(img_path) return img_path_list def custom_make_translation(text, translation): regex = re.compile('|'.join(map(re.escape, translation))) return regex.sub(lambda match: translation[match.group(0)], text) def create_file(file_name): content = old_file_read(file_name) img_list = get_image(file_name) if img_list: path_list = upload_img(file_name) dicts = dict() for i,j in zip(img_list,path_list): dicts[i]=j content = custom_make_translation(content, dicts) new_file = open("./new_file/"+file_name, 'w') print(f"\033[1;32m[ok]{file_name} create success!\033[0m") new_file.write(content) def main(): file_list = os.listdir("./old_file/") files = " ".join(file_list) logo = r""" ____ _ _ _ / __ \ /\ | | (_) | | | | | | __ ___ __ / \ _ __| |_ _ ___| | ___ | | | |/ _` \ \/ / / /\ \ | '__| __| |/ __| |/ _ \ | |__| | (_| |> < / ____ \| | | |_| | (__| | __/ \___\_\\__,_/_/\_\/_/ \_\_| \__|_|\___|_|\___| Powered by dota_st Blog's: https://www.wlhhlc.top/ """ print(logo) print(f"\033[1;34m[*]scan file_dir: {files}\033[0m") for i in file_list: if os.path.exists("./new_file/" + i): pass elif ".assets" in i: pass else: create_file(i) if __name__ == '__main__': main() ``` 使用方法 ---- 首先在`config.ini`文件中填写自己的账号cookie(注意:如果抓包获取到的cookie中带有url编码,请进行url解码在填写) 其次就是在 old\_file 文件夹中新建和编写我们的 md 文章,然后`Typora`对图片设置如下相对路径规则 ![image-20220130005724484.png](https://shs3.b.qianxin.com/attack_forum/2022/01/attach-10bdf70f6695219ed09d8d575b27628f7035a2dc.png) 这样当我们截图图片后`crtl+v`粘贴到md中时,会自动存在当前 md 文件的同级目录下,并且其生成的图片文件夹命名格式为`md文件名.assert` ![image-20220130010011970.png](https://shs3.b.qianxin.com/attack_forum/2022/01/attach-5bb61bd96bb91419b31325f134f6a2f611a45af7.png) 编写完后,运行脚本便会在 new\_file 文件夹下生成转换后的 md 文件,打开复制内容粘贴到奇安信攻防社区中发布文章即可。运行效果如下 ![image-20220130010213572.png](https://shs3.b.qianxin.com/attack_forum/2022/01/attach-9bf6c2f5a8ab6aeafb7bd1be891494c53b62d4b4.png) 工具支持批量转换,已打包至github:<https://github.com/dota-st/QaxArticle> 总结 -- 上面便是编写一个工具的过程及思路,该工具旨在提高编写文章的舒适感,希望能对师傅们提供绵薄之力。
发表于 2022-02-07 14:05:56
阅读 ( 6688 )
分类:
安全工具
2 推荐
收藏
5 条评论
pphua
2022-02-07 18:21
谢谢 方便多了 虽然不用Typora
请先
登录
后评论
天禧信安
2022-02-08 09:59
NB
请先
登录
后评论
dota_st
2022-02-08 18:35
小脚本而已,师傅谬赞了
请先
登录
后评论
考不过刘乐琪不改名
2022-02-10 12:54
NB
请先
登录
后评论
JOHNSON
2022-02-18 00:53
NB
请先
登录
后评论
请先
登录
后评论
dota_st
9 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!