1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-15 12:19:02 +00:00

Added support to resolve proxy hostnames.

This commit is contained in:
henri
2013-04-22 19:32:52 +00:00
parent b7b3b4bd3e
commit 6e8b30d721
3 changed files with 20 additions and 6 deletions

View File

@@ -461,3 +461,17 @@ 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) {
struct addrinfo *res;
int rc;
rc = getaddrinfo(host, NULL, NULL, &res);
if (rc)
return -rc;
*addr = *res->ai_addr;
*addrlen = res->ai_addrlen;
freeaddrinfo(res);
return 1;
}

View File

@@ -136,6 +136,8 @@ struct proxy_op {
/* ------------------- UTIL FUNCTIONS ------------------- */
int proxy_resolve(const char *host, struct sockaddr *addr, size_t *addrlen);
static inline struct proxy_node *proxy_ctx_node_current(struct proxy_chain_context *ctx) {
return GH_LIST_ELEM_DATA(ctx->px_current);
}

View File

@@ -79,17 +79,15 @@ const struct proxy_op proxy_http_ops = {
int proxy_http_node_new(struct proxy_node **node, const struct uri *uri) {
struct sockaddr_in *sin;
struct proxy_node *proxy;
proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node));
proxy->ops = &proxy_http_ops;
sin = (struct sockaddr_in *)&proxy->ss;
sin->sin_family = AF_INET;
inet_pton(AF_INET, uri->host, &sin->sin_addr); /* TODO Resolve hostnames!! */
proxy->sslen = sizeof(struct sockaddr_in);
if (proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen) < 0) {
free(proxy);
return -1;
}
if (uri->port == -1)
proxy->port = DEFAULT_PROXY_PORT_HTTP;