这是我参与「第五届青训营」伴学笔记创作活动的第 9 天
之前我们已经完成了一个简单的命令词典工具,接下来我们来完成一个更复杂的项目——socks5代理服务器。
SOCKS5代理服务器
SOCKS5代理介绍
对于大家来说,一提到代理服务器,首先想到的是翻墙。不过SOCKS5协议它虽然是代理协议,但它并不能用来翻墙,它的协议都是明文传输。这个协议历史比较久远,诞生于互联网早期。它的用途是,比如某些企业的内网为了确保安全性,有很严格的防火墙策略,但是带来的副作用就是访问某些资源会很麻烦。SOCKS5相当于在防火墙开了个口子,让授权的用户可以通过单个端口去访问内部的所有资源。实际上很多翻墙软件,最终暴露的也是一个SOCKS5协议的端口。如果开发过爬虫的话,就知道在爬取过程中很容易会遇到IP访问频率超过限制。这个时候很多人就会去网上找一些代理IP池,这些代理IP池里面的很多代理的协议就是SOCKS5。
我们先来看一下最终写完的代理服务器的效果。我们启动这个程序,然后在浏览器里面配置使用这个代理,此时我们打开网页。代理服务器的日志,会打印出你访问的网站的域名或者IP,这说明我们的网络流量是通过这个代理服务器的。我们也能在命令行去测试我们的代理服务器。我们可以用curl-socks5 + 代理服务器地址,后面加一个可访问的URL,如果代理服务器工作正常的话,那么curl命令就会正常返回。
SOCKS5代理-原理
接下来我们来了解一下SOCKS5协议的工作原理。正常浏览器访问一个网站,如果不经过代理服务器的话,就是先和对方的网站建立TCP连接,然后三次握手,握手完后发起HTTP请求,然后服务返回HTTP响应。如果设置代理服务器之后,流程会变得复杂一些。
首先是浏览器和SOCKS5代理建立TCP连接,代理再和真正的服务器建立TCP连接。