diff options
Diffstat (limited to 'libglouglou/libggnet_traceroute.c')
-rw-r--r-- | libglouglou/libggnet_traceroute.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/libglouglou/libggnet_traceroute.c b/libglouglou/libggnet_traceroute.c index c313488..0c18d9f 100644 --- a/libglouglou/libggnet_traceroute.c +++ b/libglouglou/libggnet_traceroute.c @@ -99,7 +99,7 @@ struct trace_pkt { }; struct ggnet_traceroute * -ggnet_traceroute_new(struct event_base *ev_base, char *iface) +ggnet_traceroute_new(struct event_base *ev_base, char *iface, int verbose) { struct ggnet_traceroute *ggtr; char ebuff[PCAP_ERRBUF_SIZE]; @@ -124,6 +124,7 @@ ggnet_traceroute_new(struct event_base *ev_base, char *iface) err(1, "pcap_open_live(%s)", iface); ggtr->pcap_dllen = pcap_dloff(ggtr->pcap); ggtr->pcap_fd = pcap_fileno(ggtr->pcap); + ggtr->verbose = verbose; return ggtr; } @@ -293,9 +294,10 @@ _cb_send(evutil_socket_t fd, short what, void *arg) int sport = -1; req = arg; - printf("XXX cbggnet_traceroute cb_send %s -> %s\n", - addr_ntoa(&req->srcip), addr_ntoa(&req->target->ip)); ggtr = req->ggtr; + if (ggtr->verbose) + printf("XXX cbggnet_traceroute cb_send %s -> %s\n", + addr_ntoa(&req->srcip), addr_ntoa(&req->target->ip)); pkt = (struct trace_pkt *)buf; len = IP_HDR_LEN + TCP_HDR_LEN; @@ -367,19 +369,20 @@ _cb_recv(evutil_socket_t fd, short what, void *arg) char *p, *flags; req = arg; - printf("XXX cbggnet_traceroute cb_recv %s -> %s\n", + ggtr = req->ggtr; + if (ggtr->verbose) + printf("XXX cbggnet_traceroute cb_recv %s -> %s\n", addr_ntoa(&req->srcip), addr_ntoa(&req->target->ip)); // XXX call cb_hop if hop successfuly detected // req->cb_hop(req, hop, req->data); - req = arg; - ggtr = req->ggtr; if ((pread = (u_char *) pcap_next(ggtr->pcap, &ph)) == NULL) { printf("libggnet_traceroute _cb_recv: read error\n"); goto reschedule_recv; } - printf("XXX packet received\n"); + if (ggtr->verbose) + printf("XXX packet received\n"); /* decode the current packet : ttl, ip, ... */ ip = (struct ip_hdr *) (pread + ggtr->pcap_dllen); if (ip->ip_v != 4) @@ -387,7 +390,9 @@ _cb_recv(evutil_socket_t fd, short what, void *arg) p = ip_ntoa(&ip->ip_src); if ((addr_aton(p, &ip_src)) == -1) goto reschedule_recv; - printf("XXX packet IP received from %s, ip_id %d\n", addr_ntoa(&ip_src), ntohs(ip->ip_id)); + if (ggtr->verbose) + printf("XXX packet IP received from %s, ip_id %d\n", + addr_ntoa(&ip_src), ntohs(ip->ip_id)); switch(ip->ip_p) { @@ -395,13 +400,15 @@ _cb_recv(evutil_socket_t fd, short what, void *arg) if (addr_cmp(&ip_src, &(req->target->ip)) != 0) goto reschedule_recv; tcp = (struct tcp_hdr *)((u_char *)ip + IP_HDR_LEN); - printf("XXX TCP %d %d %d\n", ntohs(tcp->th_sport), - req->params->tcp.dport, tcp->th_seq); + if (ggtr->verbose) + printf("XXX TCP %d %d %d\n", ntohs(tcp->th_sport), + req->params->tcp.dport, tcp->th_seq); if (((tcp->th_flags == TH_SYN + TH_ACK) || (tcp->th_flags == TH_RST + TH_ACK)) && (ntohs(tcp->th_sport) == req->params->tcp.dport)) { /* target answer */ - printf("XXX found target !\n"); + if (ggtr->verbose) + printf("XXX found target !\n"); hop = _hop_sport(req, ntohs(tcp->th_dport)); if (!hop) { printf("libggnet_traceroute _cb_recv: WARNING: TCP answer with dport not matching sent sport (%d) not found !\n", @@ -420,7 +427,8 @@ _cb_recv(evutil_socket_t fd, short what, void *arg) break; case IP_PROTO_ICMP: - printf("XXX is ICMP\n"); + if (ggtr->verbose) + printf("XXX is ICMP\n"); /* answer from a hop */ icmp = (struct icmp_hdr *)((u_char *)ip + IP_HDR_LEN); /* XXX ? look for TTL_EXPIRED, PROHIBITED msgs */ @@ -478,10 +486,12 @@ _cb_trace_timeout(evutil_socket_t fd, short what, void *arg) req = arg; - printf("XXX cbggnet_traceroute cb_trace_timeout (%s -> %s)\n", + if (req->ggtr->verbose) + printf("XXX cbggnet_traceroute cb_trace_timeout (%s -> %s)\n", addr_ntoa(&req->srcip), addr_ntoa(&req->target->ip)); last = _hop_last(req); - printf("XXX last %p\n", last); + if (req->ggtr->verbose) + printf("XXX last %p\n", last); if (last) req->target->ttl = last->ttl + 1; req->cb_done(req, req->data); |