version 1.1.1.1, 2012/02/21 22:14:23
|
version 1.1.1.2, 2013/07/22 11:54:42
|
Line 39
|
Line 39
|
#include "../include/win32/libnet.h" |
#include "../include/win32/libnet.h" |
#endif |
#endif |
|
|
|
#ifndef HAVE_GETHOSTBYNAME2 |
|
struct hostent * |
|
gethostbyname2(const char *name, int af) |
|
{ |
|
return gethostbyname(name); |
|
} |
|
#endif |
|
|
char * |
char * |
libnet_addr2name4(u_int32_t in, u_int8_t use_name) | libnet_addr2name4(uint32_t in, uint8_t use_name) |
{ |
{ |
#define HOSTNAME_SIZE 512 |
#define HOSTNAME_SIZE 512 |
static char hostname[HOSTNAME_SIZE+1], hostname2[HOSTNAME_SIZE+1]; |
static char hostname[HOSTNAME_SIZE+1], hostname2[HOSTNAME_SIZE+1]; |
static u_int16_t which; | static uint16_t which; |
u_int8_t *p; | uint8_t *p; |
|
|
struct hostent *host_ent = NULL; |
struct hostent *host_ent = NULL; |
struct in_addr addr; |
struct in_addr addr; |
Line 68 libnet_addr2name4(u_int32_t in, u_int8_t use_name)
|
Line 76 libnet_addr2name4(u_int32_t in, u_int8_t use_name)
|
if (!host_ent) |
if (!host_ent) |
{ |
{ |
|
|
p = (u_int8_t *)∈ | p = (uint8_t *)∈ |
snprintf(((which % 2) ? hostname : hostname2), HOSTNAME_SIZE, |
snprintf(((which % 2) ? hostname : hostname2), HOSTNAME_SIZE, |
"%d.%d.%d.%d", |
"%d.%d.%d.%d", |
(p[0] & 255), (p[1] & 255), (p[2] & 255), (p[3] & 255)); |
(p[0] & 255), (p[1] & 255), (p[2] & 255), (p[3] & 255)); |
Line 84 libnet_addr2name4(u_int32_t in, u_int8_t use_name)
|
Line 92 libnet_addr2name4(u_int32_t in, u_int8_t use_name)
|
} |
} |
|
|
void |
void |
libnet_addr2name4_r(u_int32_t in, u_int8_t use_name, char *hostname, | libnet_addr2name4_r(uint32_t in, uint8_t use_name, char *hostname, |
int hostname_len) |
int hostname_len) |
{ |
{ |
u_int8_t *p; | uint8_t *p; |
struct hostent *host_ent = NULL; |
struct hostent *host_ent = NULL; |
struct in_addr addr; |
struct in_addr addr; |
|
|
Line 99 libnet_addr2name4_r(u_int32_t in, u_int8_t use_name, c
|
Line 107 libnet_addr2name4_r(u_int32_t in, u_int8_t use_name, c
|
} |
} |
if (!host_ent) |
if (!host_ent) |
{ |
{ |
p = (u_int8_t *)∈ | p = (uint8_t *)∈ |
snprintf(hostname, hostname_len, "%d.%d.%d.%d", |
snprintf(hostname, hostname_len, "%d.%d.%d.%d", |
(p[0] & 255), (p[1] & 255), (p[2] & 255), (p[3] & 255)); |
(p[0] & 255), (p[1] & 255), (p[2] & 255), (p[3] & 255)); |
} |
} |
Line 110 libnet_addr2name4_r(u_int32_t in, u_int8_t use_name, c
|
Line 118 libnet_addr2name4_r(u_int32_t in, u_int8_t use_name, c
|
} |
} |
} |
} |
|
|
u_int32_t | uint32_t |
libnet_name2addr4(libnet_t *l, char *host_name, u_int8_t use_name) | libnet_name2addr4(libnet_t *l, char *host_name, uint8_t use_name) |
{ |
{ |
struct in_addr addr; |
struct in_addr addr; |
struct hostent *host_ent; |
struct hostent *host_ent; |
u_int32_t m; | uint32_t m; |
u_int val; | uint val; |
int i; |
int i; |
|
|
if (use_name == LIBNET_RESOLVE) |
if (use_name == LIBNET_RESOLVE) |
Line 126 libnet_name2addr4(libnet_t *l, char *host_name, u_int8
|
Line 134 libnet_name2addr4(libnet_t *l, char *host_name, u_int8
|
if (!(host_ent = gethostbyname(host_name))) |
if (!(host_ent = gethostbyname(host_name))) |
{ |
{ |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
"%s(): %s\n", __func__, strerror(errno)); | "%s(): %s\n", __func__, hstrerror(h_errno)); |
/* XXX - this is actually 255.255.255.255 */ |
/* XXX - this is actually 255.255.255.255 */ |
return (-1); |
return (-1); |
} |
} |
Line 187 libnet_name2addr4(libnet_t *l, char *host_name, u_int8
|
Line 195 libnet_name2addr4(libnet_t *l, char *host_name, u_int8
|
} |
} |
|
|
void |
void |
libnet_addr2name6_r(struct libnet_in6_addr addr, u_int8_t use_name, | libnet_addr2name6_r(struct libnet_in6_addr addr, uint8_t use_name, |
char *host_name, int host_name_len) |
char *host_name, int host_name_len) |
{ |
{ |
struct hostent *host_ent = NULL; |
struct hostent *host_ent = NULL; |
Line 222 libnet_addr2name6_r(struct libnet_in6_addr addr, u_int
|
Line 230 libnet_addr2name6_r(struct libnet_in6_addr addr, u_int
|
|
|
const struct libnet_in6_addr in6addr_error = IN6ADDR_ERROR_INIT; |
const struct libnet_in6_addr in6addr_error = IN6ADDR_ERROR_INIT; |
|
|
|
int |
|
libnet_in6_is_error(struct libnet_in6_addr addr) |
|
{ |
|
return 0 == memcmp(&addr, &in6addr_error, sizeof(addr)); |
|
} |
|
|
struct libnet_in6_addr |
struct libnet_in6_addr |
libnet_name2addr6(libnet_t *l, char *host_name, u_int8_t use_name) | libnet_name2addr6(libnet_t *l, const char *host_name, uint8_t use_name) |
{ |
{ |
#if !defined (__WIN32__) |
#if !defined (__WIN32__) |
struct libnet_in6_addr addr; |
struct libnet_in6_addr addr; |
Line 264 libnet_name2addr6(libnet_t *l, char *host_name, u_int8
|
Line 278 libnet_name2addr6(libnet_t *l, char *host_name, u_int8
|
} |
} |
else |
else |
{ |
{ |
#if defined(__WIN32__) /* Silence Win32 warning */ | #if defined(__WIN32__) /* Silence Win32 warning */ |
if (l) | if (l) |
{ |
{ |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
"%s(): can't resolve IPv6 addresses.\n", __func__); |
"%s(): can't resolve IPv6 addresses.\n", __func__); |
} |
} |
return (in6addr_error); |
return (in6addr_error); |
#else | #else |
if(!inet_pton(AF_INET6, host_name, &addr)) |
if(!inet_pton(AF_INET6, host_name, &addr)) |
{ |
{ |
if (l) |
if (l) |
Line 282 libnet_name2addr6(libnet_t *l, char *host_name, u_int8
|
Line 296 libnet_name2addr6(libnet_t *l, char *host_name, u_int8
|
return (in6addr_error); |
return (in6addr_error); |
} |
} |
return (addr); |
return (addr); |
#endif | #endif |
} |
} |
} |
} |
|
|
|
#ifdef HAVE_GETIFADDRS |
|
|
|
#include <ifaddrs.h> |
|
|
struct libnet_in6_addr |
struct libnet_in6_addr |
libnet_get_ipaddr6(libnet_t *l) |
libnet_get_ipaddr6(libnet_t *l) |
{ |
{ |
|
struct ifaddrs *ifaddr, *p; |
|
struct libnet_in6_addr addr; |
|
|
|
if (l == NULL) |
|
{ |
|
return (in6addr_error); |
|
} |
|
|
|
if (getifaddrs(&ifaddr) != 0) |
|
{ |
|
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
|
"%s(): getifaddrs(): %s\n", __func__, strerror(errno)); |
|
return (in6addr_error); |
|
} |
|
|
|
if (l->device == NULL) |
|
{ |
|
if (libnet_select_device(l) == -1) |
|
{ |
|
/* error msg set in libnet_select_device() */ |
|
return (in6addr_error); |
|
} |
|
} |
|
|
|
for (p = ifaddr; p != NULL; p = p->ifa_next) |
|
{ |
|
if ((strcmp(p->ifa_name, l->device) == 0) && (p->ifa_addr != NULL) && |
|
(p->ifa_addr->sa_family == AF_INET6)) |
|
{ |
|
memcpy(&addr.__u6_addr, |
|
((struct sockaddr_in6*)p->ifa_addr)->sin6_addr.s6_addr, 16); |
|
freeifaddrs(ifaddr); |
|
return (addr); |
|
} |
|
} |
|
|
|
freeifaddrs(ifaddr); |
|
return (in6addr_error); |
|
} |
|
#else |
|
struct libnet_in6_addr |
|
libnet_get_ipaddr6(libnet_t *l) |
|
{ |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
"%s(): not yet Implemented\n", __func__); |
"%s(): not yet Implemented\n", __func__); |
return (in6addr_error); |
return (in6addr_error); |
} |
} |
|
#endif /* WIN32 */ |
|
|
#if !defined(__WIN32__) |
#if !defined(__WIN32__) |
u_int32_t | uint32_t |
libnet_get_ipaddr4(libnet_t *l) |
libnet_get_ipaddr4(libnet_t *l) |
{ |
{ |
struct ifreq ifr; |
struct ifreq ifr; |
Line 344 libnet_get_ipaddr4(libnet_t *l)
|
Line 406 libnet_get_ipaddr4(libnet_t *l)
|
} |
} |
#else |
#else |
#include <Packet32.h> |
#include <Packet32.h> |
u_int32_t | uint32_t |
libnet_get_ipaddr4(libnet_t *l) |
libnet_get_ipaddr4(libnet_t *l) |
{ |
{ |
long npflen = 0; |
long npflen = 0; |
Line 363 libnet_get_ipaddr4(libnet_t *l)
|
Line 425 libnet_get_ipaddr4(libnet_t *l)
|
} |
} |
#endif /* WIN32 */ |
#endif /* WIN32 */ |
|
|
u_int8_t * | uint8_t * |
libnet_hex_aton(int8_t *s, int *len) | libnet_hex_aton(const char *s, int *len) |
{ |
{ |
u_int8_t *buf; | uint8_t *buf; |
int i; |
int i; |
int32_t l; |
int32_t l; |
int8_t *pp; | char *pp; |
|
|
while (isspace(*s)) |
while (isspace(*s)) |
{ |
{ |
Line 390 libnet_hex_aton(int8_t *s, int *len)
|
Line 452 libnet_hex_aton(int8_t *s, int *len)
|
/* expect len hex octets separated by ':' */ |
/* expect len hex octets separated by ':' */ |
for (i = 0; i < *len + 1; i++) |
for (i = 0; i < *len + 1; i++) |
{ |
{ |
l = strtol(s, (char **)&pp, 16); | l = strtol(s, &pp, 16); |
if (pp == s || l > 0xff || l < 0) |
if (pp == s || l > 0xff || l < 0) |
{ |
{ |
*len = 0; |
*len = 0; |
Line 403 libnet_hex_aton(int8_t *s, int *len)
|
Line 465 libnet_hex_aton(int8_t *s, int *len)
|
free(buf); |
free(buf); |
return (NULL); |
return (NULL); |
} |
} |
buf[i] = (u_int8_t)l; | buf[i] = (uint8_t)l; |
s = pp + 1; |
s = pp + 1; |
} |
} |
/* return int8_tacter after the octets ala strtol(3) */ |
/* return int8_tacter after the octets ala strtol(3) */ |