mirror of
https://github.com/nmap/nmap.git
synced 2025-12-17 05:09:00 +00:00
Added support to resolve proxy hostnames.
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -136,6 +136,8 @@ struct proxy_op {
|
|||||||
|
|
||||||
|
|
||||||
/* ------------------- UTIL FUNCTIONS ------------------- */
|
/* ------------------- 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) {
|
static inline struct proxy_node *proxy_ctx_node_current(struct proxy_chain_context *ctx) {
|
||||||
return GH_LIST_ELEM_DATA(ctx->px_current);
|
return GH_LIST_ELEM_DATA(ctx->px_current);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,17 +79,15 @@ const struct proxy_op proxy_http_ops = {
|
|||||||
|
|
||||||
|
|
||||||
int proxy_http_node_new(struct proxy_node **node, const struct uri *uri) {
|
int proxy_http_node_new(struct proxy_node **node, const struct uri *uri) {
|
||||||
struct sockaddr_in *sin;
|
|
||||||
struct proxy_node *proxy;
|
struct proxy_node *proxy;
|
||||||
|
|
||||||
proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node));
|
proxy = (struct proxy_node *)safe_zalloc(sizeof(struct proxy_node));
|
||||||
proxy->ops = &proxy_http_ops;
|
proxy->ops = &proxy_http_ops;
|
||||||
|
|
||||||
sin = (struct sockaddr_in *)&proxy->ss;
|
if (proxy_resolve(uri->host, (struct sockaddr *)&proxy->ss, &proxy->sslen) < 0) {
|
||||||
sin->sin_family = AF_INET;
|
free(proxy);
|
||||||
inet_pton(AF_INET, uri->host, &sin->sin_addr); /* TODO Resolve hostnames!! */
|
return -1;
|
||||||
|
}
|
||||||
proxy->sslen = sizeof(struct sockaddr_in);
|
|
||||||
|
|
||||||
if (uri->port == -1)
|
if (uri->port == -1)
|
||||||
proxy->port = DEFAULT_PROXY_PORT_HTTP;
|
proxy->port = DEFAULT_PROXY_PORT_HTTP;
|
||||||
|
|||||||
Reference in New Issue
Block a user