aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet_traceroute.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libggnet_traceroute.c')
-rw-r--r--libglouglou/libggnet_traceroute.c38
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);