1
0
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:
dmiller
2022-09-20 23:37:28 +00:00
parent 1bc5302911
commit 7eda670f4b
4 changed files with 14 additions and 6 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;