使用SocksiPy使用SSL(Using SocksiPy with SSL)

2019-08-31 17:32发布

我试图用SocksIPy与SSL模块(从STDLIB)抢站点的远程证书,但SocksIPy不会使用SSL玩。

下面的代码将连接到check.torproject.org,我们并没有使用Tor状态(这意味着SocksIPy不工作),(不好)。

不知道SocksIPy是我们的最佳解决方案,但我一直没能找到任何其他方式proxify原始套接字(或获得pycurl / urllib2的使用SOCKS代理,并给SSL证书!)。

为了澄清,我的问题是,插口不被代理。 我想获得我选择的代理的SSL证书,这没有发生。

现在看来,我可以有代理或SSL但不能同时。 救命!

import socks
import ssl

s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)

ss = ssl.wrap_socket(s)
ss.connect(('check.torproject.org', 443))
ss.write("""GET / HTTP/1.0\r
Host: check.torproject.org\r\n\r\n""")

# print ss.getpeercert()
print ss.read(), ss.read(), ss.read()
ss.close()

Answer 1:

在运行的tcpdump我已经测试此代码,所以它应该工作。

import socks
import ssl

s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1",port=9050)
s.connect(('83.94.121.246', 443))
ss = ssl.wrap_socket(s)
print ss.send("hello")
ss.close()

我没有审查ssl.py,但我想你必须调用连接上的袜子对象,而不是SSL对象。



Answer 2:

ssl.wrap_socket下面connect 。 它不能正常工作,否则。

使用验证和CA certFile中从服务器获取证书需要创建已开启,验证SSL对象,并给它一个CA证书文件。 如果你不能找到一个你的系统上,你可以下载由基于Mozilla卷曲项目中提供的一个作为一个本地文件: http://curl.haxx.se/docs/caextract.html

注:SocksIPy项目尚未在相当长一段时间被更新,不支持Python 3中。

的原代码修正版本:

import socks
import ssl

s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", port=9050)
s.connect(('check.torproject.org', 443))
ss = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ca_certs="cacert.pem")

print "Peer cert: ", ss.getpeercert()

ss.write("""GET / HTTP/1.0\r\nHost: check.torproject.org\r\n\r\n""")

content = []
while True:
    data = ss.read()
    if not data: break
    content.append(data)

ss.close()
content = "".join(content)

assert "This browser is configured to use Tor" in content


文章来源: Using SocksiPy with SSL
标签: python ssl