diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2013-06-06 00:29:42 +0200 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2013-06-06 00:29:42 +0200 |
commit | c8a23de663715f665cd2010323b399bd13405f0c (patch) | |
tree | d081d36e0ced9faa05f875982fc9fd318fe00b5c /libglouglou | |
parent | spike dnet_intf_get_dst: droppriv (diff) | |
download | glouglou-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.h | 1 | ||||
-rw-r--r-- | libglouglou/utils.c | 17 |
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; +} |