show_banner() 与 stoplog()
🎨 辅助函数:启动时打印 banner,退出时清理资源。
📎 源码在线查看:
r0capture.py#L111-L123(show_banner)
show_banner
python
def show_banner():
colors = ['bright_red', 'bright_green', 'bright_blue', 'cyan', 'magenta']
try:
click.style('color test', fg='bright_red')
except:
colors = ['red', 'green', 'blue', 'cyan', 'magenta']
try:
columns = get_terminal_size().columns
if columns >= len(banner.splitlines()[1]):
for line in banner.splitlines():
click.secho(line, fg=random.choice(colors))
except:
pass逻辑
- 色板探测:先
click.style('color test', fg='bright_red')探测终端是否支持 bright 色,不支持则退回普通色板 - 宽度检查:
get_terminal_size().columns取终端宽度,仅当宽度 ≥ banner 最长行才打印(避免窄终端里折行难看) - 逐行随机色:每行
click.secho用random.choice(colors)选一种颜色 - 全程 try/except:任何异常都静默吞掉,保证 banner 失败也不影响抓包
banner 内容
ASCII art 的 r0capture 字样 + 项目地址 https://github.com/r0ysue/r0capture。
stoplog
python
def stoplog(signum, frame):
print('You have stoped logging.')
session.detach()
if pcap:
pcap_file.flush()
pcap_file.close()
exit()注册
python
signal.signal(signal.SIGINT, stoplog)
signal.signal(signal.SIGTERM, stoplog)清理顺序
session.detach()—— 断开与设备端的脚本会话,触发 hook 卸载pcap_file.flush()—— 双保险,确保 pcap 落盘(虽然 open 时已是无缓冲)pcap_file.close()—— 关闭文件exit()—— 退出进程