对python扫描器 BBscan 分析之参数部分

描述

最近在看一些python写的扫描器的项目,在需要进行参数解析时,需要使用一些模块来进行解析,可以选择使用sys模块、argparse 等自带的模块,也可以使用一些其他的第三的解析模块,会用一个就行,本文主要就介绍一下argparse模块的使用,
总结一下对扫描器(BBScan)的代码阅读,其中也使用了打断点之类的跟踪数据的流向,以分析代码的功能作用。

argparse 模块

argparse.ArgumentParser()

argparse.ArgumentParser方法用来创建一个解析对象,并可以使用传递一些值,对这个项目进行介绍等,下面这个例子就是从BBSCAN扫描器中的部分代码

   parser = argparse.ArgumentParser(prog='BBScan',
                                     formatter_class=argparse.RawTextHelpFormatter,
                                     description='* A fast vulnerability Scanner. *\n'
                                                 'By LiJieJie & Vivian (http://www.lijiejie.com)',
                                     usage='BBScan.py [options]')
add_argument_group()

在一个扫描器中,可能会用到比较多的参数,这时候可以使用add_argument_group()函数来对所有参数进行分类,这样可以比较清晰的看到各个参数的作用类型,在后期修改和调试的时候也会显的比较清晰

下面就是后续代码的示例,可以看到用add_argument_group() 函数的用法

    group_target = parser.add_argument_group('Targets', '')
    group_target.add_argument('--host', metavar='HOST', type=str, default='', nargs='*',
                              help='Scan several hosts from command line')
    group_target.add_argument('-f', metavar='TargetFile', type=str, default='',
                              help='Load new line delimited targets from TargetFile')
    group_target.add_argument('-d', metavar='TargetDirectory', type=str, default='',
                              help='Load all *.txt files from TargetDirectory')
    group_target.add_argument('--crawler', metavar='CrawlDirectory', type=str, default='',
                              help='Load all *.log crawl files from CrawlDirectory')
    group_target.add_argument('--network', metavar='MASK', type=int, default=32,
                              help='Scan all Target/MASK neighbour hosts, \nshould be an int between 8 and 31')

    group_http = parser.add_argument_group('HTTP SCAN', '')
    group_http.add_argument('--rule', metavar='RuleFileName', type=str, default='', nargs='*',
                            help='Import specified rule files only.')
    group_http.add_argument('-n', '--no-crawl', dest='no_crawl', default=False, action='store_true',
                            help='No crawling, sub folders will not be processed')
    group_http.add_argument('-nn', '--no-check404', dest='no_check404', default=False, action='store_true',
                            help='No HTTP 404 existence check')
    group_http.add_argument('--full', dest='full_scan', default=False, action='store_true',
                            help='Process all sub directories')
add_argument()

add_argument 这个函数就时对应到具体的参数了,根据上诉代码,可以得出

示例代码

    group_http.add_argument('--full', dest='full_scan', default=False, action='store_true',
                            help='Process all sub directories')

这里有个有趣的点,“–”后面一般都是跟一个单词,而 “-” 后面一般就单单的跟一个字母,这或许也是一种默认的规则。

  • dest 参数的别称
  • default 未输入参数值情况下的默认值
  • metavar 参数的名字
  • help 就是对该参数的具体描述
  • type 命令行参数的类型
  • store_ture/store_false 保存相应的布尔值。这两个动作被用于实现布尔开关。

关于参数的别称,这个搞一段代码示例一下,以便于理解

    parser.add_argument('-test',type=int,dest='a') 
    # dest -test的别称
    print(args.a) 
    #等价于print(args.test)
parse_args()

解析所有的参数值,就可以在args中获取其中的值。

代码示例

args = parser.parse_args()

参数的验证

接收到参数以后,首先要做的就是验证参数的格式是否正确以及是否输入了必须要输入的参数,首先可以验证一下是否输入了参数

如果未输入参数的话,就会执行-h 的命令,列出脚本的参数说明。

    if len(sys.argv) == 1:
        sys.argv.append('-h')

若是有输入参数的话就需要对参数进行判断

先进行是否存在的判断,然后进行了是否正确的判断。

参考

https://blog.csdn.net/foneone/article/details/103984895
https://zhuanlan.zhihu.com/p/56922793
https://blog.csdn.net/qq_36653505/article/details/83788460

猜你喜欢

转载自blog.csdn.net/qingzhantianxia/article/details/121251012