Change if
This commit is contained in:
parent
08bc7e98d0
commit
6aa4b64a5a
BIN
dns-trace
BIN
dns-trace
Binary file not shown.
2
exec.sh
2
exec.sh
@ -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
193060
src/vmlinux.h
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user