@@ -774,100 +774,106 @@ def _get_argument_parser() -> argparse.ArgumentParser:
774774 )
775775 parser .add_argument ("host" , action = "store" , help = "hostname" )
776776 parser .add_argument ("port" , nargs = "?" , default = 23 , type = int , help = "port number" )
777- parser .add_argument ("--term" , default = os .environ .get ("TERM" , "unknown" ), help = "terminal type" )
778- parser .add_argument ("--loglevel" , default = "warn" , help = "log level" )
779- parser .add_argument ("--logfmt" , default = accessories ._DEFAULT_LOGFMT , help = "log format" )
780- parser .add_argument ("--logfile" , help = "filepath" )
781777 parser .add_argument (
782- "--logfile-mode " ,
783- default = "append" ,
784- choices = [ "append" , "rewrite" ],
785- dest = "logfile_mode " ,
786- help = "Log file write mode: append (default) or rewrite. " ,
778+ "--always-do " ,
779+ action = "append" ,
780+ default = [ ],
781+ metavar = "OPT " ,
782+ help = "always send DO for this option (name like GMCP or number, repeatable) " ,
787783 )
788784 parser .add_argument (
789- "--shell" , default = "telnetlib3.telnet_client_shell" , help = "module.function_name"
785+ "--always-will" ,
786+ action = "append" ,
787+ default = [],
788+ metavar = "OPT" ,
789+ help = "always send WILL for this option (name like MXP or number, repeatable)" ,
790790 )
791- parser .add_argument ("--encoding" , default = "utf8" , help = "encoding name" )
792- parser .add_argument ("--speed" , default = 38400 , type = int , help = "connection speed" )
793791 parser .add_argument (
794- "--encoding-errors" ,
795- default = "replace" ,
796- help = "handler for encoding errors" ,
797- choices = ("replace" , "ignore" , "strict" ),
798- )
799-
800- parser .add_argument ("--force-binary" , action = "store_true" , help = "force encoding" , default = True )
801- mode_group = parser .add_mutually_exclusive_group ()
802- mode_group .add_argument (
803- "--raw-mode" ,
792+ "--ansi-keys" ,
804793 action = "store_true" ,
805794 default = False ,
806- help = "force raw terminal mode (no line buffering, no local echo). "
807- "Correct for BBS and retro systems. Default: auto-detect from "
808- "server negotiation ." ,
795+ help = "transmit raw ANSI escape sequences for arrow and function "
796+ "keys instead of encoding-specific control codes. Use for "
797+ "BBSes that expect ANSI cursor sequences ." ,
809798 )
810- mode_group .add_argument (
811- "--line-mode " ,
799+ parser .add_argument (
800+ "--ascii-eol " ,
812801 action = "store_true" ,
813802 default = False ,
814- help = "force line-buffered input with local echo. Appropriate for "
815- "simple command-line services." ,
803+ help = "use ASCII CR/LF for line endings instead of encoding-native "
804+ "EOL (e.g. ATASCII 0x9B). Use for BBSes that display retro "
805+ "graphics but use standard CR/LF for line breaks." ,
816806 )
817807 parser .add_argument (
818- "--connect-minwait" , default = 0 , type = float , help = "shell delay for negotiation"
808+ "--compression" ,
809+ action = argparse .BooleanOptionalAction ,
810+ default = None ,
811+ help = "MCCP compression: --compression to request, --no-compression to reject, "
812+ "omit to passively accept (default)" ,
819813 )
820814 parser .add_argument (
821815 "--connect-maxwait" , default = 4.0 , type = float , help = "timeout for pending negotiation"
822816 )
817+ parser .add_argument (
818+ "--connect-minwait" , default = 0 , type = float , help = "shell delay for negotiation"
819+ )
823820 parser .add_argument (
824821 "--connect-timeout" ,
825822 default = 10 ,
826823 type = float ,
827824 help = "timeout for TCP connection in seconds (default: 10)" ,
828825 )
826+ parser .add_argument ("--encoding" , default = "utf8" , help = "encoding name" )
829827 parser .add_argument (
830- "--send-environ" ,
831- default = "TERM,LANG,COLUMNS,LINES,COLORTERM" ,
832- help = "comma-separated environment variables to send (NEW_ENVIRON)" ,
833- )
834- parser .add_argument (
835- "--always-will" ,
836- action = "append" ,
837- default = [],
838- metavar = "OPT" ,
839- help = "always send WILL for this option (name like MXP or number, repeatable)" ,
828+ "--encoding-errors" ,
829+ default = "replace" ,
830+ help = "handler for encoding errors" ,
831+ choices = ("replace" , "ignore" , "strict" ),
840832 )
833+ parser .add_argument ("--force-binary" , action = "store_true" , help = "force encoding" , default = True )
841834 parser .add_argument (
842- "--always-do" ,
843- action = "append" ,
844- default = [],
845- metavar = "OPT" ,
846- help = "always send DO for this option (name like GMCP or number, repeatable)" ,
835+ "--gmcp-modules" ,
836+ default = None ,
837+ metavar = "MODULES" ,
838+ help = "comma-separated GMCP module specs to request "
839+ '(e.g. "Char 1,Room 1,IRE.Rift 1"). '
840+ "When provided, replaces the built-in defaults." ,
847841 )
848- parser .add_argument (
849- "--ascii-eol" ,
842+ mode_group = parser .add_mutually_exclusive_group ()
843+ mode_group .add_argument (
844+ "--line-mode" ,
850845 action = "store_true" ,
851846 default = False ,
852- help = "use ASCII CR/LF for line endings instead of encoding-native "
853- "EOL (e.g. ATASCII 0x9B). Use for BBSes that display retro "
854- "graphics but use standard CR/LF for line breaks." ,
847+ help = "force line-buffered input with local echo. Appropriate for "
848+ "simple command-line services." ,
855849 )
856- parser .add_argument (
857- "--ansi-keys " ,
850+ mode_group .add_argument (
851+ "--raw-mode " ,
858852 action = "store_true" ,
859853 default = False ,
860- help = "transmit raw ANSI escape sequences for arrow and function "
861- "keys instead of encoding-specific control codes. Use for "
862- "BBSes that expect ANSI cursor sequences ." ,
854+ help = "force raw terminal mode (no line buffering, no local echo). "
855+ "Correct for BBS and retro systems. Default: auto-detect from "
856+ "server negotiation ." ,
863857 )
858+ parser .add_argument ("--logfile" , help = "filepath" )
864859 parser .add_argument (
865- "--compression" ,
866- action = argparse .BooleanOptionalAction ,
867- default = None ,
868- help = "MCCP compression: --compression to request, --no-compression to reject, "
869- "omit to passively accept (default)" ,
860+ "--logfile-mode" ,
861+ default = "append" ,
862+ choices = ["append" , "rewrite" ],
863+ dest = "logfile_mode" ,
864+ help = "Log file write mode: append (default) or rewrite." ,
865+ )
866+ parser .add_argument ("--logfmt" , default = accessories ._DEFAULT_LOGFMT , help = "log format" )
867+ parser .add_argument ("--loglevel" , default = "warn" , help = "log level" )
868+ parser .add_argument (
869+ "--send-environ" ,
870+ default = "TERM,LANG,COLUMNS,LINES,COLORTERM" ,
871+ help = "comma-separated environment variables to send (NEW_ENVIRON)" ,
870872 )
873+ parser .add_argument (
874+ "--shell" , default = "telnetlib3.telnet_client_shell" , help = "module.function_name"
875+ )
876+ parser .add_argument ("--speed" , default = 38400 , type = int , help = "connection speed" )
871877 parser .add_argument (
872878 "--ssl" , action = "store_true" , default = False , help = "connect using TLS (TELNETS)"
873879 )
@@ -886,14 +892,7 @@ def _get_argument_parser() -> argparse.ArgumentParser:
886892 "the server identity is not verified, allowing "
887893 "man-in-the-middle attacks" ,
888894 )
889- parser .add_argument (
890- "--gmcp-modules" ,
891- default = None ,
892- metavar = "MODULES" ,
893- help = "comma-separated GMCP module specs to request "
894- '(e.g. "Char 1,Room 1,IRE.Rift 1"). '
895- "When provided, replaces the built-in defaults." ,
896- )
895+ parser .add_argument ("--term" , default = os .environ .get ("TERM" , "unknown" ), help = "terminal type" )
897896 parser .add_argument (
898897 "--typescript" ,
899898 default = None ,
@@ -1009,27 +1008,38 @@ def _get_fingerprint_argument_parser() -> argparse.ArgumentParser:
10091008 parser .add_argument ("host" , help = "remote hostname or IP" )
10101009 parser .add_argument ("port" , nargs = "?" , default = 23 , type = int , help = "port number" )
10111010 parser .add_argument (
1012- "--data-dir" ,
1013- default = None ,
1014- help = "directory for fingerprint data (default: $TELNETLIB3_DATA_DIR)" ,
1011+ "--always-do" ,
1012+ action = "append" ,
1013+ default = [],
1014+ metavar = "OPT" ,
1015+ help = "always send DO for this option (name like GMCP or number, repeatable)" ,
10151016 )
10161017 parser .add_argument (
1017- "--save-json" , default = None , metavar = "PATH" , help = "write fingerprint JSON to this path"
1018+ "--always-will" ,
1019+ action = "append" ,
1020+ default = [],
1021+ metavar = "OPT" ,
1022+ help = "always send WILL for this option (name like MXP or number, repeatable)" ,
10181023 )
10191024 parser .add_argument (
1020- "--connect-timeout " , default = 10 , type = float , help = "TCP connection timeout in seconds "
1025+ "--banner-max-bytes " , default = 65536 , type = int , help = "max bytes per banner read call "
10211026 )
1022- parser .add_argument ("--loglevel" , default = "warn" , help = "log level" )
1023- parser .add_argument ("--logfmt" , default = accessories ._DEFAULT_LOGFMT , help = "log format" )
1024- parser .add_argument ("--logfile" , default = None , help = "filepath" )
10251027 parser .add_argument (
1026- "--silent " , action = "store_true" , help = "suppress fingerprint output to stdout "
1028+ "--banner-max-wait " , default = 8.0 , type = float , help = "max seconds to wait for banner data "
10271029 )
10281030 parser .add_argument (
1029- "--set-name" ,
1031+ "--banner-quiet-time" ,
1032+ default = 2.0 ,
1033+ type = float ,
1034+ help = "seconds of silence before considering banner complete" ,
1035+ )
1036+ parser .add_argument (
1037+ "--connect-timeout" , default = 10 , type = float , help = "TCP connection timeout in seconds"
1038+ )
1039+ parser .add_argument (
1040+ "--data-dir" ,
10301041 default = None ,
1031- metavar = "NAME" ,
1032- help = "store this name for the fingerprint in fingerprint_names.json" ,
1042+ help = "directory for fingerprint data (default: $TELNETLIB3_DATA_DIR)" ,
10331043 )
10341044 parser .add_argument (
10351045 "--encoding" ,
@@ -1038,8 +1048,17 @@ def _get_fingerprint_argument_parser() -> argparse.ArgumentParser:
10381048 dest = "stream_encoding" ,
10391049 help = "character encoding of the remote server (e.g. cp037 for EBCDIC)" ,
10401050 )
1051+ parser .add_argument ("--logfile" , default = None , help = "filepath" )
1052+ parser .add_argument ("--logfmt" , default = accessories ._DEFAULT_LOGFMT , help = "log format" )
1053+ parser .add_argument ("--loglevel" , default = "warn" , help = "log level" )
10411054 parser .add_argument (
1042- "--ttype" , default = "VT100" , help = "terminal type sent in response to TTYPE requests"
1055+ "--mssp-wait" ,
1056+ default = 5.0 ,
1057+ type = float ,
1058+ help = "max seconds since connect to wait for MSSP data" ,
1059+ )
1060+ parser .add_argument (
1061+ "--save-json" , default = None , metavar = "PATH" , help = "write fingerprint JSON to this path"
10431062 )
10441063 parser .add_argument (
10451064 "--scan-type" ,
@@ -1055,36 +1074,13 @@ def _get_fingerprint_argument_parser() -> argparse.ArgumentParser:
10551074 help = "environment variable to send (repeatable)" ,
10561075 )
10571076 parser .add_argument (
1058- "--always-will" ,
1059- action = "append" ,
1060- default = [],
1061- metavar = "OPT" ,
1062- help = "always send WILL for this option (name like MXP or number, repeatable)" ,
1063- )
1064- parser .add_argument (
1065- "--always-do" ,
1066- action = "append" ,
1067- default = [],
1068- metavar = "OPT" ,
1069- help = "always send DO for this option (name like GMCP or number, repeatable)" ,
1070- )
1071- parser .add_argument (
1072- "--mssp-wait" ,
1073- default = 5.0 ,
1074- type = float ,
1075- help = "max seconds since connect to wait for MSSP data" ,
1076- )
1077- parser .add_argument (
1078- "--banner-quiet-time" ,
1079- default = 2.0 ,
1080- type = float ,
1081- help = "seconds of silence before considering banner complete" ,
1082- )
1083- parser .add_argument (
1084- "--banner-max-wait" , default = 8.0 , type = float , help = "max seconds to wait for banner data"
1077+ "--set-name" ,
1078+ default = None ,
1079+ metavar = "NAME" ,
1080+ help = "store this name for the fingerprint in fingerprint_names.json" ,
10851081 )
10861082 parser .add_argument (
1087- "--banner-max-bytes " , default = 65536 , type = int , help = "max bytes per banner read call "
1083+ "--silent " , action = "store_true" , help = "suppress fingerprint output to stdout "
10881084 )
10891085 parser .add_argument (
10901086 "--ssl" , action = "store_true" , default = False , help = "connect using TLS (TELNETS)"
@@ -1104,6 +1100,9 @@ def _get_fingerprint_argument_parser() -> argparse.ArgumentParser:
11041100 "the server identity is not verified, allowing "
11051101 "man-in-the-middle attacks" ,
11061102 )
1103+ parser .add_argument (
1104+ "--ttype" , default = "VT100" , help = "terminal type sent in response to TTYPE requests"
1105+ )
11071106 return parser
11081107
11091108
0 commit comments