proxychains 使用指北

2018-04-17 17:36:24 +08:00
 wsgzao

前言

proxychains 新的版本已经称为 proxychains-ng 由 rofl0r 托管在 GitHub 中维护,一般使用 proxychains 用于加速更新和下载国外的一些开源组件,比如 yum 和 pip。proxychains 使用十分简单,甚至都不必编译安装。

proxychains ng (new generation)

更新历史

2017 年 04 月 16 日 - 初稿

阅读原文 - https://wsgzao.github.io/post/proxychains/

扩展阅读

proxychains-ng - https://github.com/rofl0r/proxychains-ng


ProxyChains 简介

ProxyChains is a UNIX program, that hooks network-related libc functions in DYNAMICALLY LINKED programs via a preloaded DLL (dlsym(), LD_PRELOAD) and redirects the connections through SOCKS4a/5 or HTTP proxies. It supports TCP only (no UDP/ICMP etc).

The way it works is basically a HACK; so it is possible that it doesn't work with your program, especially when it's a script, or starts numerous processes like background daemons or uses dlopen() to load "modules" (bug in glibc dynlinker).

It should work with simple compiled (C/C++) dynamically linked programs though.

If your program doesn't work with proxychains, consider using an iptables based solution instead; this is much more robust.

Supported Platforms: Linux, BSD, Mac.

proxychains 安装配置

# needs a working C compiler, preferably gcc
yum install gcc -y
./configure --prefix=/usr --sysconfdir=/etc
make
[optional] sudo make install
[optional] sudo make install-config (installs proxychains.conf)

# if you dont install, you can use proxychains from the build directory like this: 
./proxychains4 -f src/proxychains.conf telnet google.com 80

# 一般编辑 proxychains.conf 添加 socks5 地址即可立即使用
vim /etc/proxychains.conf

[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
#socks4 	127.0.0.1 9050
socks5 172.28.70.26 1080

# 测试
[root@centos7 ~]# curl myip.ipip.net
当前 IP:116.228.53.149  来自于:中国 上海 上海  电信
[root@centos7 ~]# proxychains4 curl myip.ipip.net
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.12
[proxychains] Strict chain  ...  172.28.70.26:1080  ...  myip.ipip.net:80  ...  OK
当前 IP:45.79.192.22  来自于:美国 乔治亚州 亚特兰大  linode.com

proxychains.conf 配置文件

[root@centos7 ~]# cat /etc/proxychains.conf 
# proxychains.conf  VER 4.x
#
#        HTTP, SOCKS4a, SOCKS5 tunneling proxifier with DNS.


# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
# otherwise the last appearing option will be accepted
#
#dynamic_chain
#
# Dynamic - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped)
# otherwise EINTR is returned to the app
#
strict_chain
#
# Strict - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# all proxies must be online to play in chain
# otherwise EINTR is returned to the app
#
#round_robin_chain
#
# Round Robin - Each connection will be done via chained proxies
# of chain_len length
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped).
# the start of the current proxy chain is the proxy after the last
# proxy in the previously invoked proxy chain.
# if the end of the proxy chain is reached while looking for proxies
# start at the beginning again.
# otherwise EINTR is returned to the app
# These semantics are not guaranteed in a multithreaded environment.
#
#random_chain
#
# Random - Each connection will be done via random proxy
# (or proxy chain, see  chain_len) from the list.
# this option is good to test your IDS :)

# Make sense only if random_chain or round_robin_chain
#chain_len = 2

# Quiet mode (no output from library)
#quiet_mode

# Proxy DNS requests - no leak for DNS data
proxy_dns 

# set the class A subnet number to use for the internal remote DNS mapping
# we use the reserved 224.x.x.x range by default,
# if the proxified app does a DNS request, we will return an IP from that range.
# on further accesses to this ip we will send the saved DNS name to the proxy.
# in case some control-freak app checks the returned ip, and denies to 
# connect, you can use another subnet, e.g. 10.x.x.x or 127.x.x.x.
# of course you should make sure that the proxified app does not need
# *real* access to this subnet. 
# i.e. dont use the same subnet then in the localnet section
#remote_dns_subnet 127 
#remote_dns_subnet 10
remote_dns_subnet 224

# Some timeouts in milliseconds
tcp_read_time_out 15000
tcp_connect_time_out 8000

### Examples for localnet exclusion
## localnet ranges will *not* use a proxy to connect.
## Exclude connections to 192.168.1.0/24 with port 80
# localnet 192.168.1.0:80/255.255.255.0

## Exclude connections to 192.168.100.0/24
# localnet 192.168.100.0/255.255.255.0

## Exclude connections to ANYwhere with port 80
# localnet 0.0.0.0:80/0.0.0.0

## RFC5735 Loopback address range
## if you enable this, you have to make sure remote_dns_subnet is not 127
## you'll need to enable it if you want to use an application that 
## connects to localhost.
# localnet 127.0.0.0/255.0.0.0

## RFC1918 Private Address Ranges
# localnet 10.0.0.0/255.0.0.0
# localnet 172.16.0.0/255.240.0.0
# localnet 192.168.0.0/255.255.0.0

# ProxyList format
#       type  ip  port [user pass]
#       (values separated by 'tab' or 'blank')
#
#       only numeric ipv4 addresses are valid
#
#
#        Examples:
#
#            	socks5	192.168.67.78	1080	lamer	secret
#		http	192.168.89.3	8080	justu	hidden
#	 	socks4	192.168.1.49	1080
#	        http	192.168.39.93	8080	
#		
#
#       proxy types: http, socks4, socks5
#        ( auth types supported: "basic"-http  "user/pass"-socks )
#
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
#socks4 	127.0.0.1 9050
2865 次点击
所在节点    程序员
3 条回复
peihanw
2018-04-18 14:34:11 +08:00
## 验证 proxychain 正常,具体代理 IP 隐藏了
$ proxychains -q curl -s checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 104.21x.xxx.xxx</body></html>
## golang 版本号
$ go version
go version go1.10.1 linux/amd64
## 编译 go-*socks2 报错,是 proxychains 造成的问题吗?(境外 VPS 上不带 proxychains 没问题的)
$ proxychains go get -u -v github.com/shadowsocks/go-shadowsocks2
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.12
package github.com/shadowsocks/go-shadowsocks2: parse [proxychains] DLL init: proxychains-ng 4.12
https://github.com/shadowsocks/go-shadowsocks2: first path segment in URL cannot contain colon
wsgzao
2018-04-19 10:23:59 +08:00
@peihanw #1 sorry,我不了解 go,如果 google 没有搜索到相关信息的话我想你可能需要 review 下 proxychains 的代码
fangxing204
2018-08-25 12:40:11 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/447553

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX