nmap整体流程1

一、环境

nmap-7.80、Windows10、VMware


二、主体流程

分为了三个分支

main.cc
main()
//分支1.检查环境变量 NMAP_ARGS
//    如果有,则提取环境变量NMAP_ARGS中的值,并且拼接命令行中的参数
//    进入nmap_main()

//分支2.检查命令行参数,如果只有三个参数,并且第二个参数为 --resume
       从日志文件中加载上次终止状态,继续上次终止时开始运行
//     进入 nmap_main()

//分支3. 进入 nmap_main()

真正的主函数为 nmap_main()

2.1 解析命令行参数

nmap_main() ->
    ...
    parse_options()// 解析命令行参数
        ...
        struct option long_options[] = {...} //定义的长选项
        46Ab:D:d::e:Ffg:hIi:M:m:nO::o:P::p:qRrS:s::T:Vv:: //短选项
        //无冒号的选项表示无参数
        //一个冒号的选项表示必须有参数,否则报错;参数和选项中可以有空格,也可以没有;eg. -D123 or -D 123
        //两个冒号的选项表示参数是可选的;但是有参数时,选项与参数之间不能有空格
        
        //将命令行参数解析到 全局对象NmapOps o 中
        //同时将一些涉及时间的参数 解析到 静态全局变量 static struct delayed_options delayed_options 中

2.2 处理选项

nmap_main() ->
...
    apply_delayed_options()
        ...
        //如果配置了 -O 选项进行扫描操作系统 
        //     或则 -A 并且是root权限时, 
        //则加载操作系统指纹文件
        parse_fingerprint_reference_file("nmap-os-db") 
        ...
        
        //扫描端口处理
        validate_scan_lists()
        ...
        
        //各个参数之间关系的校验,并输出日志
        ...
        
        //其他选项的一些处理


2.3 循环进行处理

do{
    ...
}while()


猜你喜欢

转载自blog.51cto.com/happytree007/2518894
今日推荐