aboutsummaryrefslogtreecommitdiffstats
path: root/gg_sniff
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-07-09 11:45:00 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-07-09 11:45:00 +0200
commit07306a2a00c908979fbb8cf3127278bae00803a4 (patch)
tree91c84a1d7f1402f1c2b7833a90b5ff1d245eae5b /gg_sniff
parentfix segfault because of bad libdnet intf_get_dst() usage (diff)
downloadglouglou-07306a2a00c908979fbb8cf3127278bae00803a4.tar.xz
glouglou-07306a2a00c908979fbb8cf3127278bae00803a4.zip
WIP, improve traceroute
* del trace on timeout (still WIP) * keep track of nodes traceroute usage * fix IP address storage / transfer * add some debug printf around
Diffstat (limited to 'gg_sniff')
-rw-r--r--gg_sniff/pcap.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/gg_sniff/pcap.c b/gg_sniff/pcap.c
index 5a247d6..c80085d 100644
--- a/gg_sniff/pcap.c
+++ b/gg_sniff/pcap.c
@@ -144,7 +144,7 @@ ggsniff_pcap_init(struct event_base *ev_base, struct gg_client *ggcli,
ggnet_set_dns(net, 1, ev_base, cb_nodename);
// XXX IN PROGRESS traceroute, disabled for now, 20130705
// laurent
- //ggnet_set_traceroute(net, 1, iface, ev_base, cb_nodetraceroute);
+ ggnet_set_traceroute(net, 1, iface, ev_base, cb_nodetraceroute);
}
_cap.ggcli = ggcli;
@@ -327,7 +327,7 @@ cb_conntimer(int fd, short why, void *data)
if (_cap.net->node_count > NODE_MAX_WITHOUT_TIMEOUT) {
LIST_FOREACH_SAFE(n, &_cap.net->node_list, entry, ntmp) {
- if (n->used == 0 &&
+ if (n->used_conn == 0 &&
_cap.net->time > n->lastseen + NODE_TIMEOUT)
ggnet_node_del(_cap.net, n);
}
@@ -372,6 +372,7 @@ cb_nodetraceroute(struct ggnet *net, struct ggnet_traceroute_req *req)
pkt.trace_addr = req->target->ip.addr_ip;
pkt.trace_src = req->srcip.addr_ip;
printf("XXX oooooooooooooooooo %x\n", pkt.trace_addr);
+ printf("XXX oooooooooooooooooo %x\n", pkt.trace_src);
pkt.trace_hopcount = req->hopcount_answering;
i = 0;
TAILQ_FOREACH(h, &req->hops_list, entry) {
@@ -379,7 +380,7 @@ cb_nodetraceroute(struct ggnet *net, struct ggnet_traceroute_req *req)
//pkt.trace_hops[i].addr = ip.s_addr;
if (h->ip.addr_ip == 0)
continue;
- pkt.trace_hops[i].addr = ntohl(h->ip.addr_ip);
+ pkt.trace_hops[i].addr = h->ip.addr_ip;
printf("XXX ------------------- %x\n", pkt.trace_hops[i].addr);
pkt.trace_hops[i].delay = h->delay;
pkt.trace_hops[i].loss = h->loss;
@@ -443,8 +444,9 @@ ip_handle(struct ip *ip, const u_char *pend, u_int wirelen)
}
len -= ip_hlen;
- src.s_addr = ntohl(ip->ip_src.s_addr);
- dst.s_addr = ntohl(ip->ip_dst.s_addr);
+ memcpy(&src, &ip->ip_src, sizeof(struct in_addr));
+ memcpy(&dst, &ip->ip_dst, sizeof(struct in_addr));
+ printf("XXX %s (%d) -> %s (%d)\n", inet_ntoa(src), src.s_addr, inet_ntoa(dst), dst.s_addr);
src_port = 0;
dst_port = 0;
proto = IPPROTO_IP;