Adversarial C2 Protocol Implemented in Zig
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

start doing packet stuff

+40 -3
+40 -3
src/main.zig
··· 52 52 flags.relay = args[i]; 53 53 } else { 54 54 std.debug.print("-r/--relay requires a string\n", .{}); 55 - return; 55 + return error.InvalidArguments; 56 56 } 57 57 }, 58 58 .dest => { ··· 61 61 flags.dest = args[i]; 62 62 } else { 63 63 std.debug.print("-d/--dest requires a string\n", .{}); 64 - return; 64 + return error.InvalidArguments; 65 65 } 66 66 }, 67 67 .connect => { ··· 70 70 flags.connect = args[i]; 71 71 } else { 72 72 std.debug.print("-c/--connect requires a string\n", .{}); 73 - return; 73 + return error.InvalidArguments; 74 74 } 75 75 }, 76 76 } 77 77 } else { 78 78 std.debug.print("Unknown argument: {s}\n", .{args[i]}); 79 + return error.InvalidArguments; 79 80 } 80 81 } 81 82 } 82 83 84 + if (flags.connect != null and (flags.relay != null or flags.dest != null)) { 85 + std.debug.print("Incompatible arguments.\nCannot use --connect/-c with dest or relay.\n", .{}); 86 + return error.InvalidArguments; 87 + } 88 + 83 89 std.debug.print("relay: {s}\n", .{flags.relay orelse "<null>"}); 84 90 std.debug.print("dest: {s}\n", .{flags.dest orelse "<null>"}); 85 91 std.debug.print("connect: {s}\n", .{flags.connect orelse "<null>"}); 86 92 93 + // const net_interface: std.Io.net.Interface = .{ .index = 1 }; 94 + // std.debug.print("Interface: {s}\n", .{(try net_interface.name(init.io)).toSlice()}); 95 + 96 + const linux_socket = blk: { 97 + const linux_socket = std.os.linux.socket(AF.PACKET, SOCK.RAW, 0); 98 + const errno = std.os.linux.errno(linux_socket); 99 + if (errno != .SUCCESS) { 100 + std.debug.log("Failed to open socket: {t}\n", .{errno}); 101 + return error.Error; // TODO: better error 102 + } 103 + break :blk linux_socket; 104 + }; 105 + const socket_fd = blk: { 106 + const socket_fd = std.os.linux.bind(linux_socket, @bitCast(std.os.linux.sockaddr.ll{ 107 + .protocol = , 108 + .ifindex = 1, 109 + .hatype = , 110 + .pkttype = , 111 + .halen = , 112 + .addr = @splat(0), 113 + }), @sizeOf(std.os.linux.sockaddr.ll)); 114 + }; 115 + const ip: std.Io.net.IpAddress = .{ .ip4 = .unspecified(0) }; 116 + const socket = try ip.bind(init.io, .{ .mode = .raw, .protocol = .raw }); 117 + defer socket.close(init.io); 118 + 119 + try socket.send(init.io, &.{ .ip4 = try .parse("255.255.255.255", 8888) }, "foo"); 120 + 87 121 // var sock_buffer: [1500]u8 = undefined; 88 122 // var raw_socket_writer: RawSocketWriter = try .init("enp7s0", &sock_buffer); // /proc/net/dev 89 123 // var net_buffer: [1500]u8 = undefined; ··· 135 169 const SaprusClient = zaprus.Client; 136 170 const SaprusMessage = zaprus.Message; 137 171 const RawSocketWriter = zaprus.RawSocketWriter; 172 + 173 + const AF = std.os.linux.AF; 174 + const SOCK = std.os.linux.SOCK; 138 175 // const NetWriter = zaprus.NetWriter;