refactor(cli): Add subcommands for wake and sleep operations

- Restructure CLI to use subparsers for wake and sleep commands
- Add separate argument parsers for wake (port 9) and sleep (port 9999) commands
- Maintain backward compatibility with existing authentication and configuration
- Update help text and examples to reflect new command structure
This commit is contained in:
Björn Benouarets
2025-11-12 12:23:59 +01:00
parent 9cfb79545d
commit c91b13a08f

View File

@@ -90,52 +90,105 @@ def main():
"""Main entry point for the CLI application."""
parser = argparse.ArgumentParser(
description="Wake-on-LAN tool with authentication support",
formatter_class=argparse.RawDescriptionHelpFormatter
)
subparsers = parser.add_subparsers(dest='command', required=True, help='Available commands')
# Wake command parser
wake_parser = subparsers.add_parser(
'wake',
help='Send Wake-on-LAN packet (default port: 9)',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
%(prog)s -m AA:BB:CC:DD:EE:FF -u admin -p secret
%(prog)s -m AA-BB-CC-DD-EE-FF -u user -p pass -H 192.168.1.100 -p 9999
%(prog)s wake -m AA:BB:CC:DD:EE:FF -u admin -p secret
%(prog)s wake -m AA-BB-CC-DD-EE-FF -u user -p pass -H 192.168.1.100
"""
)
parser.add_argument(
wake_parser.add_argument(
'-m', '--mac',
required=True,
help='MAC address of the target device (format: XX:XX:XX:XX:XX:XX or XX-XX-XX-XX-XX-XX)'
)
parser.add_argument(
wake_parser.add_argument(
'-u', '--username',
required=True,
help='Username for authentication'
)
parser.add_argument(
wake_parser.add_argument(
'-p', '--password',
required=True,
help='Password for authentication'
)
parser.add_argument(
wake_parser.add_argument(
'-H', '--host',
default='255.255.255.255',
help='Target host address (default: 255.255.255.255 for broadcast)'
)
parser.add_argument(
wake_parser.add_argument(
'-P', '--port',
type=int,
default=9,
help='Target UDP port (default: 9)'
)
# Sleep command parser
sleep_parser = subparsers.add_parser(
'sleep',
help='Send Sleep packet (default port: 9999)',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
%(prog)s sleep -m AA:BB:CC:DD:EE:FF -u admin -p secret
%(prog)s sleep -m AA-BB-CC-DD-EE-FF -u user -p pass -H 192.168.1.100 -P 9999
"""
)
sleep_parser.add_argument(
'-m', '--mac',
required=True,
help='MAC address of the target device (format: XX:XX:XX:XX:XX:XX or XX-XX-XX-XX-XX-XX)'
)
sleep_parser.add_argument(
'-u', '--username',
required=True,
help='Username for authentication'
)
sleep_parser.add_argument(
'-p', '--password',
required=True,
help='Password for authentication'
)
sleep_parser.add_argument(
'-H', '--host',
default='255.255.255.255',
help='Target host address (default: 255.255.255.255 for broadcast)'
)
sleep_parser.add_argument(
'-P', '--port',
type=int,
default=9999,
help='Target UDP port (default: 9999)'
)
args = parser.parse_args()
# Send the Wake-on-LAN packet
print(f"Sending Wake-on-LAN packet to {args.mac}...")
# Send the appropriate packet
command_name = "Wake-on-LAN" if args.command == 'wake' else "Sleep"
print(f"Sending {command_name} packet to {args.mac}...")
print(f"Host: {args.host}:{args.port}")
print(f"Username: {args.username}")
success = send_wol_packet(
mac_address=args.mac,
username=args.username,
@@ -143,7 +196,7 @@ Examples:
host=args.host,
port=args.port
)
if success:
print("Packet sent successfully!")
return 0