mirror of
https://github.com/nmap/nmap.git
synced 2025-12-26 17:39:03 +00:00
Move sockadd_storage helpers functions to appropriate files
This commit is contained in:
@@ -271,5 +271,7 @@ int getaddrinfo(const char *node, const char *service,
|
||||
const char *gai_strerror(int errcode);
|
||||
#endif
|
||||
|
||||
int sockaddr_storage_inet_pton(const char * ip_str, struct sockaddr_storage * addr);
|
||||
const char *sockaddr_storage_iptop(const struct sockaddr_storage * addr, char * dst);
|
||||
|
||||
#endif /* NBASE_IPV6_H */
|
||||
|
||||
@@ -910,3 +910,45 @@ char *executable_path(const char *argv0) {
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
int sockaddr_storage_inet_pton(const char * ip_str, struct sockaddr_storage * addr)
|
||||
{
|
||||
#if HAVE_IPV6
|
||||
struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) addr;
|
||||
if ( 1 == inet_pton(AF_INET6, ip_str, &(addrv6p->sin6_addr)) )
|
||||
{
|
||||
addr->ss_family = AF_INET6;
|
||||
return 1;
|
||||
}
|
||||
#endif // HAVE_IPV6
|
||||
|
||||
struct sockaddr_in * addrv4p = (struct sockaddr_in *) addr;
|
||||
if ( 1 == inet_pton(AF_INET, ip_str, &(addrv4p->sin_addr)) )
|
||||
{
|
||||
addr->ss_family = AF_INET;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *sockaddr_storage_iptop(const struct sockaddr_storage * addr, char * dst)
|
||||
{
|
||||
switch (addr->ss_family){
|
||||
case AF_INET:
|
||||
{
|
||||
const struct sockaddr_in * ipv4_ptr = (const struct sockaddr_in *) addr;
|
||||
return inet_ntop(addr->ss_family, &(ipv4_ptr->sin_addr), dst, INET_ADDRSTRLEN);
|
||||
}
|
||||
#if HAVE_IPV6
|
||||
case AF_INET6:
|
||||
{
|
||||
const struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) addr;
|
||||
return inet_ntop(addr->ss_family, &(addrv6p->sin6_addr), dst, INET6_ADDRSTRLEN);
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
{
|
||||
return NULL;
|
||||
}}
|
||||
}
|
||||
|
||||
66
nmap_dns.cc
66
nmap_dns.cc
@@ -289,52 +289,6 @@ struct request {
|
||||
u16 id;
|
||||
};
|
||||
|
||||
std::string sockaddr_storage_iptostring(const struct sockaddr_storage & addr)
|
||||
{
|
||||
std::string output;
|
||||
|
||||
switch (addr.ss_family){
|
||||
case AF_INET:
|
||||
{
|
||||
const struct sockaddr_in *ipv4_ptr = (const struct sockaddr_in *) &addr;
|
||||
output = inet_ntoa(ipv4_ptr->sin_addr);
|
||||
break;
|
||||
}
|
||||
case AF_INET6:
|
||||
{
|
||||
char addrStr[INET6_ADDRSTRLEN+1];
|
||||
struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) &addr;
|
||||
inet_ntop(addr.ss_family, &(addrv6p->sin6_addr), addrStr, INET6_ADDRSTRLEN);
|
||||
output = addrStr;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
output = "INVALID_IP";
|
||||
}}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
int sockaddr_storage_inet_pton(const char * ip_str, struct sockaddr_storage * addr)
|
||||
{
|
||||
struct sockaddr_in6 * addrv6p = (struct sockaddr_in6 *) addr;
|
||||
struct sockaddr_in * addrv4p = (struct sockaddr_in *) addr;
|
||||
|
||||
if ( 1 == inet_pton(AF_INET6, ip_str, &(addrv6p->sin6_addr)) )
|
||||
{
|
||||
addr->ss_family = AF_INET6;
|
||||
return 1;
|
||||
}
|
||||
else if ( 1 == inet_pton(AF_INET, ip_str, &(addrv4p->sin_addr)) )
|
||||
{
|
||||
addr->ss_family = AF_INET;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
class HostElem
|
||||
{
|
||||
public:
|
||||
@@ -530,7 +484,10 @@ public:
|
||||
case AF_INET:
|
||||
{
|
||||
ptr.clear();
|
||||
std::string ipv4 = sockaddr_storage_iptostring(ip);
|
||||
char ipv4_c[INET_ADDRSTRLEN];
|
||||
if(!sockaddr_storage_iptop(&ip, ipv4_c)) return false;
|
||||
|
||||
std::string ipv4 = ipv4_c;
|
||||
std::string octet;
|
||||
for (std::string::const_reverse_iterator c=ipv4.rbegin(); c != ipv4.rend(); ++c)
|
||||
if((*c)=='.')
|
||||
@@ -1261,7 +1218,13 @@ static void read_evt_handler(nsock_pool nsp, nsock_event evt, void *) {
|
||||
if (process_result(ip, ptr->value, ACTION_FINISHED, p.id))
|
||||
{
|
||||
if (o.debugging >= TRACE_DEBUG_LEVEL)
|
||||
log_write(LOG_STDOUT, "mass_rdns: OK MATCHED <%s> to <%s>\n", sockaddr_storage_iptostring(ip).c_str(), ptr->value.c_str());
|
||||
{
|
||||
char ipstr[INET6_ADDRSTRLEN];
|
||||
sockaddr_storage_iptop(&ip, ipstr);
|
||||
log_write(LOG_STDOUT, "mass_rdns: OK MATCHED <%s> to <%s>\n",
|
||||
ipstr,
|
||||
ptr->value.c_str());
|
||||
}
|
||||
output_summary();
|
||||
stat_ok++;
|
||||
}
|
||||
@@ -1272,7 +1235,12 @@ static void read_evt_handler(nsock_pool nsp, nsock_event evt, void *) {
|
||||
sockaddr_storage ip;
|
||||
if(DNS::Factory::ptrToIp(a.name, ip))
|
||||
{
|
||||
if (o.debugging >= TRACE_DEBUG_LEVEL) log_write(LOG_STDOUT, "mass_rdns: CNAME found for <%s>\n", sockaddr_storage_iptostring(ip).c_str());
|
||||
if (o.debugging >= TRACE_DEBUG_LEVEL)
|
||||
{
|
||||
char ipstr[INET6_ADDRSTRLEN];
|
||||
sockaddr_storage_iptop(&ip, ipstr);
|
||||
log_write(LOG_STDOUT, "mass_rdns: CNAME found for <%s>\n", ipstr);
|
||||
}
|
||||
process_result(ip, "", ACTION_CNAME_LIST, p.id);
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user