mirror of
https://git.robbyzambito.me/zaprus/
synced 2026-02-04 03:34:48 +00:00
start doing packet stuff
This commit is contained in:
43
src/main.zig
43
src/main.zig
@@ -52,7 +52,7 @@ pub fn main(init: std.process.Init) !void {
|
||||
flags.relay = args[i];
|
||||
} else {
|
||||
std.debug.print("-r/--relay requires a string\n", .{});
|
||||
return;
|
||||
return error.InvalidArguments;
|
||||
}
|
||||
},
|
||||
.dest => {
|
||||
@@ -61,7 +61,7 @@ pub fn main(init: std.process.Init) !void {
|
||||
flags.dest = args[i];
|
||||
} else {
|
||||
std.debug.print("-d/--dest requires a string\n", .{});
|
||||
return;
|
||||
return error.InvalidArguments;
|
||||
}
|
||||
},
|
||||
.connect => {
|
||||
@@ -70,20 +70,54 @@ pub fn main(init: std.process.Init) !void {
|
||||
flags.connect = args[i];
|
||||
} else {
|
||||
std.debug.print("-c/--connect requires a string\n", .{});
|
||||
return;
|
||||
return error.InvalidArguments;
|
||||
}
|
||||
},
|
||||
}
|
||||
} else {
|
||||
std.debug.print("Unknown argument: {s}\n", .{args[i]});
|
||||
return error.InvalidArguments;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (flags.connect != null and (flags.relay != null or flags.dest != null)) {
|
||||
std.debug.print("Incompatible arguments.\nCannot use --connect/-c with dest or relay.\n", .{});
|
||||
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 net_interface: std.Io.net.Interface = .{ .index = 1 };
|
||||
// std.debug.print("Interface: {s}\n", .{(try net_interface.name(init.io)).toSlice()});
|
||||
|
||||
const linux_socket = blk: {
|
||||
const linux_socket = std.os.linux.socket(AF.PACKET, SOCK.RAW, 0);
|
||||
const errno = std.os.linux.errno(linux_socket);
|
||||
if (errno != .SUCCESS) {
|
||||
std.debug.log("Failed to open socket: {t}\n", .{errno});
|
||||
return error.Error; // TODO: better error
|
||||
}
|
||||
break :blk linux_socket;
|
||||
};
|
||||
const socket_fd = blk: {
|
||||
const socket_fd = std.os.linux.bind(linux_socket, @bitCast(std.os.linux.sockaddr.ll{
|
||||
.protocol = ,
|
||||
.ifindex = 1,
|
||||
.hatype = ,
|
||||
.pkttype = ,
|
||||
.halen = ,
|
||||
.addr = @splat(0),
|
||||
}), @sizeOf(std.os.linux.sockaddr.ll));
|
||||
};
|
||||
const ip: std.Io.net.IpAddress = .{ .ip4 = .unspecified(0) };
|
||||
const socket = try ip.bind(init.io, .{ .mode = .raw, .protocol = .raw });
|
||||
defer socket.close(init.io);
|
||||
|
||||
try socket.send(init.io, &.{ .ip4 = try .parse("255.255.255.255", 8888) }, "foo");
|
||||
|
||||
// var sock_buffer: [1500]u8 = undefined;
|
||||
// var raw_socket_writer: RawSocketWriter = try .init("enp7s0", &sock_buffer); // /proc/net/dev
|
||||
// var net_buffer: [1500]u8 = undefined;
|
||||
@@ -135,4 +169,7 @@ const zaprus = @import("zaprus");
|
||||
const SaprusClient = zaprus.Client;
|
||||
const SaprusMessage = zaprus.Message;
|
||||
const RawSocketWriter = zaprus.RawSocketWriter;
|
||||
|
||||
const AF = std.os.linux.AF;
|
||||
const SOCK = std.os.linux.SOCK;
|
||||
// const NetWriter = zaprus.NetWriter;
|
||||
|
||||
Reference in New Issue
Block a user