python基于socket的代理
SocksiPy--- https://pypi.python.org/pypi/SocksiPy
SocksiPy-branch - version:1.01 --- https://pypi.python.org/pypi/SocksiPy-branch
用法:
print "----------- socket proxy ----------"
import socks
import socket
base_socket = socket.socket
import requests as req
import urllib
print "\n-------------not set proxy--------------"
printurllib.urlopen("http://1111.ip138.com/ic.asp").read()
print "\n--------------set proxy------------------"
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"10.10.20.125",443)
socket.socket = socks.socksocket
printurllib.urlopen("http://1111.ip138.com/ic.asp").read()
print '\n--------------cancel proxy----------------'
socket.socket = base_socket
printurllib.urlopen("http://1111.ip138.com/ic.asp").read()
print '\n--------------reset socketproxy-----------------'
socket.socket = socks.socksocket
print req.get("http://1111.ip138.com/ic.asp").content
print '\n--------------recancel proxy----------------'
socket.socket.setproxy()
print req.get("http://1111.ip138.com/ic.asp").content
通过输出,可以发现是可以用的
这是源示例,还有别人改造过的代码是
sqlmap的代码,
thirdparty/socks/socks.py
里面是加了几个函数的,
wrapmodule、
unwrapmodule、
create_connection
,
用的其他的我没事细看,没多做diff看改动过哪里。
if
scheme
in
(
PROXY_TYPE
.
SOCKS4
,
PROXY_TYPE
.
SOCKS5
):
socks.setdefaultproxy(socks.
PROXY_TYPE_SOCKS5
if
scheme
==
PROXY_TYPE
.
SOCKS5
else
socks.
PROXY_TYPE_SOCKS4
, \
hostname, port,
username
=
username,
password
=
password)
s
ocks.wrapmodule(urllib2)
else
:
socks.unwrapmodule(urllib2)
看过sqlmap的socks.py就可以理解,
wrapmodule其实就对对某个模块的socket代码进行备份、替换为socket代理模式。
怎么说呢,推荐使用sqlmap改造的socks.py
TODO:缺点:项目全局的socket代理,感觉不是太好,得稍微改造一下,让其支持多线程、多socket代理。