__main__ CLI 入口
🚪 r0capture.py 的命令行入口:解析参数、配置日志、调用 ssl_log。
📎 源码在线查看:
r0capture.py#L515-L576(__main__)
流程
ArgParser 自定义错误
python
class ArgParser(argparse.ArgumentParser):
def error(self, message):
print("ssl_logger v" + __version__)
print("by " + __author__)
print("Modified by BigfaceCat")
print("Error: " + message)
print()
print(self.format_help().replace("usage:", "Usage:"))
self.exit(0)重写 error(),参数错误时不抛栈,而是打印版本 + 错误 + 帮助后 exit(0)。
为什么 exit(0) 而非 exit(2)
argparse 默认 exit(2)。这里改成 exit(0) 是为了在脚本/CI 里调用 r0capture 时,参数错误不被当作致命错误。教学场景的友好取舍。
参数注册
python
parser = ArgParser(add_help=False, description="Decrypts and logs a process's SSL traffic.",
formatter_class=argparse.RawDescriptionHelpFormatter, epilog=r"""...""")
args = parser.add_argument_group("Arguments")
args.add_argument("-pcap", '-p', ...)
args.add_argument("-host", '-H', ...)
args.add_argument("-verbose", "-v", ...)
args.add_argument("process", ...)
args.add_argument("-ssl", ...)
args.add_argument("--isUsb", "-U", ...)
args.add_argument("--isSpawn", "-f", ...)
args.add_argument("-wait", "-w", ...)
args.add_argument("--selftest", ...)add_help=False 关闭默认 -h,自己控制帮助输出。详见 CLI 参数总表。
文件日志配置
python
logger.add(
f"{parsed.process.replace('.','_')}-{int(time.time())}.log",
rotation="500MB",
encoding="utf-8",
enqueue=True,
retention="10 days"
)| 选项 | 值 | 作用 |
|---|---|---|
| 文件名 | <进程名>-<时间戳>.log | 进程名里的 . 换成 _ 避免路径歧义 |
| rotation | 500MB | 单文件超 500MB 自动轮转 |
| encoding | utf-8 | 多语言流量不乱码 |
| enqueue | True | 多线程安全写入(frida 消息线程 + 主线程) |
| retention | 10 days | 10 天后自动清理 |
调用 ssl_log
python
ssl_log(
int(parsed.process) if parsed.process.isdigit() else parsed.process,
parsed.pcap,
parsed.host,
parsed.verbose,
isUsb=parsed.isUsb,
isSpawn=parsed.isSpawn,
ssllib=parsed.ssl,
wait=parsed.wait,
selftest=parsed.selftest
)进程参数:纯数字 → int(PID),否则 → str(应用名)。