@@ -3940,20 +3940,24 @@ def AutoArgparse(
39403940 # Process the parameters
39413941 positional = []
39423942 noargument = []
3943+ hexarguments = []
39433944 parameters = {}
39443945 for param in inspect .signature (func ).parameters .values ():
39453946 if not param .annotation :
39463947 continue
39473948 noarg = False
3948- parname = param .name
3949- paramkwargs = {}
3949+ parname = param .name . replace ( "_" , "-" )
3950+ paramkwargs : Dict [ str , Any ] = {}
39503951 if param .annotation is bool :
39513952 if param .default is True :
39523953 parname = "no-" + parname
39533954 paramkwargs ["action" ] = "store_false"
39543955 else :
39553956 paramkwargs ["action" ] = "store_true"
39563957 noarg = True
3958+ elif param .annotation is bytes :
3959+ paramkwargs ["type" ] = str
3960+ hexarguments .append (parname )
39573961 elif param .annotation in [str , int , float ]:
39583962 paramkwargs ["type" ] = param .annotation
39593963 else :
@@ -3971,6 +3975,14 @@ def AutoArgparse(
39713975 paramkwargs ["action" ] = "append"
39723976 if param .name in argsdoc :
39733977 paramkwargs ["help" ] = argsdoc [param .name ]
3978+ if param .annotation is bytes :
3979+ paramkwargs ["help" ] = "(hex) " + paramkwargs ["help" ]
3980+ elif param .annotation is bool :
3981+ paramkwargs ["help" ] = "(flag) " + paramkwargs ["help" ]
3982+ else :
3983+ paramkwargs ["help" ] = (
3984+ "(%s) " % param .annotation .__name__ + paramkwargs ["help" ]
3985+ )
39743986 # Add to the parameter list
39753987 parameters [parname ] = paramkwargs
39763988 if noarg :
@@ -3992,11 +4004,25 @@ def AutoArgparse(
39924004
39934005 # Add parameters to parser
39944006 for parname , paramkwargs in parameters .items ():
3995- parser .add_argument (parname , ** paramkwargs ) # type: ignore
4007+ parser .add_argument (parname , ** paramkwargs )
39964008
39974009 # Now parse the sys.argv parameters
39984010 params = vars (parser .parse_args ())
39994011
4012+ # Convert hex parameters if provided
4013+ for p in hexarguments :
4014+ if params [p ] is not None :
4015+ try :
4016+ params [p ] = bytes .fromhex (params [p ])
4017+ except ValueError :
4018+ print (
4019+ conf .color_theme .fail (
4020+ "ERROR: the value of parameter %s "
4021+ "'%s' is not valid hexadecimal !" % (p , params [p ])
4022+ )
4023+ )
4024+ return None
4025+
40004026 # Act as in interactive mode
40014027 conf .logLevel = 20
40024028 from scapy .themes import DefaultTheme
@@ -4011,7 +4037,7 @@ def AutoArgparse(
40114037 }
40124038 )
40134039 except AssertionError as ex :
4014- print ("ERROR: " + str (ex ))
4040+ print (conf . color_theme . fail ( "ERROR: " + str (ex ) ))
40154041 parser .print_help ()
40164042 return None
40174043
0 commit comments