Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/haad/proxychains.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin R. Haskell <proxychains@benizi.com>2012-09-28 10:32:04 +0400
committerBenjamin R. Haskell <proxychains@benizi.com>2012-10-12 23:39:03 +0400
commitd3516a1c28df7ec7c55216a47d84dbd39d3b2258 (patch)
tree62a0dc07f4611e6bfd339c9d1b2efde45ab9ceed
parentc4decf6da23cda8e0bc1d849bc6306e50fb71b32 (diff)
Add simple SOCKS5 proxy mode
If the environment variable PROXYCHAINS_SOCKS5 is set to a port number, the configuration will be a single chain with a SOCKS5 proxy on localhost:{that port}. Additionally, setting the PROXYCHAINS_DNS environment variable (to any value at all) will cause DNS queries to be proxied.
-rw-r--r--src/common.h2
-rw-r--r--src/libproxychains.c56
2 files changed, 50 insertions, 8 deletions
diff --git a/src/common.h b/src/common.h
index 995fe73..4db13ff 100644
--- a/src/common.h
+++ b/src/common.h
@@ -1,6 +1,8 @@
#define PROXYCHAINS_CONF_FILE_ENV_VAR "PROXYCHAINS_CONF_FILE"
#define PROXYCHAINS_QUIET_MODE_ENV_VAR "PROXYCHAINS_QUIET_MODE"
#define PROXYCHAINS_CONF_FILE "proxychains.conf"
+#define PROXYCHAINS_SOCKS5_ENV_VAR "PROXYCHAINS_SOCKS5"
+#define PROXYCHAINS_DNS_ENV_VAR "PROXYCHAINS_DNS"
#define LOG_PREFIX "[proxychains] "
#define PROXYCHAINS_VERSION_MAJOR 4
diff --git a/src/libproxychains.c b/src/libproxychains.c
index 5198c60..05d992e 100644
--- a/src/libproxychains.c
+++ b/src/libproxychains.c
@@ -72,7 +72,9 @@ pthread_once_t init_once = PTHREAD_ONCE_INIT;
#endif
static int init_l = 0;
+static void load_default_settings(chain_type *ct);
static inline void get_chain_data(proxy_data * pd, unsigned int *proxy_count, chain_type * ct);
+static void simple_socks5_env(proxy_data * pd, unsigned int *proxy_count, chain_type * ct);
static void* load_sym(char* symname, void* proxyfunc) {
@@ -101,6 +103,9 @@ static void do_init(void) {
MUTEX_INIT(&internal_getsrvbyname_lock, NULL);
#endif
+ /* check for simple SOCKS5 proxy setup */
+ simple_socks5_env(proxychains_pd, &proxychains_proxy_count, &proxychains_ct);
+
/* read the config file */
get_chain_data(proxychains_pd, &proxychains_proxy_count, &proxychains_ct);
@@ -162,6 +167,19 @@ open_config_file() {
return file;
}
+/* default settings common to get_chain_data and simple_socks5_env */
+static void load_default_settings(chain_type *ct) {
+ char *env;
+
+ tcp_read_time_out = 4 * 1000;
+ tcp_connect_time_out = 10 * 1000;
+ *ct = DYNAMIC_TYPE;
+
+ env = getenv(PROXYCHAINS_QUIET_MODE_ENV_VAR);
+ if(env && *env == '1')
+ proxychains_quiet_mode = 1;
+}
+
/* get configuration from config file */
static void get_chain_data(proxy_data * pd, unsigned int *proxy_count, chain_type * ct) {
unsigned int count = 0;
@@ -175,17 +193,11 @@ static void get_chain_data(proxy_data * pd, unsigned int *proxy_count, chain_typ
if(proxychains_got_chain_data)
return;
- //Some defaults
- tcp_read_time_out = 4 * 1000;
- tcp_connect_time_out = 10 * 1000;
- *ct = DYNAMIC_TYPE;
+ load_default_settings(ct);
+
env = get_config_path(getenv(PROXYCHAINS_CONF_FILE_ENV_VAR), buff, sizeof(buff));
file = fopen(env, "r");
- env = getenv(PROXYCHAINS_QUIET_MODE_ENV_VAR);
- if(env && *env == '1')
- proxychains_quiet_mode = 1;
-
while(fgets(buff, sizeof(buff), file)) {
if(buff[0] != '\n' && buff[strspn(buff, " ")] != '#') {
/* proxylist has to come last */
@@ -294,6 +306,34 @@ static void get_chain_data(proxy_data * pd, unsigned int *proxy_count, chain_typ
proxychains_got_chain_data = 1;
}
+static void simple_socks5_env(proxy_data *pd, unsigned int *proxy_count, chain_type *ct) {
+ char *port_string;
+
+ if(proxychains_got_chain_data)
+ return;
+
+ load_default_settings(ct);
+
+ port_string = getenv(PROXYCHAINS_SOCKS5_ENV_VAR);
+
+ if(!port_string)
+ return;
+
+ memset(pd, 0, sizeof(proxy_data));
+
+ pd[0].ps = PLAY_STATE;
+ pd[0].ip.as_int = (uint32_t) inet_addr("127.0.0.1");
+ pd[0].port = htons((unsigned short) strtol(port_string, NULL, 0));
+ pd[0].pt = SOCKS5_TYPE;
+ proxychains_max_chain = 1;
+
+ if(getenv(PROXYCHAINS_DNS_ENV_VAR))
+ proxychains_resolver = 1;
+
+ *proxy_count = 1;
+ proxychains_got_chain_data = 1;
+}
+
/******* HOOK FUNCTIONS *******/
int connect(int sock, const struct sockaddr *addr, socklen_t len) {