@@ -121,7 +121,7 @@ def scrapeRC():
121121# parserSearchTerms = parserCommands.add_argument_group()
122122
123123# TODO: Build custom formatter to prevent smaller args from having values
124- parser .add_argument ("searchTerms" , nargs = argparse . REMAINDER )
124+ parser .add_argument ("searchTerms" , nargs = "*" )
125125
126126parser .add_argument ("-c" , "--case" , action = "store_true" ,
127127 help = "Perform a case-sensitive search (Default is inSEnsITiVe)." )
@@ -152,6 +152,8 @@ def scrapeRC():
152152 help = "Display the EDB-ID value rather than local path." )
153153parser .add_argument ("--nmap" , metavar = "file.xml" , nargs = "?" , type = argparse .FileType ("r" ), default = None , const = os .sys .stdin ,
154154 help = "Checks all results in Nmap's XML output with service version (e.g.: nmap -sV -oX file.xml).\n Use \" -v\" (verbose) to try even more combinations" )
155+ parser .add_argument ("--exclude" , nargs = "*" , type = str , default = list (), metavar = "[terms]" ,
156+ help = "Remove certain terms from the results. Option best added after all other terms have been gathered." )
155157
156158# Argument variable
157159parseArgs = parser .parse_args ()
@@ -338,6 +340,8 @@ def validTerm(argsList):
338340 "[-] Skipping term: " + argsList [i ] + " (Term is too general. Please re-search manually:" )
339341 argsList .pop (i )
340342 # Issues, return with something
343+ elif argsList [i ].lower () in parseArgs .exclude :
344+ argsList .pop (i )
341345 elif not parseArgs .case :
342346 argsList [i ] = argsList [i ].lower ()
343347 argsList .sort ()
@@ -374,25 +378,31 @@ def searchdb(path="", terms=[], cols=[], lim=-1):
374378 db = dbFile .read ().split ('\n ' )
375379 for lines in db :
376380 if (lines != "" ):
377- for term in terms :
378- if parseArgs .title :
379- line = lines .split ("," )[2 ]
380- if parseArgs .case :
381- if term not in line :
382- break
383- elif term not in line .lower ():
384- break
385- elif parseArgs .case :
386- if term not in lines :
387- break
388- elif term not in lines .lower ():
381+ for ex in parseArgs .exclude :
382+ if parseArgs .case and ex in lines :
383+ break
384+ elif ex in lines .lower ():
389385 break
390386 else :
391- for i in cols :
392- space = lines .split ("," )
393- tmphold .append (space [i ])
394- searchTerms .append (tmphold )
395- tmphold = []
387+ for term in terms :
388+ if parseArgs .title :
389+ line = lines .split ("," )[2 ]
390+ if parseArgs .case :
391+ if term not in line :
392+ break
393+ elif term not in line .lower ():
394+ break
395+ elif parseArgs .case :
396+ if term not in lines :
397+ break
398+ elif term not in lines .lower ():
399+ break
400+ else :
401+ for i in cols :
402+ space = lines .split ("," )
403+ tmphold .append (space [i ])
404+ searchTerms .append (tmphold )
405+ tmphold = []
396406 if (lim != - 1 and len (searchTerms ) >= lim ):
397407 break
398408 dbFile .close ()
@@ -699,6 +709,7 @@ def run():
699709 parser .print_help () # runs if given no arguements
700710 return
701711
712+ # DB Tools
702713 if parseArgs .mirror != None :
703714 mirror (parseArgs .mirror )
704715 return
@@ -711,7 +722,14 @@ def run():
711722 elif parseArgs .examine != None :
712723 examine (parseArgs .examine )
713724 return
714- elif parseArgs .nmap != None :
725+
726+ # formatting exclusions
727+ if not parseArgs .case :
728+ for i in range (len (parseArgs .exclude )):
729+ parseArgs .exclude [i ] = parseArgs .exclude [i ].lower ()
730+
731+ # Nmap tool
732+ if parseArgs .nmap != None :
715733 result = nmapxml (parseArgs .nmap )
716734 if not result :
717735 result = nmapgrep (parseArgs .nmap )
0 commit comments