diff --git a/index.py b/index.py index 125b1dd..a3a4afb 100644 --- a/index.py +++ b/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