aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-06-06 00:29:42 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-06-06 00:29:42 +0200
commitc8a23de663715f665cd2010323b399bd13405f0c (patch)
treed081d36e0ced9faa05f875982fc9fd318fe00b5c /libglouglou
parentspike dnet_intf_get_dst: droppriv (diff)
downloadglouglou-c8a23de663715f665cd2010323b399bd13405f0c.tar.xz
glouglou-c8a23de663715f665cd2010323b399bd13405f0c.zip
libglouglou: add get_iface(ip) to get interface to use to reach an IP
Diffstat (limited to 'libglouglou')
-rw-r--r--libglouglou/libglouglou.h1
-rw-r--r--libglouglou/utils.c17
2 files changed, 18 insertions, 0 deletions
diff --git a/libglouglou/libglouglou.h b/libglouglou/libglouglou.h
index 5c727b4..fb755a7 100644
--- a/libglouglou/libglouglou.h
+++ b/libglouglou/libglouglou.h
@@ -204,5 +204,6 @@ void fd_nonblock(int);
void addrcpy(struct sockaddr_in *, struct sockaddr_in *);
int addrcmp(struct sockaddr_in *, struct sockaddr_in *);
void droppriv(char *, int, char *);
+char *get_iface(char *);
#endif /* _LIBGLOUGLOU_H_ */
diff --git a/libglouglou/utils.c b/libglouglou/utils.c
index 2c17eb0..2b56270 100644
--- a/libglouglou/utils.c
+++ b/libglouglou/utils.c
@@ -15,6 +15,8 @@
#include <pwd.h>
#include <grp.h>
#include <string.h>
+#include <pcap.h>
+#include <dnet.h>
#include "libglouglou.h"
@@ -198,3 +200,18 @@ droppriv(char *user, int do_chroot, char *chroot_path)
endpwent();
}
+char *
+get_iface(char *ip) {
+ struct addr dst;
+ struct intf_entry entry;
+ char *iface;
+
+ intf = intf_open();
+ addr_aton(ip, &dst);
+ if (intf_get_dst(intf, &entry, &dst) < 0)
+ return NULL;
+ iface = addr_ntoa(&entry.intf_addr);
+ intf_close(intf);
+
+ return iface;
+}