资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
大家都知道大名鼎鼎的BurpSuite代理神器,对于抓取HTTP请求非常好用,偶然,一 朋友问我Java应该如何去编写代理服务器(因为他想做某些东西),有没有相关的API去实 现,我想说,差不多你能想到的,JAVA都可以做到,没有任何一门成熟的语言是垃圾的。在编写代理服务器之前,首先应该明白一点,Java的代理机制,如图1-1所示。response5容户端request代理服务 器服务瑞图 1-1 Java 代理示意图那么Java就处于中间这层代理服务器,代理服务器所作的事情如下:1、接收客户端请求,进行处理,然后发送给服务端2、接收服务端响应,进行处理,然后发送给客户端这样,就更清晰了,Java给我们提供了代理的API为,java.net.Proxy类。此类表示代理 设置,通常为类型(http、socks)和套接字地址。Proxy是不可变对象。也就是说Java可以制作高级协议的代理,如HTTP或FTP。也可以制作SOCKS (V4或 V5)代理。在基本的概念说完之后,来实际操作一把,分为两个步骤,第一部分,让JAVA程序使 用代理服务器,第二步部分,让我们的Java程序像BurpSuite 一样,来做一个HTTP的代理 服务器吧。首先,使用到了 URL类,HttpURLConnection类及其我们的代理类Proxy类。他们都位 于java.net包中。第一步:生成代理,指定端口为 8888:Proxy proxy = null ;proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(127.0.0.1,8888); / 实 例化本地代理对象,端口为 8888第二步:使用 URLConnection 类进行连接 www.moonsos.comURL url = new URL(http:/www.moonsos.com); /实例化米安网 URL 类 HttpURLConnection action = (HttpURLConnection)url.openConnection(proxy); /使用代理 打开网页第三步:打开URL,并且读取HTML源码HttpURLConnection action = (HttpURLConnection)url.openConnection(proxy); /使用代理 打开网页InputStream in = action.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in,UTF-8); StringBuilder sb = new StringBuilder();String lin = System.getProperty(line.separator) ;for(String temp = br.readLine() ; temp!=null;temp = br.readLine() ) sb.append(temp+lin);br.close();in.close();System.out.println(sb);效果执行图,如图1-2 所示。图 1-2 java 使用代理服务器完整代码示例如下:import java.net.* ; import java.io.* ;public class ProxyTestpublic static void main(String args)throws ExceptionProxy proxy = null ;proxy = new Proxy(Proxy.Type.HTTpnew lnetSocketAddress(127.0.0.1,8888); / 实例化本地代理对象,端口为8888URL url = new URL(http:/www.moonsos.com);HttpURLConnection action = (HttpURLConnection)url.openConnection(proxy); 使用 代理打开网页Inputstream in = action.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in,UTF-8);StringBuilder sb = new StringBuilder();String lin = System.getProperty(line.separator);for(String temp = br.readLine() ; temp!=null;temp = br.readLine() )sb.append(temp+lin);br.close();in.close();System.out.println(sb);第一部分我们学会了 Java如何使用代理程序,那么第二部分就看Java制作代理服务器。第一步,生成Socket类,作为代理服务器ServerSocket server = new ServerSocket(8888); /建立本地代理服务器,端口为 8888第二步,等待连接,也就是等待使用代理程序的用户进入,如果没有用户进入那么,将会一 直在此等待。Socket socket =server. accept(); /等待客户端连接第三步,当用户进来后,查看用户数据发送的请求,这里新做了一 个ActionScoket类,多线 程,专门用来处理Scoket输入流,代码如下所所示。ServerSocket server = new ServerSocket(8888);while(true)Socket socket = server.accept();ActionSocket ap = new ActionSocket(socket); ap.start();ActionSocket 代码如下:class ActionSocket extends Threadprivate Socket socket = null ;public ActionSocket(Socket s)this.socket = s ;public void run()trythis.action() ;catch(Exception e) e.printStackTrace();public void action() throws Exception if (this.socket = null)return ;BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream();for(String temp = br.readLine() ; temp!=null;temp = br.readLine() )System.out.println(temp);br.close();完成代码如下:import java.net.* ;import java.io.* ;class ActionSocket extends Threadprivate Socket socket = null ;public ActionSocket(Socket s)this.socket = s ;public void run()trythis.action();catch(Exception e)e.printStackTrace();public void action() throws Exception if (this.socket = null)return ;BufferedReaderbr=newBufferedReader(newlnputStreamReader(this.socket.getlnputStream();for(String temp = br.readLine() ; temp!=null;temp = br.readLine() )System.out.println(temp);br.close(); public class ServerPrxoypublic static void main(String args)throws Exception ServerSocket server = new ServerSocket(8888); while(true)Socket socket = server.accept(); ActionSocket ap = new ActionSocket(socket);ap.start();给火狐,搜狗等浏览器配置代理,如图1-3 所示:項狗高速浏览器选项常规快捷键标签设蚩标签外观鼠标丰辿网路连接设蛊0不使用任何弋理0使冃全冈加速功能全冈加連功能处于关丹状态使冃自定义弋理代理地址测速结杲地址栏挫索栏I砧优浬设議N侄團敢击逐页设蚩I玳牲丰知burp127.0.0.1:8888未知图 1-3 配置代理服务器OK,配置完毕,进行访问http:/www.moonsos.com,可以发现我们写的小程序已经能够进 行抓取到HTTP协议信息,如图1-4所示。I hacker45 t* http-/wwwsmertfOB.ia.班白讪袞禅CB 空世 KSSKQi TflzLD 哥肋iD V屯 http y/y.wv.moo nsos. conn/C:Wmd DWsSysWoVkcmd.GKe - java ServerPrxoyU: Misers Mldrain is tisaiTi-!%hi!-!21ktnpaja.oa Eeuer-Fi* ySET Mt p z/hfw = mDonacs . corV HTTFl -1HO9tI WWWs NT 石.;W0WE,4 A|pplie!.fchKit/537:3各(KHTHL likeCLtckdi ChraM/O.H.1aa3-i537-2& EE1.0ftcciEpe-EncodinffS g己 ip* def lnte sdcli Accept-Hkuniyudge i创厂饲山爪叫曲寫SookiE 盂 biishaB_f iBSt iffis =138?154573982 hEl L _2132 _ealtha y =Hui.SSHElO ; b
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号