mirror of
https://github.com/nmap/nmap.git
synced 2025-12-10 08:51:36 +00:00
Fix socks4 proxy parsing when target resolves to IPv6
This commit is contained in:
@@ -443,13 +443,21 @@ void nsock_proxy_ev_dispatch(nsock_pool nspool, nsock_event nsevent, void *udata
|
||||
}
|
||||
}
|
||||
|
||||
int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen) {
|
||||
int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen, int ai_family) {
|
||||
struct addrinfo hints;
|
||||
struct addrinfo *res;
|
||||
int rc;
|
||||
|
||||
rc = getaddrinfo(host, NULL, NULL, &res);
|
||||
if (rc)
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = ai_family;
|
||||
/* All proxy types are TCP-only at the moment */
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
rc = getaddrinfo(host, NULL, &hints, &res);
|
||||
if (rc) {
|
||||
nsock_log_info("getaddrinfo error: %s", gai_strerror(rc));
|
||||
return -abs(rc);
|
||||
}
|
||||
|
||||
*addr = *res->ai_addr;
|
||||
*addrlen = res->ai_addrlen;
|
||||
|
||||
@@ -150,7 +150,7 @@ struct proxy_spec {
|
||||
|
||||
|
||||
/* ------------------- UTIL FUNCTIONS ------------------- */
|
||||
int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen);
|
||||
int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen, int ai_family);
|
||||
|
||||
static inline struct proxy_node *proxy_ctx_node_next(struct proxy_chain_context *ctx) {
|
||||
gh_lnode_t *next;
|
||||
|
||||
@@ -75,7 +75,7 @@ static int proxy_http_node_new(struct proxy_node **node, const struct uri *uri)
|
||||
proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node));
|
||||
proxy->spec = &ProxySpecHttp;
|
||||
|
||||
rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen);
|
||||
rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen, AF_UNSPEC);
|
||||
if (rc < 0) {
|
||||
free(proxy);
|
||||
*node = NULL;
|
||||
|
||||
@@ -85,7 +85,7 @@ static int proxy_socks4_node_new(struct proxy_node **node, const struct uri *uri
|
||||
proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node));
|
||||
proxy->spec = &ProxySpecSocks4;
|
||||
|
||||
rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen);
|
||||
rc = proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen, AF_INET);
|
||||
if (rc < 0)
|
||||
goto err_out;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user