Change if

This commit is contained in:
gbucchino 2025-02-05 11:14:06 +01:00
parent 08bc7e98d0
commit 6aa4b64a5a
5 changed files with 123161 additions and 69930 deletions

BIN
dns-trace

Binary file not shown.

@ -3,4 +3,4 @@
sudo bpftool btf dump file /sys/kernel/btf/vmlinux format c > src/vmlinux.h
make clean
make all && sudo ./dns-trace
make all && sudo ./dns-trace -i enx98e743c667fc

@ -21,6 +21,7 @@ static struct arguments arguments;
static int running = 1;
struct arguments {
char *interface;
char *filename;
int to_output;
};
@ -40,6 +41,9 @@ static error_t parse_opts(int key, char *arg, struct argp_state *state){
arguments->filename = arg;
arguments->to_output = 0;
break;
case 'i':
arguments->interface = arg;
break;
case 'o':
arguments->to_output = 1;
break;
@ -56,12 +60,14 @@ static error_t parse_opts(int key, char *arg, struct argp_state *state){
struct arguments parse_args(int argc, char *argv[]){
static const struct argp_option opts[] = {
{"interface", 'i', "INTERFACE", 0, "Ifname for listening"},
{"filename", 'f', "FILENAME", 0, "Save result to logs"},
{"to-output", 'o', NULL, 0, "Print to output"},
{NULL, 'h', NULL, OPTION_HIDDEN, "help"},
{},
};
struct arguments arguments;
arguments.interface = NULL;
arguments.filename = NULL;
arguments.to_output = 1;
static struct argp argp = {opts, parse_opts, args_doc, doc};
@ -76,8 +82,7 @@ static void signalHandler(int signum){
running = 0;
}
static int open_raw_sock(const char *name)
{
static int open_raw_sock(const char *name) {
struct sockaddr_ll sll;
int sock;
@ -92,7 +97,6 @@ static int open_raw_sock(const char *name)
sll.sll_ifindex = if_nametoindex(name);
sll.sll_protocol = htons(ETH_P_ALL);
if (bind(sock, (struct sockaddr *)&sll, sizeof(sll)) < 0) {
//printf("bind to %s: %s\n", name, strerror(errno));
printf("Failed to bind the interface %s\n", name);
close(sock);
return -1;
@ -340,9 +344,22 @@ int main(int argc, char *argv[]){
struct ring_buffer *rb;
int err;
int fd_map_data;
int sock;
arguments = parse_args(argc, argv); // Parsing arguments
if (arguments.interface == NULL){
printf("You must specified the interface name");
exit(-1);
}
printf("Listen to %s\n", arguments.interface);
sock = open_raw_sock(arguments.interface);
if (sock == -1){
printf("Failed to listen to the interface %s\n", arguments.interface);
exit(-1);
}
signal(SIGINT, signalHandler);
/* Open and load our eBPF object */
@ -376,12 +393,8 @@ int main(int argc, char *argv[]){
}
bpf_program__attach(programSkb);
int sock = open_raw_sock("wlp0s20f3");
//int sock = open_raw_sock("enx98e743c667fc");
//int sock = open_raw_sock("lo");
printf("Socket: %d\n", sock);
int prog_fd = bpf_program__fd(programSkb);
printf("Program fd: %d\n", prog_fd);
setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd, sizeof(int));
/* Start the ringbuffer */

Binary file not shown.

193060
src/vmlinux.h

File diff suppressed because it is too large Load Diff