From 4b20c1c91aa0a6ad165f2fb81b90af0bb99f69ec Mon Sep 17 00:00:00 2001 From: Laurent Ghigonis Date: Tue, 4 Dec 2012 01:02:29 +0100 Subject: work in progress on gg_sniff --- gg_sniff/gg_sniff.c | 54 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 20 deletions(-) (limited to 'gg_sniff/gg_sniff.c') diff --git a/gg_sniff/gg_sniff.c b/gg_sniff/gg_sniff.c index 1084b90..c07a1f4 100644 --- a/gg_sniff/gg_sniff.c +++ b/gg_sniff/gg_sniff.c @@ -18,14 +18,15 @@ #include #include +#include +#include "gg_sniff.h" + #if defined(__OpenBSD__) #include "pcap-int.h" #endif #define GG_SNIFF_USER "_gg_sniff" -int net_socket; - #if defined(__OpenBSD__) void __dead #else @@ -33,11 +34,10 @@ void #endif usage(void) { - extern char *__progname; + extern char *__progname; - fprintf(stderr, "usage: %s [-hv]", - __progname); - exit(1); + fprintf(stderr, "usage: %s [-hv]", __progname); + exit(1); } static void @@ -52,14 +52,12 @@ int main(int argc, char **argv) { struct event_base *ev_base; - struct sockaddr_in sock_addr; + struct ggnet *net; struct event ev_sigint, ev_sigterm, ev_sigchld, ev_sighup; - char errbuf[PCAP_ERRBUF_SIZE]; - struct bpf_program bprog; - pcap_t *pcap; - int loglevel = 0; - int op; - int sock_on = 1; + int pcap_init = 0; + int sniff_init = 0; + int loglevel = 0; + int op; if (geteuid() != 0) errx(1, "must be root"); @@ -82,11 +80,18 @@ main(int argc, char **argv) ev_base = event_base_new(); + net = ggnet_new(); + if (!net) + goto quit; ggcli = gg_client_connect(); - - ggsniff_pcap_init(); - - ggsniff_dns_init(); + if (!ggcli) + goto quit; + pcap_init = ggsniff_pcap_init(ev_base); + if (!pcap_init) + goto quit; + sniff_init = ggsniff_dns_init(ev_base); + if (!sniff_init) + goto quit; signal_set(&ev_sigint, SIGINT, sig_handler, NULL); signal_set(&ev_sigterm, SIGTERM, sig_handler, NULL); @@ -103,10 +108,19 @@ main(int argc, char **argv) log_info("entering event loop"); event_base_dispatch(ev_base); - ggsniff_dns_shutdown(); - ggsniff_pcap_shutdown(); - gg_client_disconnect(ggcli); +quit: + if (dns_init) + ggsniff_dns_shutdown(); + if (sniff_init) + ggsniff_pcap_shutdown(); + if (ggcli) + gg_client_disconnect(ggcli); + if (net) + ggnet_free(net); log_info("exiting"); + + gg_log_shutdown(); + exit(0); } -- cgit v1.2.3-59-g8ed1b