关于代理服务器的原理及用法

一,什么是代理服务器(Proxy)?  

  :以类似代理人的身份去取的用户需要的数据。由于它的【代理】能力,使得我们可以透过代理服务器来达成防火墙与用户数据的分析。除此之外我们还可以借助代理服务器来达成节省带宽的目的,以及加快内部网络对因特网的万维网的访问速度。 当客户端有因特网的数据要求时,Proxy会帮用户去向目的地取得用户所需要的数据。所以当客户端指定www的代理服务器之后,用户的所有www相关要求就会通过代理服务器去捉取。代理服务器会架设在整个区网的单点对外防火墙上头,而在区网内部的计算机都是通过Proxy来向英特网要求数据的,这就是所谓的【代理服务器】
     关于代理服务器,客户端与因特网的相关性示意图如下:
      


上面的架构仅仅是其中一个案例,架构的采用率比较高,因为这样的Proxy server不仅可以充当代理服务器的角色,还可以当做高阶防火墙。
客户端向外部要求的数据事实上都是Proxy帮用户取得的,因此因特网上面看到要求数据者,将会是Proxy服务器的IP而不是客户端的IP。Proxy Server因为直接对外网,相当于当了个炮灰,外网只能找到这个代理服务器,隐藏内网的机器,从而起到防火墙的作用。

二,代理服务器原理【Proxy Serve】:
  代理服务器就类似代理商,如图,假设你的机器为A机,你想获得的数据由B机提供,代理服务器为C机,那么具体的连接过程是这样的:


      首先,A机需要B机的数据,它与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理访问服务。

       相比着上图的运行流程,代理服务器本身还具备缓存的能力,能够存储从internet网上取回的数据,方便用户再次请求时,能从代理服务器缓存中快速取出返回。代理服务器的运作流程如下:
                                                               

cache的存在,可以做假象的web加速;

当Proxy的快取拥有用户所想要的数据时:

a. Client端向Server端发送一个数据需求封包

b. Server端接收之后,先比对这个封包的【来源】与预计要前往的【目标】网站是否为可接受?如果来源和目标都是合法的,或者说,来源与目标网站我们的Proxy都能帮忙取得资料时,那么      Server端会开始替Client取得资料。取得资料中比较重要的政策就是【比对政策】,有点像认证的感觉。 

c. 对比政策,Server对先检查自己的快取(新的数据可能在内存中,比较旧的数据放在硬盘中)数据,如果有Client所需要的数据,那么将数据准备取出,而不经过向Internet要求数据的程序。

d. 最后当然就是将数据回传给Client
Proxy对于cache的速度是很有要求的,而这个cache就是硬盘了。硬盘的容量必须足够大,而且还要【足够快】才行!cache是一直被重复存取的地方。所以硬盘的好坏就差别大了。

三、代理服务器的优点:

 * 突破自身IP访问限制:访问国外站点或者其他之前不能访问的站点。
 * 提高访问速度:通常代理服务器都设置了一个较大的硬盘缓冲区,当有外界的信息通过的时候,同时也将其保存在缓冲区中,当其他用户在访问相同的信息时,则直接有缓冲区取出信息,传给用户,以提高访问速度
 * 链接内网与Internet,充当防火墙:因为所有的内部网用户通过代理服务器访问外界时,只映射一个IP地址,所以外界不能直接访问到内部网;同时可以设置IP地址过滤,限制内部网对外部的访问权限
 * 隐藏真实IP:上网者可以通过这种方式隐藏自己的IP,以免受到攻击;
 * 设置用户验证和记账功能,没有登记的用户无权通过代理服务器访问Internet网。并对用户的访问时间、访问地点、信息流量进行统计。

四,代理服务器的分类:

1、HTTP 代理按匿名功能分类(是否具有隐藏 IP 的功能)。
    非匿名代理:不具有匿名功能。
    匿名代理。使用此种代理时,虽然被访问的网站不能知道你的 IP 地址,但仍然可 以知道你在使用代理,有些侦测 IP 的网页也仍然可以查到你的 IP。
    高度匿名代理:使用此种代理时,被访问的网站不知道你的 IP 地址,也不知道你在使用代理进行访问。此种代理的隐藏 IP 地址的功能最强。

2、按请求信息的安全性分类
     全匿名代理:不改变你的 request fields(报文),使服务器端看来就像有个真正的客户浏览器在访问它。当然,你的真实 IP 是隐藏起来的。服务器的网管不会认为
你使用了代理。
     普通匿名代理:能隐藏你的真实 IP,但会更改你的 request fields,

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中实现代理服务器的方法主要有两种,一种是使用Java原生的Socket类实现代理服务器,另一种是使用第三方库实现代理服务器。 使用Java原生的Socket类实现代理服务器的步骤如下: 1. 创建一个ServerSocket对象,并指定代理服务器的监听端口号。 2. 使用while循环等待客户端连接,并使用accept()方法接受客户端的连接请求。 3. 在连接建立之后,读取客户端发送的请求,解析请求,获取要访问的目标服务器的地址和端口号。 4. 创建一个Socket对象,连接到目标服务器,并将客户端发送的请求转发给目标服务器。 5. 接收目标服务器的响应,将响应转发给客户端。 6. 关闭Socket和ServerSocket对象,结束连接。 以下是一个使用Java原生的Socket类实现代理服务器的示例代码: ``` import java.net.*; import java.io.*; public class ProxyServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); while (true) { Socket clientSocket = serverSocket.accept(); new Thread(() -> { try { BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String requestLine = in.readLine(); String[] requestLineParts = requestLine.split("\\s+"); String method = requestLineParts[0]; String url = requestLineParts[1]; String version = requestLineParts[2]; URL targetUrl = new URL(url); Socket serverSocket = new Socket(targetUrl.getHost(), targetUrl.getPort()); OutputStream serverOut = serverSocket.getOutputStream(); serverOut.write(requestLine.getBytes()); serverOut.flush(); InputStream serverIn = serverSocket.getInputStream(); byte[] buffer = new byte[1024]; int length; while ((length = serverIn.read(buffer)) != -1) { clientSocket.getOutputStream().write(buffer, 0, length); clientSocket.getOutputStream().flush(); } in.close(); serverOut.close(); serverIn.close(); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } }).start(); } } } ``` 以上代码中,代理服务器监听8080端口,当有客户端连接时,会在一个新的线程中处理客户端的请求,读取请求行并解析出要访问的目标服务器地址和端口号,然后连接到目标服务器并将请求转发给目标服务器。接收到目标服务器的响应后,将响应转发给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值