New release 7.50
This commit is contained in:
parent
4741b8ee90
commit
1c13713ec1
1
.gitignore
vendored
1
.gitignore
vendored
@ -18,3 +18,4 @@ nmap-5.21.tar.bz2
|
|||||||
/nmap-7.30.tar.bz2
|
/nmap-7.30.tar.bz2
|
||||||
/nmap-7.31.tar.bz2
|
/nmap-7.31.tar.bz2
|
||||||
/nmap-7.40.tar.bz2
|
/nmap-7.40.tar.bz2
|
||||||
|
/nmap-7.50.tar.bz2
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
diff -up nmap-6.01/ncat/ncat_connect.c.r29743 nmap-6.01/ncat/ncat_connect.c
|
|
||||||
--- nmap-6.01/ncat/ncat_connect.c.r29743 2012-09-19 14:56:37.889102887 +0200
|
|
||||||
+++ nmap-6.01/ncat/ncat_connect.c 2012-09-19 14:56:56.148241822 +0200
|
|
||||||
@@ -113,6 +113,14 @@
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef WIN32
|
|
||||||
+/* Define missing constant for shutdown(2).
|
|
||||||
+ * See:
|
|
||||||
+ * http://msdn.microsoft.com/en-us/library/windows/desktop/ms740481%28v=vs.85%29.aspx
|
|
||||||
+ */
|
|
||||||
+#define SHUT_WR SD_SEND
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
struct conn_state {
|
|
||||||
nsock_iod sock_nsi;
|
|
||||||
nsock_iod stdin_nsi;
|
|
||||||
@@ -732,6 +740,8 @@ static void read_stdin_handler(nsock_poo
|
|
||||||
if (o.sendonly) {
|
|
||||||
/* In --send-only mode, exit after EOF on stdin. */
|
|
||||||
nsock_loop_quit(nsp);
|
|
||||||
+ } else {
|
|
||||||
+ shutdown(nsi_getsd(cs.sock_nsi), SHUT_WR);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
} else if (status == NSE_STATUS_ERROR) {
|
|
@ -1,490 +0,0 @@
|
|||||||
diff -up nmap-7.30/ncat/ncat_connect.c.allresolve nmap-7.30/ncat/ncat_connect.c
|
|
||||||
--- nmap-7.30/ncat/ncat_connect.c.allresolve 2016-07-19 12:07:58.000000000 +0200
|
|
||||||
+++ nmap-7.30/ncat/ncat_connect.c 2016-10-03 10:56:08.892259479 +0200
|
|
||||||
@@ -164,6 +164,7 @@ static struct conn_state cs = {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
+static void try_nsock_connect(nsock_pool nsp, struct sockaddr_list *conn_addr);
|
|
||||||
static void connect_handler(nsock_pool nsp, nsock_event evt, void *data);
|
|
||||||
static void post_connect(nsock_pool nsp, nsock_iod iod);
|
|
||||||
static void read_stdin_handler(nsock_pool nsp, nsock_event evt, void *data);
|
|
||||||
@@ -535,8 +536,8 @@ static int do_proxy_socks4(void)
|
|
||||||
socket_buffer_init(&stateful_buf, sd);
|
|
||||||
|
|
||||||
if (o.verbose) {
|
|
||||||
- loguser("Connected to proxy %s:%hu\n", inet_socktop(&targetss),
|
|
||||||
- inet_port(&targetss));
|
|
||||||
+ loguser("Connected to proxy %s:%hu\n", inet_socktop(&targetaddrs->addr),
|
|
||||||
+ inet_port(&targetaddrs->addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fill the socks4_data struct */
|
|
||||||
@@ -636,8 +637,8 @@ static int do_proxy_socks5(void)
|
|
||||||
socket_buffer_init(&stateful_buf, sd);
|
|
||||||
|
|
||||||
if (o.verbose) {
|
|
||||||
- loguser("Connected to proxy %s:%hu\n", inet_socktop(&targetss),
|
|
||||||
- inet_port(&targetss));
|
|
||||||
+ loguser("Connected to proxy %s:%hu\n", inet_socktop(&targetaddrs->addr),
|
|
||||||
+ inet_port(&targetaddrs->addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
zmem(&socks5msg,sizeof(socks5msg));
|
|
||||||
@@ -967,7 +968,7 @@ int ncat_connect(void)
|
|
||||||
|
|
||||||
if (o.af != AF_INET)
|
|
||||||
bye("Sorry, -g can only currently be used with IPv4.");
|
|
||||||
- ipopts = buildsrcrte(targetss.in.sin_addr, o.srcrtes, o.numsrcrtes, o.srcrteptr, &ipoptslen);
|
|
||||||
+ ipopts = buildsrcrte(targetaddrs->addr.in.sin_addr, o.srcrtes, o.numsrcrtes, o.srcrteptr, &ipoptslen);
|
|
||||||
|
|
||||||
nsock_iod_set_ipoptions(cs.sock_nsi, ipopts, ipoptslen);
|
|
||||||
free(ipopts); /* Nsock has its own copy */
|
|
||||||
@@ -977,49 +978,18 @@ int ncat_connect(void)
|
|
||||||
if (o.af == AF_UNIX) {
|
|
||||||
if (o.proto == IPPROTO_UDP) {
|
|
||||||
nsock_connect_unixsock_datagram(mypool, cs.sock_nsi, connect_handler, NULL,
|
|
||||||
- &targetss.sockaddr,
|
|
||||||
- SUN_LEN((struct sockaddr_un *)&targetss.sockaddr));
|
|
||||||
+ &targetaddrs->addr.sockaddr,
|
|
||||||
+ SUN_LEN((struct sockaddr_un *)&targetaddrs->addr.sockaddr));
|
|
||||||
} else {
|
|
||||||
nsock_connect_unixsock_stream(mypool, cs.sock_nsi, connect_handler, o.conntimeout,
|
|
||||||
- NULL, &targetss.sockaddr,
|
|
||||||
- SUN_LEN((struct sockaddr_un *)&targetss.sockaddr));
|
|
||||||
+ NULL, &targetaddrs->addr.sockaddr,
|
|
||||||
+ SUN_LEN((struct sockaddr_un *)&targetaddrs->addr.sockaddr));
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
- if (o.proto == IPPROTO_UDP) {
|
|
||||||
- nsock_connect_udp(mypool, cs.sock_nsi, connect_handler,
|
|
||||||
- NULL, &targetss.sockaddr, targetsslen,
|
|
||||||
- inet_port(&targetss));
|
|
||||||
- }
|
|
||||||
-#ifdef HAVE_OPENSSL
|
|
||||||
- else if (o.proto == IPPROTO_SCTP && o.ssl) {
|
|
||||||
- nsock_connect_ssl(mypool, cs.sock_nsi, connect_handler,
|
|
||||||
- o.conntimeout, NULL,
|
|
||||||
- &targetss.sockaddr, targetsslen,
|
|
||||||
- IPPROTO_SCTP, inet_port(&targetss),
|
|
||||||
- NULL);
|
|
||||||
- }
|
|
||||||
-#endif
|
|
||||||
- else if (o.proto == IPPROTO_SCTP) {
|
|
||||||
- nsock_connect_sctp(mypool, cs.sock_nsi, connect_handler,
|
|
||||||
- o.conntimeout, NULL,
|
|
||||||
- &targetss.sockaddr, targetsslen,
|
|
||||||
- inet_port(&targetss));
|
|
||||||
- }
|
|
||||||
-#ifdef HAVE_OPENSSL
|
|
||||||
- else if (o.ssl) {
|
|
||||||
- nsock_connect_ssl(mypool, cs.sock_nsi, connect_handler,
|
|
||||||
- o.conntimeout, NULL,
|
|
||||||
- &targetss.sockaddr, targetsslen,
|
|
||||||
- IPPROTO_TCP, inet_port(&targetss),
|
|
||||||
- NULL);
|
|
||||||
- }
|
|
||||||
-#endif
|
|
||||||
- else {
|
|
||||||
- nsock_connect_tcp(mypool, cs.sock_nsi, connect_handler,
|
|
||||||
- o.conntimeout, NULL,
|
|
||||||
- &targetss.sockaddr, targetsslen,
|
|
||||||
- inet_port(&targetss));
|
|
||||||
+ {
|
|
||||||
+ /* Add connection to first resolved address. */
|
|
||||||
+ try_nsock_connect(mypool, targetaddrs);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* A proxy connection. */
|
|
||||||
@@ -1055,6 +1025,8 @@ int ncat_connect(void)
|
|
||||||
/* connect */
|
|
||||||
rc = nsock_loop(mypool, -1);
|
|
||||||
|
|
||||||
+ free_sockaddr_list(targetaddrs);
|
|
||||||
+
|
|
||||||
if (o.verbose) {
|
|
||||||
struct timeval end_time;
|
|
||||||
double time;
|
|
||||||
@@ -1085,21 +1057,74 @@ static void send_udp_null(nsock_pool nsp
|
|
||||||
nsock_write(nsp, cs.sock_nsi, write_socket_handler, -1, NULL, NULL_PROBE, length);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void try_nsock_connect(nsock_pool nsp, struct sockaddr_list *conn_addr)
|
|
||||||
+{
|
|
||||||
+ if (o.proto == IPPROTO_UDP) {
|
|
||||||
+ nsock_connect_udp(nsp, cs.sock_nsi, connect_handler, (void *)conn_addr->next,
|
|
||||||
+ &conn_addr->addr.sockaddr, conn_addr->addrlen,
|
|
||||||
+ inet_port(&conn_addr->addr));
|
|
||||||
+ }
|
|
||||||
+#ifdef HAVE_OPENSSL
|
|
||||||
+ else if (o.proto == IPPROTO_SCTP && o.ssl) {
|
|
||||||
+ nsock_connect_ssl(nsp, cs.sock_nsi, connect_handler,
|
|
||||||
+ o.conntimeout, (void *)conn_addr->next,
|
|
||||||
+ &conn_addr->addr.sockaddr, conn_addr->addrlen,
|
|
||||||
+ IPPROTO_SCTP, inet_port(&conn_addr->addr),
|
|
||||||
+ NULL);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ else if (o.proto == IPPROTO_SCTP) {
|
|
||||||
+ nsock_connect_sctp(nsp, cs.sock_nsi, connect_handler,
|
|
||||||
+ o.conntimeout, (void *)conn_addr->next,
|
|
||||||
+ &conn_addr->addr.sockaddr, conn_addr->addrlen,
|
|
||||||
+ inet_port(&conn_addr->addr));
|
|
||||||
+ }
|
|
||||||
+#ifdef HAVE_OPENSSL
|
|
||||||
+ else if (o.ssl) {
|
|
||||||
+ nsock_connect_ssl(nsp, cs.sock_nsi, connect_handler,
|
|
||||||
+ o.conntimeout, (void *)conn_addr->next,
|
|
||||||
+ &conn_addr->addr.sockaddr, conn_addr->addrlen,
|
|
||||||
+ IPPROTO_TCP, inet_port(&conn_addr->addr),
|
|
||||||
+ NULL);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ else {
|
|
||||||
+ nsock_connect_tcp(nsp, cs.sock_nsi, connect_handler,
|
|
||||||
+ o.conntimeout, (void *)conn_addr->next,
|
|
||||||
+ &conn_addr->addr.sockaddr, conn_addr->addrlen,
|
|
||||||
+ inet_port(&conn_addr->addr));
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void connect_handler(nsock_pool nsp, nsock_event evt, void *data)
|
|
||||||
{
|
|
||||||
enum nse_status status = nse_status(evt);
|
|
||||||
enum nse_type type = nse_type(evt);
|
|
||||||
+ struct sockaddr_list *next_addr = (struct sockaddr_list *)data;
|
|
||||||
|
|
||||||
ncat_assert(type == NSE_TYPE_CONNECT || type == NSE_TYPE_CONNECT_SSL);
|
|
||||||
|
|
||||||
- if (status == NSE_STATUS_ERROR) {
|
|
||||||
- if (!o.zerobyte||o.verbose)
|
|
||||||
- loguser("%s.\n", socket_strerror(nse_errorcode(evt)));
|
|
||||||
- exit(1);
|
|
||||||
- } else if (status == NSE_STATUS_TIMEOUT) {
|
|
||||||
- if (!o.zerobyte||o.verbose)
|
|
||||||
- loguser("%s.\n", socket_strerror(ETIMEDOUT));
|
|
||||||
- exit(1);
|
|
||||||
+ if (status == NSE_STATUS_ERROR || status == NSE_STATUS_TIMEOUT) {
|
|
||||||
+ int errcode = (status == NSE_STATUS_TIMEOUT)?ETIMEDOUT:nse_errorcode(evt);
|
|
||||||
+ /* If there are more resolved addresses, try connecting to next one */
|
|
||||||
+ if (next_addr != NULL) {
|
|
||||||
+ if (o.verbose) {
|
|
||||||
+ union sockaddr_u peer;
|
|
||||||
+ zmem(&peer, sizeof(peer.storage));
|
|
||||||
+ nsock_iod_get_communication_info(cs.sock_nsi, NULL, NULL, NULL,
|
|
||||||
+ &peer.sockaddr, sizeof(peer.storage));
|
|
||||||
+ loguser("Connection to %s failed: %s.\n", inet_socktop(&peer), socket_strerror(errcode));
|
|
||||||
+ loguser("Trying next address...\n");
|
|
||||||
+ }
|
|
||||||
+ try_nsock_connect(nsp, next_addr);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ free_sockaddr_list(targetaddrs);
|
|
||||||
+ if (!o.zerobyte||o.verbose)
|
|
||||||
+ loguser("%s.\n", socket_strerror(errcode));
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
} else {
|
|
||||||
ncat_assert(status == NSE_STATUS_SUCCESS);
|
|
||||||
}
|
|
||||||
diff -up nmap-7.30/ncat/ncat_core.c.allresolve nmap-7.30/ncat/ncat_core.c
|
|
||||||
--- nmap-7.30/ncat/ncat_core.c.allresolve 2016-07-19 12:07:58.000000000 +0200
|
|
||||||
+++ nmap-7.30/ncat/ncat_core.c 2016-10-03 10:45:50.689808852 +0200
|
|
||||||
@@ -146,8 +146,7 @@ int num_listenaddrs = 0;
|
|
||||||
union sockaddr_u srcaddr;
|
|
||||||
size_t srcaddrlen;
|
|
||||||
|
|
||||||
-union sockaddr_u targetss;
|
|
||||||
-size_t targetsslen;
|
|
||||||
+struct sockaddr_list *targetaddrs;
|
|
||||||
|
|
||||||
/* Global options structure. */
|
|
||||||
struct options o;
|
|
||||||
@@ -212,19 +211,23 @@ void options_init(void)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* Internal helper for resolve and resolve_numeric. addl_flags is ored into
|
|
||||||
- hints.ai_flags, so you can add AI_NUMERICHOST. */
|
|
||||||
+/* Internal helper for resolve and resolve_numeric.
|
|
||||||
+ addl_flags is ored into hints.ai_flags, so you can add AI_NUMERICHOST.
|
|
||||||
+ sl is a pointer to first element of sockaddr linked list, which is always
|
|
||||||
+ statically allocated. Next list elements are dynamically allocated.
|
|
||||||
+ If multiple_addrs is false then only first address is returned. */
|
|
||||||
static int resolve_internal(const char *hostname, unsigned short port,
|
|
||||||
- struct sockaddr_storage *ss, size_t *sslen, int af, int addl_flags)
|
|
||||||
+ struct sockaddr_list *sl, int af, int addl_flags, int multiple_addrs)
|
|
||||||
{
|
|
||||||
struct addrinfo hints;
|
|
||||||
struct addrinfo *result;
|
|
||||||
+ struct addrinfo *next;
|
|
||||||
+ struct sockaddr_list **item_ptr = &sl;
|
|
||||||
+ struct sockaddr_list *new_item;
|
|
||||||
char portbuf[16];
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
ncat_assert(hostname != NULL);
|
|
||||||
- ncat_assert(ss != NULL);
|
|
||||||
- ncat_assert(sslen != NULL);
|
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(hints));
|
|
||||||
hints.ai_family = af;
|
|
||||||
@@ -241,8 +244,19 @@ static int resolve_internal(const char *
|
|
||||||
if (result == NULL)
|
|
||||||
return EAI_NONAME;
|
|
||||||
ncat_assert(result->ai_addrlen > 0 && result->ai_addrlen <= (int) sizeof(struct sockaddr_storage));
|
|
||||||
- *sslen = result->ai_addrlen;
|
|
||||||
- memcpy(ss, result->ai_addr, *sslen);
|
|
||||||
+ for (next = result; next != NULL; next = next->ai_next) {
|
|
||||||
+ if (*item_ptr == NULL)
|
|
||||||
+ {
|
|
||||||
+ *item_ptr = (struct sockaddr_list *)safe_malloc(sizeof(struct sockaddr_list));
|
|
||||||
+ (**item_ptr).next = NULL;
|
|
||||||
+ }
|
|
||||||
+ new_item = *item_ptr;
|
|
||||||
+ new_item->addrlen = next->ai_addrlen;
|
|
||||||
+ memcpy(&new_item->addr.storage, next->ai_addr, next->ai_addrlen);
|
|
||||||
+ if (!multiple_addrs)
|
|
||||||
+ break;
|
|
||||||
+ item_ptr = &new_item->next;
|
|
||||||
+ }
|
|
||||||
freeaddrinfo(result);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -261,12 +275,42 @@ int resolve(const char *hostname, unsign
|
|
||||||
struct sockaddr_storage *ss, size_t *sslen, int af)
|
|
||||||
{
|
|
||||||
int flags;
|
|
||||||
+ struct sockaddr_list sl;
|
|
||||||
+ int result;
|
|
||||||
|
|
||||||
flags = 0;
|
|
||||||
if (o.nodns)
|
|
||||||
flags |= AI_NUMERICHOST;
|
|
||||||
|
|
||||||
- return resolve_internal(hostname, port, ss, sslen, af, flags);
|
|
||||||
+ result = resolve_internal(hostname, port, &sl, af, flags, 0);
|
|
||||||
+ *ss = sl.addr.storage;
|
|
||||||
+ *sslen = sl.addrlen;
|
|
||||||
+ return result;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Resolves the given hostname or IP address with getaddrinfo, and stores
|
|
||||||
+ all results into a linked list.
|
|
||||||
+ The rest of the behavior is same as resolve(). */
|
|
||||||
+int resolve_multi(const char *hostname, unsigned short port,
|
|
||||||
+ struct sockaddr_list *sl, int af)
|
|
||||||
+{
|
|
||||||
+ int flags;
|
|
||||||
+
|
|
||||||
+ flags = 0;
|
|
||||||
+ if (o.nodns)
|
|
||||||
+ flags |= AI_NUMERICHOST;
|
|
||||||
+
|
|
||||||
+ return resolve_internal(hostname, port, sl, af, flags, 1);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void free_sockaddr_list(struct sockaddr_list *sl)
|
|
||||||
+{
|
|
||||||
+ struct sockaddr_list *current, *next = sl;
|
|
||||||
+ while (next != NULL) {
|
|
||||||
+ current = next;
|
|
||||||
+ next = current->next;
|
|
||||||
+ free(current);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdinfo_close(struct fdinfo *fdn)
|
|
||||||
diff -up nmap-7.30/ncat/ncat_core.h.allresolve nmap-7.30/ncat/ncat_core.h
|
|
||||||
--- nmap-7.30/ncat/ncat_core.h.allresolve 2016-07-19 12:07:58.000000000 +0200
|
|
||||||
+++ nmap-7.30/ncat/ncat_core.h 2016-10-03 10:45:50.689808852 +0200
|
|
||||||
@@ -132,14 +132,20 @@
|
|
||||||
a IPV4 INADDR_ANY and a IPV6 in6addr_any at most or a user defined address */
|
|
||||||
#define NUM_LISTEN_ADDRS 2
|
|
||||||
|
|
||||||
+/* Structure to store a linked list of resolved addresses. */
|
|
||||||
+struct sockaddr_list {
|
|
||||||
+ union sockaddr_u addr;
|
|
||||||
+ size_t addrlen;
|
|
||||||
+ struct sockaddr_list* next;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
extern union sockaddr_u listenaddrs[NUM_LISTEN_ADDRS];
|
|
||||||
extern int num_listenaddrs;
|
|
||||||
|
|
||||||
extern union sockaddr_u srcaddr;
|
|
||||||
extern size_t srcaddrlen;
|
|
||||||
|
|
||||||
-extern union sockaddr_u targetss;
|
|
||||||
-extern size_t targetsslen;
|
|
||||||
+extern struct sockaddr_list *targetaddrs;
|
|
||||||
|
|
||||||
enum exec_mode {
|
|
||||||
EXEC_PLAIN,
|
|
||||||
@@ -228,6 +234,14 @@ void options_init(void);
|
|
||||||
int resolve(const char *hostname, unsigned short port,
|
|
||||||
struct sockaddr_storage *ss, size_t *sslen, int af);
|
|
||||||
|
|
||||||
+/* Resolves the given hostname or IP address with getaddrinfo, and stores
|
|
||||||
+ all results into a linked list.
|
|
||||||
+ The rest of behavior is same as resolve(). */
|
|
||||||
+int resolve_multi(const char *hostname, unsigned short port,
|
|
||||||
+ struct sockaddr_list *sl, int af);
|
|
||||||
+
|
|
||||||
+void free_sockaddr_list(struct sockaddr_list *sl);
|
|
||||||
+
|
|
||||||
int fdinfo_close(struct fdinfo *fdn);
|
|
||||||
int fdinfo_recv(struct fdinfo *fdn, char *buf, size_t size);
|
|
||||||
int fdinfo_send(struct fdinfo *fdn, const char *buf, size_t size);
|
|
||||||
diff -up nmap-7.30/ncat/ncat_main.c.allresolve nmap-7.30/ncat/ncat_main.c
|
|
||||||
--- nmap-7.30/ncat/ncat_main.c.allresolve 2016-10-03 10:45:50.687808850 +0200
|
|
||||||
+++ nmap-7.30/ncat/ncat_main.c 2016-10-03 10:45:50.690808853 +0200
|
|
||||||
@@ -683,15 +683,20 @@ int main(int argc, char *argv[])
|
|
||||||
}
|
|
||||||
#endif /* HAVE_SYS_UN_H */
|
|
||||||
|
|
||||||
+ /* Create a static target address, because at least one target address must be always allocated */
|
|
||||||
+ static struct sockaddr_list statictargetaddr;
|
|
||||||
+ statictargetaddr.next = NULL; /* List with one item */
|
|
||||||
+ targetaddrs = (struct sockaddr_list *)safe_zalloc(sizeof(struct sockaddr_list));
|
|
||||||
+
|
|
||||||
/* Will be AF_INET or AF_INET6 or AF_UNIX when valid */
|
|
||||||
- memset(&targetss.storage, 0, sizeof(targetss.storage));
|
|
||||||
- targetss.storage.ss_family = AF_UNSPEC;
|
|
||||||
- srcaddr.storage = targetss.storage;
|
|
||||||
+ memset(&srcaddr.storage, 0, sizeof(srcaddr.storage));
|
|
||||||
+ srcaddr.storage.ss_family = AF_UNSPEC;
|
|
||||||
+ targetaddrs->addr.storage = srcaddr.storage;
|
|
||||||
|
|
||||||
/* Clear the listenaddrs array */
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < NUM_LISTEN_ADDRS; i++) {
|
|
||||||
- listenaddrs[i].storage = targetss.storage;
|
|
||||||
+ listenaddrs[i].storage = srcaddr.storage;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o.proxyaddr) {
|
|
||||||
@@ -707,12 +712,12 @@ int main(int argc, char *argv[])
|
|
||||||
* (due to the colons in the IPv6 address and host:port separator).
|
|
||||||
*/
|
|
||||||
|
|
||||||
- targetsslen = parseproxy(o.proxyaddr,
|
|
||||||
- &targetss.storage, &targetsslen, &proxyport);
|
|
||||||
+ targetaddrs->addrlen = parseproxy(o.proxyaddr,
|
|
||||||
+ &targetaddrs->addr.sockaddr, &targetaddrs->addrlen, &proxyport);
|
|
||||||
if (o.af == AF_INET) {
|
|
||||||
- targetss.in.sin_port = htons(proxyport);
|
|
||||||
+ targetaddrs->addr.in.sin_port = htons(proxyport);
|
|
||||||
} else { // might modify to else if and test AF_{INET6|UNIX|UNSPEC}
|
|
||||||
- targetss.in6.sin6_port = htons(proxyport);
|
|
||||||
+ targetaddrs->addr.in6.sin6_port = htons(proxyport);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
bye("Invalid proxy type \"%s\".", o.proxytype);
|
|
||||||
@@ -791,10 +796,10 @@ int main(int argc, char *argv[])
|
|
||||||
} else {
|
|
||||||
#if HAVE_SYS_UN_H
|
|
||||||
if (o.af == AF_UNIX) {
|
|
||||||
- memset(&targetss.storage, 0, sizeof(struct sockaddr_un));
|
|
||||||
- targetss.un.sun_family = AF_UNIX;
|
|
||||||
- strncpy(targetss.un.sun_path, argv[optind], sizeof(targetss.un.sun_path));
|
|
||||||
- targetsslen = SUN_LEN(&targetss.un);
|
|
||||||
+ memset(&targetaddrs->addr.storage, 0, sizeof(struct sockaddr_un));
|
|
||||||
+ targetaddrs->addr.un.sun_family = AF_UNIX;
|
|
||||||
+ strncpy(targetaddrs->addr.un.sun_path, argv[optind], sizeof(targetaddrs->addr.un.sun_path));
|
|
||||||
+ targetaddrs->addrlen = SUN_LEN(&targetaddrs->addr.un);
|
|
||||||
o.target = argv[optind];
|
|
||||||
optind++;
|
|
||||||
} else
|
|
||||||
@@ -808,7 +813,7 @@ int main(int argc, char *argv[])
|
|
||||||
* targetss contains data already and you don't want remove them
|
|
||||||
*/
|
|
||||||
if( !o.proxytype
|
|
||||||
- && (rc = resolve(o.target, 0, &targetss.storage, &targetsslen, o.af)) != 0)
|
|
||||||
+ && (rc = resolve_multi(o.target, 0, targetaddrs, o.af)) != 0)
|
|
||||||
|
|
||||||
bye("Could not resolve hostname \"%s\": %s.", o.target, gai_strerror(rc));
|
|
||||||
optind++;
|
|
||||||
@@ -846,21 +851,28 @@ int main(int argc, char *argv[])
|
|
||||||
|
|
||||||
if (o.proxytype && !o.listen)
|
|
||||||
; /* Do nothing - port is already set to proxyport */
|
|
||||||
- else if (targetss.storage.ss_family == AF_INET)
|
|
||||||
- targetss.in.sin_port = htons(o.portno);
|
|
||||||
+ else {
|
|
||||||
+ struct sockaddr_list *targetaddrs_item = targetaddrs;
|
|
||||||
+ while (targetaddrs_item != NULL)
|
|
||||||
+ {
|
|
||||||
+ if (targetaddrs_item->addr.storage.ss_family == AF_INET)
|
|
||||||
+ targetaddrs_item->addr.in.sin_port = htons(o.portno);
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
- else if (targetss.storage.ss_family == AF_INET6)
|
|
||||||
- targetss.in6.sin6_port = htons(o.portno);
|
|
||||||
+ else if (targetaddrs_item->addr.storage.ss_family == AF_INET6)
|
|
||||||
+ targetaddrs_item->addr.in6.sin6_port = htons(o.portno);
|
|
||||||
#endif
|
|
||||||
#if HAVE_SYS_UN_H
|
|
||||||
- /* If we use Unix domain sockets, we have to count with them. */
|
|
||||||
- else if (targetss.storage.ss_family == AF_UNIX)
|
|
||||||
- ; /* Do nothing. */
|
|
||||||
+ /* If we use Unix domain sockets, we have to count with them. */
|
|
||||||
+ else if (targetaddrs_item->addr.storage.ss_family == AF_UNIX)
|
|
||||||
+ ; /* Do nothing. */
|
|
||||||
#endif
|
|
||||||
- else if (targetss.storage.ss_family == AF_UNSPEC)
|
|
||||||
- ; /* Leave unspecified. */
|
|
||||||
- else
|
|
||||||
- bye("Unknown address family %d.", targetss.storage.ss_family);
|
|
||||||
+ else if (targetaddrs_item->addr.storage.ss_family == AF_UNSPEC)
|
|
||||||
+ ; /* Leave unspecified. */
|
|
||||||
+ else
|
|
||||||
+ bye("Unknown address family %d.", targetaddrs_item->addr.storage.ss_family);
|
|
||||||
+ targetaddrs_item = targetaddrs_item->next;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (srcport != -1) {
|
|
||||||
if (o.listen) {
|
|
||||||
@@ -872,7 +884,7 @@ int main(int argc, char *argv[])
|
|
||||||
/* We have a source port but not an explicit source address;
|
|
||||||
fill in an unspecified address of the same family as the
|
|
||||||
target. */
|
|
||||||
- srcaddr.storage.ss_family = targetss.storage.ss_family;
|
|
||||||
+ srcaddr.storage.ss_family = targetaddrs->addr.storage.ss_family;
|
|
||||||
if (srcaddr.storage.ss_family == AF_INET)
|
|
||||||
srcaddr.in.sin_addr.s_addr = INADDR_ANY;
|
|
||||||
else if (srcaddr.storage.ss_family == AF_INET6)
|
|
||||||
@@ -964,8 +976,8 @@ static int ncat_listen_mode(void)
|
|
||||||
bye("/bin/sh is not executable, so `-c' won't work.");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
- if (targetss.storage.ss_family != AF_UNSPEC) {
|
|
||||||
- listenaddrs[num_listenaddrs++] = targetss;
|
|
||||||
+ if (targetaddrs->addr.storage.ss_family != AF_UNSPEC) {
|
|
||||||
+ listenaddrs[num_listenaddrs++] = targetaddrs->addr;
|
|
||||||
} else {
|
|
||||||
size_t ss_len;
|
|
||||||
int rc;
|
|
||||||
diff -up nmap-7.30/ncat/util.c.allresolve nmap-7.30/ncat/util.c
|
|
||||||
--- nmap-7.30/ncat/util.c.allresolve 2016-04-04 17:38:44.000000000 +0200
|
|
||||||
+++ nmap-7.30/ncat/util.c 2016-10-03 10:45:50.690808853 +0200
|
|
||||||
@@ -503,7 +503,7 @@ int do_connect(int type)
|
|
||||||
/* We need a socket that can be inherited by child processes in
|
|
||||||
ncat_exec_win.c, for --exec and --sh-exec. inheritable_socket is from
|
|
||||||
nbase. */
|
|
||||||
- sock = inheritable_socket(targetss.storage.ss_family, type, 0);
|
|
||||||
+ sock = inheritable_socket(targetaddrs->addr.storage.ss_family, type, 0);
|
|
||||||
|
|
||||||
if (srcaddr.storage.ss_family != AF_UNSPEC) {
|
|
||||||
size_t sa_len;
|
|
||||||
@@ -520,7 +520,7 @@ int do_connect(int type)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sock != -1) {
|
|
||||||
- if (connect(sock, &targetss.sockaddr, (int) targetsslen) != -1)
|
|
||||||
+ if (connect(sock, &targetaddrs->addr.sockaddr, (int) targetaddrs->addrlen) != -1)
|
|
||||||
return sock;
|
|
||||||
else if (socket_errno() == EINPROGRESS || socket_errno() == EAGAIN)
|
|
||||||
return sock;
|
|
10
nmap.spec
10
nmap.spec
@ -5,9 +5,9 @@
|
|||||||
Summary: Network exploration tool and security scanner
|
Summary: Network exploration tool and security scanner
|
||||||
Name: nmap
|
Name: nmap
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
Version: 7.40
|
Version: 7.50
|
||||||
#global prerelease TEST5
|
#global prerelease TEST5
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
# Uses combination of licenses based on GPL license, but with extra modification
|
# Uses combination of licenses based on GPL license, but with extra modification
|
||||||
# so it got its own license tag rhbz#1055861
|
# so it got its own license tag rhbz#1055861
|
||||||
License: Nmap
|
License: Nmap
|
||||||
@ -28,8 +28,6 @@ Patch2: nmap-4.52-noms.patch
|
|||||||
Patch5: ncat_reg_stdin.diff
|
Patch5: ncat_reg_stdin.diff
|
||||||
Patch6: nmap-6.25-displayerror.patch
|
Patch6: nmap-6.25-displayerror.patch
|
||||||
|
|
||||||
#sent upstream, rhbz#978964
|
|
||||||
Patch8: nmap-6.40-allresolve.patch
|
|
||||||
|
|
||||||
URL: http://nmap.org/
|
URL: http://nmap.org/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
@ -82,7 +80,6 @@ uses.
|
|||||||
%patch2 -p1 -b .noms
|
%patch2 -p1 -b .noms
|
||||||
%patch5 -p1 -b .ncat_reg_stdin
|
%patch5 -p1 -b .ncat_reg_stdin
|
||||||
%patch6 -p1 -b .displayerror
|
%patch6 -p1 -b .displayerror
|
||||||
%patch8 -p1 -b .allresolve
|
|
||||||
|
|
||||||
# for aarch64 support, not needed with autotools 2.69+
|
# for aarch64 support, not needed with autotools 2.69+
|
||||||
for f in acinclude.m4 configure.ac nping/configure.ac
|
for f in acinclude.m4 configure.ac nping/configure.ac
|
||||||
@ -221,6 +218,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{_mandir}/man1/xnmap.1.gz
|
%{_mandir}/man1/xnmap.1.gz
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jun 21 2017 Pavel Zhukov <landgraf@fedoraproject.org> - 2:7.50-1
|
||||||
|
- New release (7.50)
|
||||||
|
|
||||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:7.40-2
|
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:7.40-2
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||||
|
|
||||||
|
BIN
nmapfe-32.png
BIN
nmapfe-32.png
Binary file not shown.
Before Width: | Height: | Size: 2.5 KiB |
BIN
nmapfe-48.png
BIN
nmapfe-48.png
Binary file not shown.
Before Width: | Height: | Size: 4.4 KiB |
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (nmap-7.40.tar.bz2) = 98e37bf1c29789ea19ee4542d719ed6970c8bcc1bf92af4948a52a75273c2403329149f6b5df6368c23840d1bb3f47af9e5ce543f7a36596a33896609574f02d
|
SHA512 (nmap-7.50.tar.bz2) = b74c5711f03bae363164cdb7e62923ab938c81c7bbcd080eaa2d1acc89f09eb0a7e0f5deb9628b81057c7a35ecd487a2d09dfe3b58b0db6c84cf0b39f526e5f2
|
||||||
|
Loading…
Reference in New Issue
Block a user