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:
89
index.py
89
index.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user