https://docs.python.org/zh-cn/3.14/library/argparse.html
核心四部曲
1 2 3 4
| import argparse parser = argparse.ArgumentParser() parser.add_argument() args = parser.parse_args()
|
简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import argparse
parser = argparse.ArgumentParser(description="这是一个打招呼的测试工具")
parser.add_argument("name", help="请输入你的名字")
args = parser.parse_args()
print(f"你好, {args.name}!")
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import argparse
parser = argparse.ArgumentParser(description="模拟端口扫描配置")
parser.add_argument("host", help="目标主机的IP地址")
parser.add_argument("-p", "--port", type=int, default=80, help="目标端口 (默认: 80)")
parser.add_argument("-v", "--verbose", action="store_true", help="是否显示详细日志")
args = parser.parse_args()
print(f"[*] 正在准备扫描主机: {args.host}") print(f"[*] 目标端口: {args.port}")
if args.verbose: print("[+] 详细模式已开启,正在初始化原始套接字...")
|
简单模拟
自动化漏洞扫描辅助脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import argparse import sys
def main(): parser = argparse.ArgumentParser( prog="SecurityScan", description="网络安全实验:自动化端口扫描与服务发现工具", epilog="使用示例: python scanner.py 192.168.1.1 -p 80,443 -t 50 -o result.txt" )
parser.add_argument("target", help="扫描目标的 IP 地址或域名")
parser.add_argument("-p", "--ports", default="1-1024", help="指定端口范围 (例如: 80,443 或 1-65535, 默认: 1-1024)")
parser.add_argument("-t", "--threads", type=int, default=10, help="并发线程数量 (默认: 10)")
parser.add_argument("-o", "--output", help="将结果保存到指定文件路径")
parser.add_argument("-v", "--verbose", action="store_true", help="启用详细日志输出")
args = parser.parse_args()
print(f"[*] 正在初始化扫描任务...") print(f"[*] 目标主机: {args.target}") print(f"[*] 扫描端口: {args.ports}") print(f"[*] 线程配置: {args.threads}")
if args.verbose: print("[DEBUG] 正在加载扫描模块...") print("[DEBUG] 正在建立原始套接字连接...")
if args.output: print(f"[+] 扫描完成后,结果将保存至: {args.output}")
print("\n[!] 扫描已完成。")
if __name__ == "__main__": main()
|
互斥模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import argparse
parser = argparse.ArgumentParser(description="安全辅助工具 - 互斥模式演示")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true", help="显示详细输出") group.add_argument("-q", "--quiet", action="store_true", help="静默模式,仅输出结果")
args = parser.parse_args()
if args.verbose: print("[+] 正在扫描... 发现端口 80... 发现端口 443...") elif args.quiet: print("[!] 扫描完成。") else: print("[*] 正常模式运行中...")
|
处理子命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import argparse
def main(): parser = argparse.ArgumentParser(prog="NetTool", description="科研用网络安全综合工具") subparsers = parser.add_subparsers(dest="command", help="可选的操作命令")
parser_scan = subparsers.add_parser("scan", help="执行端口扫描") parser_scan.add_argument("target", help="目标 IP") parser_scan.add_argument("--speed", choices=["fast", "slow"], default="fast", help="扫描速度")
parser_report = subparsers.add_parser("report", help="生成分析报告") parser_report.add_argument("-f", "--file", required=True, help="输入日志文件路径") parser_report.add_argument("--format", choices=["pdf", "html"], default="html")
args = parser.parse_args()
if args.command == "scan": print(f"[*] 正在对 {args.target} 执行 {args.speed} 扫描...") elif args.command == "report": print(f"[*] 正在读取文件 {args.file} 并生成 {args.format} 格式报告...") else: parser.print_help()
if __name__ == "__main__": main()
|