Skip to content

__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进程名里的 . 换成 _ 避免路径歧义
rotation500MB单文件超 500MB 自动轮转
encodingutf-8多语言流量不乱码
enqueueTrue多线程安全写入(frida 消息线程 + 主线程)
retention10 days10 天后自动清理

调用 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(应用名)。

相关文档 ​

基于 VitePress 构建 · 教学用途