【原创】python socket Proxy.

来源:互联网 发布:打开淘宝网首页 编辑:程序博客网 时间:2024/06/04 08:37
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看改动过哪里。
用法呢,可以看sqlmap的代码:lib/core/option.py
if scheme in (PROXY_TYPE.SOCKS4,PROXY_TYPE.SOCKS5):
   socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5if scheme == PROXY_TYPE.SOCKS5else socks.PROXY_TYPE_SOCKS4,hostname, port, username=username,password=password)
    socks.wrapmodule(urllib2)
else:
socks.unwrapmodule(urllib2)
看过sqlmap的socks.py就可以理解,wrapmodule其实就对对某个模块的socket代码进行备份、替换为socket代理模式。
怎么说呢,推荐使用sqlmap改造的socks.py

TODO:缺点:项目全局的socket代理,感觉不是太好,得稍微改造一下,让其支持多线程、多socket代理。

0 0
原创粉丝点击