b2c信息网

您现在的位置是:首页 > 热点问题 > 正文

热点问题

实现socks5代理源码(socks5代理原理)

hacker2022-09-17 17:35:26热点问题86
本文目录一览:1、怎么搭建Socks5免费代理服务?2、

本文目录一览:

怎么搭建Socks5免费代理服务?

CCProxy是个国产好用性能优越的超级代理软件。具有一级,二级代理和完善的代理帐号管理功能,该软件兼容性和稳定性极好。

下面具体介绍一下用该软件架设服务器:

用CCProxy架设服务器,必须根据上网环境适当设置才能架设成功,下面就几种环境分别叙述架设服务器操作:

1.固定ip直连上网,架设服务器方法。

固定ip直连上网,架设服务器方法最为简单,直接安装CCProxy,并设置CCProxy就可以做代理服务器了。

2.固定ip+路由器上网,架设服务器方法。

固定ip+路由器上网,架设服务器,必须让设置路由器对外映射个端口。这个端口就是你的服务器对外开放的端口。例如,你的服务器代理地址和端口

为123.365.445.145 563 那你就得设置路由器对外映射个端口为563。映射端口设置好后,再对CCProxy做适当设置,你的电脑就可以做代理服务器了。

3.宽带猫拨号直连上网,架设服务器方法。

因为宽带猫拨号直连上网,每次你获取的外网ip都不一样。所以需要帮你每次拨号后,获得的不同ip绑定到固定的域名,才方便使用。

(1)动态域名解析

下载安装花生壳动态域名解析软件,可以把你的动态ip绑定到固定的域名上。

(2)绑定好域名后,再对设置CCProxy,你的电脑就可以做代理服务器了。

4.宽带猫拨号+路由器上网,架设服务器方法。

(1)动态域名解析

下载安装花生壳动态域名解析软件,可以把你的动态ip绑定到固定的域名上。

(2)路由器对外映射个端口。

(3)以上2步做好后,再对设置CCProxy,你的电脑就可以做代理服务器了。

OkHttp源码解析 (三)——代理和路由

初看OkHttp源码,由于对Address、Route、Proxy、ProxySelector、RouteSelector等理解不够,读源码非常吃力,看了几遍依然对于寻找复用连接、创建连接、连接服务器、连接代理服务器、创建隧道连接等逻辑似懂非懂,本篇决定梳理一遍相关的概念及基本原理。

● HTTP/1.1(HTTPS)

● HTTP/2

● SPDY

一个http请求的流程(直连):

1、输入url及参数;

2、如果是url是域名则解析ip地址,可能对应多个ip,如果没有指定端口,则用默认端口,http请求用80;

3、创建socket,根据ip和端口连接服务器(socket内部会完成3次TCP握手);

4、socket成功连接后,发送http报文数据。

一个https请求的流程(直连):

1、输入url及参数;

2、如果是url是域名则解析ip地址,可能对应多个ip,如果没有指定端口,则用默认端口,https请求用443;

3、创建socket,根据ip和端口连接服务器(socket内部会完成3次TCP握手);

4、socket成功连接后进行TLS握手,可通过java标准款提供的SSLSocket完成;

5、握手成功后,发送https报文数据。

1、分类

● HTTP代理:普通代理、隧道代理

● SOCKS代理:SOCKS4、SOCKS5

2、HTTP代理分类及说明

普通代理

HTTP/1.1 协议的第一部分。其代理过程为:

● client 请求 proxy

● proxy 解析请求获取 origin server 地址

● proxy 向 origin server 转发请求

● proxy 接收 origin server 的响应

● proxy 向 client 转发响应

其中proxy获取目的服务器地址的标准方法是解析 request line 里的 request-URL。因为proxy需要解析报文,因此普通代理无法适用于https,因为报文都是加密的。

隧道代理

通过 Web 代理服务器用隧道方式传输基于 TCP 的协议。

请求包括两个阶段,一是连接(隧道)建立阶段,二是数据通信(请求响应)阶段,数据通信是基于 TCP packet ,代理服务器不会对请求及响应的报文作任何的处理,都是原封不动的转发,因此可以代理 HTTPS请求和响应。

代理过程为:

● client 向 proxy 发送 CONNET 请求(包含了 origin server 的地址)

● proxy 与 origin server 建立 TCP 连接

● proxy 向 client 发送响应

● client 向 proxy 发送请求,proxy 原封不动向 origin server 转发请求,请求数据不做任何封装,为原生 TCP packet.

3、SOCKS代理分类及说明

● SOCKS4:只支持TCP协议(即传输控制协议)

● SOCKS5: 既支持TCP协议又支持UDP协议(即用户数据包协议),还支持各种身份验证机制、服务器端域名解析等。

SOCK4能做到的SOCKS5都可得到,但反过来却不行,比如我们常用的聊天工具QQ在使用代理时就要求用SOCKS5代理,因为它需要使用UDP协议来传输数据。

有了上面的基础知识,下面分析结合源码分析OkHttp路由相关的逻辑。OkHttp用Address来描述与目标服务器建立连接的配置信息,但请求输入的可能是域名,一个域名可能对于多个ip,真正建立连接是其中一个ip,另外,如果设置了代理,客户端是与代理服务器建立直接连接,而不是目标服务器,代理又可能是域名,可能对应多个ip。因此,这里用Route来描述最终选择的路由,即客户端与哪个ip建立连接,是代理还是直连。下面对比下Address及Route的属性,及路由选择器RouteSelector。

描述与目标服务器建立连接所需要的配置信息,包括目标主机名、端口、dns,SocketFactory,如果是https请求,包括TLS相关的SSLSocketFactory 、HostnameVerifier 、CertificatePinner,代理服务器信息Proxy 、ProxySelector 。

Route提供了真正连接服务器所需要的动态信息,明确需要连接的服务器IP地址及代理服务器,一个Address可能会有很多个路由Route供选择(一个DNS对应对个IP)。

Address和Route都是数据对象,没有提供操作方法,OkHttp另外定义了RouteSelector来完成选择的路由的操作。

1、读取代理配置信息:resetNextProxy()

读取代理配置:

● 如果有指定代理(不读取系统配置,在OkHttpClient实例中指定),则只用1个该指定代理;

● 如果没有指定,则读取系统配置的,可能有多个。

2、获取需要尝试的socket地址(目标服务器或者代理服务器):resetNextInetSocketAddress()

结合Address的host和代理,解析要尝试的套接字地址(ip+端口)列表:

● 直连或者SOCK代理, 则用目标服务器的主机名和端口,如果是HTTP代理,则用代理服务器的主机名和端口;

● 如果是SOCK代理,根据目标服务器主机名和端口号创建未解析的套接字地址,列表只有1个地址;

● 如果是直连或HTTP代理,先DNS解析,得到InetAddress列表(没有端口),再创建InetSocketAddress列表(带上端口),InetSocketAddress与InetAddress的区别是前者带端口信息。

3、获取路由列表:next()

选择路由的流程解析:

● 遍历每个代理对象,可能多个,直连的代理对象为Proxy.DIRECT(实际是没有中间代理的);

● 对每个代理获取套接字地址列表;

● 遍历地址列表,创建Route,判断Route如果在路由黑名单中,则添加到失败路由列表,不在黑名单中则添加到待返回的Route列表;

● 如果最后待返回的Route列表为空,即可能所有路由都在黑名单中,实在没有新路由了,则将失败的路由集合返回;

● 传入Route列表创建Selection对象,对象比较简单,就是一个目标路由集合,及读取方法。

为了避免不必要的尝试,OkHttp会把连接失败的路由加入到黑名单中,由RouteDatabase管理,该类比较简单,就是一个失败路由集合。

1、创建Address

Address的创建在RetryAndFollowUpInteceptor里,每次请求会声明一个新的Address及StreamAllocation对象,而StreamAllocation使用Address创建RouteSelector对象,在连接时RouteSelector确定请求的路由。

每个Requst都会构造一个Address对象,构造好了Address对象只是有了与服务器连接的配置信息,但没有确定最终服务器的ip,也没有确定连接的路由。

2、创建RouteSelector

在StreamAllocation声明的同时会声明路由选择器RouteSelector,为一次请求寻找路由。

3、选择可用的路由Route

下面在测试过程跟踪实例对象来理解,分别测试直连和HTTP代理HTTP2请求路由的选择过程:

● 直连请求流程

● HTTP代理HTTPS流程

请求url:

1、构造address对象

2、读取代理配置:resetNextProxy

3、解析目标服务器套接字地址:resetNextInetSocketAddress

4、选择Route创建RealConnection

5、确定协议

测试方法:

● 在PC端打开Charles,设置端口,如何设置代理,网上有教程,比较简单;

● 手机打开WIFI,选择连接的WIFI修改网络,在高级选项中设置中指定了代理服务器,ip为PC的ip,端口是Charles刚设置的端口;

● OkHttpClient不指定代理,发起请求。

1、构造address对象

2、读取代理配置:resetNextProxy

3、解析目标服务器套接字地址:resetNextInetSocketAddress

4、选择Route创建RealConnection

5、创建隧道

由于是代理https请求,需要用到隧道代理。

从图可以看出,建立隧道其实是发送CONNECT请求,header包括字段Proxy-Connection,目标主机名,请求内容类似:

6、确定协议,SSL握手

1、代理可分为HTTP代理和SOCK代理;

2、HTTP代理又分为普通代理和隧道代理;普通代理适合明文传输,即http请求;隧道代理仅转发TCP包,适合加密传输,即https/http2;

3、SOCK代理又分为SOCK4和SOCK5,区别是后者支持UDP传输,适合代理聊天工具如QQ;

4、没有设置代理(OkHttpClient没有指定同时系统也没有设置),客户端直接与目标服务器建立TCP连接;

5、设置了代理,代理http请求时,客户端与代理服务器建立TCP连接,如果代理服务器是域名,则解释代理服务器域名,而目标服务器的域名由代理服务器解析;

6、设置了代理,代理https/http2请求时,客户端与代理服务器建立TCP连接,发送CONNECT请求与代理服务器建立隧道,并进行SSL握手,代理服务器不解析数据,仅转发TCP数据包。

如何正确使用 HTTP proxy

OkHttp3中的代理与路由

HTTP 代理原理及实现(一)

帮我写一个VB源码,自动使用socks5代理后打开一个网页。大神们帮帮忙

平凡的真的不能用,楼主的代理也可以用呀,只有第二个不能用,我发个能用的,代码如下: Private Const INTERNET_OPTION_PROXY = 38 Private Const INTERNET_OPEN_TYPE_PROXY = 3 Private Type INTERNET_PROXY_INFO dwAccessType As Long lpszProxy As String lpszProxyBypass As String End Type Private Declare Function internetsetoption Lib "wininet.dll" _ Alias "InternetSetOptionA" _ (ByVal hinternet As Long, _ ByVal dwoption As Long, _ ByRef lpbuffer As Any, _ ByVal dwbufferlength As Long) As Long Function SetProxy() Dim options As INTERNET_PROXY_INFO options.dwAccessType = INTERNET_OPEN_TYPE_PROXY options.lpszProxy = "SOCKS=" Combo1.Text '127.0.0.1:9050 options.lpszProxyBypass = "" internetsetoption 0, INTERNET_OPTION_PROXY, options, LenB(options) End Function Private Sub Command1_Click() SetProxy WebBrowser1.Navigate Text1.Text End Sub

如何在Linux下配置socks5代理

ssh -D xxxx user@hostaddr:port (ssh转发实现socks5代理.)

使用通设定socks5全局代理.或者浏览器使用代理.或者用代理软件(软件名socks5.)

例:ssh -D 11111 root@192.168.10.10登录本打11111端口.端口代理端口.使用浏览器代理需要填入127.0.0.1:11111配置.通浏览器使用代理.

Linux各种各代理程序用象用Squidhttp/https代理能代理ftp请求实际HTTP代理程序ftp代理能处理ftp代理请求象浏览器处理ftp请求工作些程序能设置使用socks代理象CuteFTP;象Wu-FTP能设置使用ftp代理(ftp代理标准ftp代理Squid所支持种式);ICQ 2000能同接受https代理Socks代理;NetVampire能接受标准HTTP(GET/POST)代理(Squid支持)HTTP(CONNECT)代理(Squid支持)

使用Cute-FTP,除IP伪装外要使用Socks代理现让我看看配置Socks5程:

1. 载文件

载新版socks5源文件/tmp目录socks5-v1.0r11.tgz

2. 防火墙编译并安装(该防火墙应直接连至internet,安装两块网卡双宿主机假设内部网段

192.168.0.0/24)

cd /tmp

tar -xvfz socks5-v1.0r11.tgz

cd /tmp/socks5-v1.0r11

./configure --with-threads

make

make install

3. 配置文件/etc/socks5.conf

# /etc/socks5.conf

set SOCKS5_MAXCHILD 3

set SOCKS5_NOIDENT

set SOCKS5_TIMEOUT 5

interface 192.168.0. - eth1

auth 192.168.0. - u

permit u - 192.168.0. - - - jephe

permit u - 192.168.0. - - - jack

deny - - - - - - -

4. 配置文件/etc/socks5.passwd

# /etc/socks5.passwd

jephe password_of_jephe_is_here

jack password_of_jephe_is_here

5.始测试

/usr/local/bin/socks5 -f -s

现面信息表示测试功

18210: Socks5 starting at Mon Dec 14 18:23:45 1998 in normal mode

退socks5,始式运行背景模式:

6. 式运行

/usr/local/bin/socks5 -t -s 2 /var/log/socks5

7. 加/etc/rc.d/rc.local

echo "/usr/local/bin/socks5 -t -s 2 /var/log/socks5" /etc/rc.d/rc.local

急!!自己怎么搭建HTTP/Socks5隧道代理呢?

自己搭建高质量亿级IP的HTTP/Socks5隧道代理

一、前言

  在做爬虫、数据采集、账号搜索项目时,需要用到高质量代理IP。目前比较流行也是最常见的代理IP服务,大部分是通过api链接提取。通过不断的访问api接口,api服务器返回一个或多个可用代理IP,然后将代理IP应用于自己的程序或软件中。api服务器维护了一个可用IP池,并且不断在更新加入新的可用IP。客户端访问时,则返回最新可用IP。

  API提取方式简单实现,但也有一定弊端,主要是客户端需要不断的访问api接口获取最新代理,需要一直循环。根据代理质量的不同,获取到的代理不一定全部可用,影响了爬虫的效率。这里推荐 酷鱼代理IP(),有动态代理和私密代理,速度和可用率都比较好。

  那么,有没有不需要api的代理方式呢,那我们来看看隧道代理。

二、隧道代理是什么

  隧道代理只需设置固定接口,云端自动切换不同IP,省去了客户端频繁获取的麻烦。并且通过隧道代理的多路负载技术,大大提高的代理速度和可用率。隧道代理没有一次提取多少个IP的概念,主要是通过对不同客户的并发请求数进行限制。一般可达到50-100次/秒的并发请求。

三、隧道代理架构

如上图,隧道代理工作步骤为:

代理使用者向隧道代理服务器发出请求。例如酷鱼隧道代理地址为:tunnel.kuyukuyu.com。

隧道代理服务器收到代理使用者请求后,会选择最优线路进行转发,在代理使用者和动态代理节点之间建立隧道连接。

动态代理服务器请求代理使用者指定的目标站。

动态代理服务器将目标站返回的结果,直接返回给代理使用者。

四、获取代理IP池

请点击输入图片描述

隧道代理有多个可用路径进行转发,采用多路复用、择优选择技术,提高代理成功率。经测试成功率可达99%以上。

代理服务器返回结果时没有经过隧道代理,而是直接返回给代理使用者。因为隧道代理仅起到建立隧道连接的作用,并不参与数据传输。保障了代理执行效率。

使用方便,需要频繁切换代理。

支持高并发,多客户端同时使用。

五、实现步骤

首先需要找到一个可持续供给的代理IP池,代理IP最好是同时支持HTTP(s)和Socks5协议的,这样我们的隧道代理也可以支持socks5。这里推荐酷鱼私密代理 ,可用率99%以上,速度快。

购买后在用户中心获取API提取链接,然后设置白名单和提取数量。

将获取到的代理写入Squid配置文件。/etc/squid/squid.conf

重载配置文件,使用配置生效。

每隔1秒重复一次,并不断循环。

六、Squid使用方法

将squid 做为代理服务器

备份源文件 cp /etc/squid/squid.conf /etc/squid/squid.conf.source,用于脚本自动更新

在squid所在服务器运行脚本。

七、进一步优化

由于squid只支持http(s),不支持socks5协议,所有就算购买的代理池支持socks5,隧道代理也不支持。如需支持socks5,只需要使用其他软件替代squid。如果有这方面的需要可以联系酷鱼代理客服。

可以在隧道代理上使用iptables进行限制访问,达到白名单功能。

iptables还可以对单个客户端请求数量或流量限制,达到限流功能。

文章来源:网页链接

求delphi 设置socks5代理访问网页的源码

增加一个TIdIOHandlerSocket组件和一个TIdSocksInfo组件

把原来的IdHTTP组件的IOHandler属性设置为新增加的TIdIOHandlerSocket组件

把新增加的TIdIOHandlerSocket组件的SocksInfo属性设置为新增加的TIdSocksInfo组件

然后在TIdSocksInfo组件中正确设置Socks5代理的参数

发表评论

评论列表

  • 嘻友逃夭(2022-09-18 02:19:14)回复取消回复

    vfz socks5-v1.0r11.tgz cd /tmp/socks5-v1.0r11 ./configure --with-threads make make install 3

  • 颜于乘鸾(2022-09-17 23:22:31)回复取消回复

    择连接的WIFI修改网络,在高级选项中设置中指定了代理服务器,ip为PC的ip,端口是Charles刚设置的端口; ● OkHttpClient不指定代理,发起请求。 1、构造address对象 2、读取代理配置:res

  • 语酌酌锦(2022-09-18 03:08:54)回复取消回复

    作。 1、读取代理配置信息:resetNextProxy() 读取代理配置: ● 如果有指定代理(不读取系统配置,在OkHttpClient实例中指定),则只用1个该指定