首先,推荐一个 socks4/socks5 代理的网站,由百度,小米的工程师创办,非常棒!

米扑代理 http://proxy.mimvp.com

 

假设你的本机设置的开启的

http 代理地址       : 127.0.0.1:8084 
socks 代理的地址 : 127.0.0.1:8085 

 

ubuntu系统自带http和socks全局代理:

系统设置 -> 网络 -> 网络代理 

设置好代理后,你需要重新打开应用程序才会生效. 

 

如何测试代理是否成功?

因为有的程序本身不支持http代理或者socks代理,就算设置称全局代理也没用. 

http全局代理测试 

大家可以先设置一个错误的代理地址,比如随便一个代理端口: 127.0.0.1:4444 

浏览器测试

出现下面的信息,说明浏览器已经走的是http代理,chrome和firefox要先禁用代理插件才会走系统设置的全局代理 

The proxy server is refusing connections

终端测试:

wget www.mimvp.com

以下信息代表走的是127.0.0.1:4444代理设置 

--2014-05-21 10:17:30--  http://www.mimvp.com/ 
Connecting to 127.0.0.1:4444... failed: Connection refused.

因为大部分程序都能支持http代理,因为设置了一个错误的代理地址,这些程序都是不能正常访问网络的,代表这个程序支持并且使用了你设置的代理地址,假如这个程序能正常访问网络,说明没有走你设置的代理。

你可以nslookup www.mimvp.com

能成功,说明没有走全局http代理!!

DNS解析并没有走你所设置的全局代理这个非常重要!!!!! 
 

socks全局代理测试 

socks的测试和上面的http测试方法一样,设置一个不存在的代理地址. 

浏览器基本上都能完美支持http代理和socks代理. 
终端下很多不能支持socks代理,

终端 wget www.mimvp.com 出现下面的信息说明没有走socks代理 
--2014-05-21 10:28:52--  http://www.mimvp.com/ 
Resolving www.iteye.com (www.iteye.com)... 118.186.66.50

终端下面的程序基本上都不能友好的支持socks代理,要使用socks代理可以使用proxychains 

sudo apt-get instal proxychains

总之,ubuntu下面的http和socks全局代理和vpn代理完全不同,感觉http和socks全局代理是个半成品....还要应用程序本身支持才行.... 

proxychains就比ubuntu系统自带的这种全局代理强大的多,不管是终端还是图形界面都能使用proxychains,当然要你的图形界面程序支持从终端启动运行才能用上proxychains 

当然终端下使用http代理并不需要使用ubuntu系统自带的全局代理工具,直接 

export http_proxy="http://127.0.0.1:8084"
wget www.google.com
#访问https加密的需要设置https_proxy变量
export https_proxy="http://127.0.0.1:8084"
wget https://www.google.com

https_proxy="http://127.0.0.1:8084"和https_proxy="https://127.0.0.1:8084" 
是不一样的,后者需要你的代理支持https

 

python中socket模块使用代理实例

先来说说http代理

python的urllib2是自带http代理功能的,代码实现如下

proxy_handler = urllib2.ProxyHandler({'http' : 'http://地址:端口'})
opener = urllib2.build_opener(proxy_handler, urllib2.HTTPHandler)
urllib2.install_opener(opener)

如此,接下来用urllib2来urlopen的时候,就会自动使用这个代理了。

但是,在我们疯狂的天朝,有时候,http代理并不能满足要求,也许你还想使用更底层的socket代理,于是python里似乎就没有直接的方法了(python3不知道有没有内置,未研究)。

 

socket代理

这时候,你可能需要这个包:SocksiPy – A Python SOCKS client module

SocksiPy 官方: SocksiPy

SocksiPy 下载: SocksiPy.zip

解压安装:

mkdir SocksiPy
mv SocksiPy.zip SocksiPy/
cd SocksiPy
unzip SocksiPy.zip 
sudo cp socks.py /usr/local/lib/python2.7/site-packages/

下载解压以后,除了文档(README)也就一个 socks.py 文件,

将其拷贝到python的lib/pythonxxx/site-packages/目录下

使用很方便,示例代码:

import socks, socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "地址", 端口)
socket.socket = socks.socksocket

接下来,你就可以照常使用socket了,一切都会悄悄地通过代理出去的

import socks
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8088) 
socket.socket = socks.socksocket
import urllib2 
data = urllib2.urlopen('http://www.mimvp.com').read()

 

python urllib2 使用socks代理

python2.5中的urllib2支持http代理,不支持socks代理。假如代码库或者编码时使用了urllib2,同时又要使用socks,就需要第三方的库来实现。

SocksiPy是一个socks module。它提供了一个类socket的接口,支持socks4、socks5http proxy

下载后在代码中引用socks.py即可,也可以写个setup.py文件安装到python的site-packages目录中。 使用时,将下面的代码放在调用urllib2的代码之前即可:

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8080)
socket.socket = socks.socksocket
import urllib2
print urllib2.urlopen('http://baidu.com').read()

 

pycurl 代理

如果是自己写的程序,也可以尝试使用pycurl这个库

ubuntu使用sudo apt-get install python-pycurl python-pycurl-dbg安装。

示例代码

import pycurl
c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://baidu.com')
c.setopt(pycurl.PROXY, '127.0.0.1')
c.setopt(pycurl.PROXYPORT, 8080)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
c.perform()

 

tsocks 代理

如果在程序外部使用socks,推荐使用tsocks。

ubuntu中直接使用sudo apt-get install tsocks安装,安装完毕以后需要修改/etc/tsocks.conf。

配置样例如下

# 默认代理服务器
server = 127.0.0.1 
# 代理服务器类型  
server_type = 5 
# 代理服务器端口
server_port = 8080

使用时,在命令行输入tsocks 程序名即可。例如ubuntu下的epiphany浏览器没有代理设置,如果想使用socks代理,输入tsocks epiphany-browser即可(注意先关闭其他的epiphany实例)。

 

PHP 检测代理

check_proxy.php

<!--
check proxy socks4 and socks5
Copyright by mimvp.com
2015-02-09
-->

<?php
    define('PROXY_CONF', '124.160.35.2:808');
    define('PROXY_CHECK_URL', 'http://www.baidu.com/');
    define('PROXY_LOGPATH', dirname(__FILE__) . '/proxy.log');
    
    function check() {
    	$ch = curl_init();
    
    	curl_setopt($ch, CURLOPT_PROXY, PROXY_CONF);
    	curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
    	curl_setopt($ch, CURLOPT_URL, PROXY_CHECK_URL);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    
    	$response = curl_exec($ch);
        $error = curl_error($ch);

        var_dump("<br>response: ".$response);
        var_dump("<br>eror: ".$error);
    
    	}
    	curl_close($ch);
    	unset($ch);
    }
    check();
?>

 

参考推荐:

shell命令curl 检测代理是否可用

PHP 检测Proxy代理

米扑代理(免费HTTP代理)