From 65471b750cbfafc93002b26eef4344ed673782b9 Mon Sep 17 00:00:00 2001 From: Jianing Yang Date: Sat, 3 Mar 2012 14:24:05 +0800 Subject: [PATCH] bugfix: localnet conflicts with proxydns --- src/libproxychains.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libproxychains.c b/src/libproxychains.c index 4b68e83..f723615 100644 --- a/src/libproxychains.c +++ b/src/libproxychains.c @@ -284,6 +284,7 @@ int connect(int sock, const struct sockaddr *addr, unsigned int len) { struct in_addr *p_addr_in; unsigned short port; size_t i; + int remote_dns_connect = 0; if(!init_l) init_lib(); @@ -301,7 +302,11 @@ int connect(int sock, const struct sockaddr *addr, unsigned int len) { PDEBUG("target: %s\n", inet_ntop(AF_INET, p_addr_in, str, sizeof(str))); PDEBUG("port: %d\n", port); #endif - for(i = 0; i < num_localnet_addr; i++) { + + // check if connect called from proxydns + remote_dns_connect = (ntohl(p_addr_in->s_addr) >> 24 == remote_dns_subnet); + + for(i = 0; i < num_localnet_addr && !remote_dns_connect; i++) { if((localnet_addr[i].in_addr.s_addr & localnet_addr[i].netmask.s_addr) == (p_addr_in->s_addr & localnet_addr[i].netmask.s_addr)) { if(localnet_addr[i].port || localnet_addr[i].port == port) {