java

java抓取数据+破解屏蔽ip访问

今天就讲解一下,怎么破解 服务器 屏蔽ip的请求。

现在大多网站采取 ip访问次数达到一定次数就屏蔽ip的功能。

那么要破解服务器的屏蔽。 就只有改变ip, 或者代理ip。

如果用代理,哪里去找那么多ip呢。  用adsl 获取动态ip不是很简单吗。

转载注明出处:http://blog.csdn.net/column/details/threadgrab.html


那么现在就贴上adsl获取动态ip的方案实例源码


1、抓取网页数据的时候  catch异常之后 , 就采取拨号程序

  1. //门票浏览  url参数 http://www.lvmama.com/dest/lantiancheng   
  2.     public static DataBean getWebData1(String url){  
  3.         DataBean data = null;  
  4.         try {  
  5.             Document docdata = Jsoup.connect(url).timeout(20000).get();  
  6.               
  7.         } catch (Exception e) {  
  8.             e.printStackTrace();  
  9.                         //拨号一下   
  10.                         ConnectAdslNet.reconnectAdsl("宽带",Main.adslname,Main.adslpass);  
  11.         }  
  12.         return data;  
  13.     }  
//门票浏览  url参数 http://www.lvmama.com/dest/lantiancheng
	public static DataBean getWebData1(String url){
		DataBean data = null;
		try {
			Document docdata = Jsoup.connect(url).timeout(20000).get();
			
		} catch (Exception e) {
			e.printStackTrace();
                        //拨号一下
                        ConnectAdslNet.reconnectAdsl("宽带",Main.adslname,Main.adslpass);
		}
		return data;
	}


2、拨号获取动态ip的 工具类

  1. import java.io.BufferedReader;  
  2. import java.io.InputStreamReader;  
  3.   
  4. import org.apache.log4j.Logger;  
  5.   
  6. /** 
  7.  *  
  8.  * ADSL拨号上网 
  9.  * Windwos操作系统需要是GBK编码 
  10.  * @author yijianfeng 
  11.  *  
  12.  */  
  13.   
  14. public class ConnectAdslNet {  
  15.     static Logger logger = Logger.getLogger(ConnectAdslNet.class);  
  16.       
  17.      /**  
  18.      * 执行CMD命令,并返回String字符串  
  19.      */    
  20.     public static String executeCmd(String strCmd) throws Exception {    
  21.         Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);    
  22.         StringBuilder sbCmd = new StringBuilder();    
  23.           
  24.         //注意编码 GBK   
  25.         BufferedReader br = new BufferedReader(new InputStreamReader(p    
  26.                 .getInputStream(),"GBK"));    
  27.         String line;    
  28.         while ((line = br.readLine()) != null) {    
  29.             sbCmd.append(line + "\n");    
  30.         }    
  31.         return sbCmd.toString();    
  32.     }    
  33.     
  34.     /**  
  35.      * 连接ADSL  
  36.      */    
  37.     public static boolean connectAdsl(String adslTitle, String adslName, String adslPass) throws Exception {    
  38.         System.out.println("正在建立连接.");    
  39.         String adslCmd = "rasdial " + adslTitle + " " + adslName + " "    
  40.                 + adslPass;    
  41.         String tempCmd = executeCmd(adslCmd);    
  42.           
  43.         // 判断是否连接成功     
  44.         if (tempCmd.indexOf("已连接") > 0) {    
  45.             System.out.println("已成功建立连接.");    
  46.             return true;    
  47.         } else {    
  48.             System.out.println(tempCmd);    
  49.             System.out.println("建立连接失败");    
  50.             return false;    
  51.         }    
  52.     }    
  53.     
  54.     /**  
  55.      * 断开ADSL  
  56.      */    
  57.     public static boolean disconnectAdsl(String adslTitle) throws Exception {    
  58.         String disconnectAdsl = "rasdial " + adslTitle + " /disconnect";    
  59.         String result = executeCmd(disconnectAdsl);         
  60.            
  61.         if (result.indexOf("没有连接")!=-1){    
  62.             System.out.println(adslTitle + "连接不存在!");    
  63.             return false;    
  64.         } else {    
  65.             System.out.println("连接已断开");    
  66.             return true;    
  67.         }    
  68.     }    
  69.       
  70.     /** 
  71.      * adsl重新拨号,支持失败不断重拨 
  72.      * @param args 
  73.      * @throws Exception 
  74.      */  
  75.     public static boolean reconnectAdsl(String adslTitle, String adslName, String adslPass){  
  76.         boolean bAdsl = false;  
  77.         try {  
  78.             disconnectAdsl(adslTitle);   
  79.             Thread.sleep(3000);           
  80.             bAdsl = connectAdsl(adslTitle,adslName,adslPass);  
  81.             Thread.sleep(3000);  
  82.             int i = 0;  
  83.             while (!bAdsl){  
  84.                 disconnectAdsl(adslTitle);   
  85.                 Thread.sleep(3000);  
  86.                 bAdsl = connectAdsl(adslTitle,adslName,adslPass);  
  87.                 Thread.sleep(3000);  
  88.                 if(i>5){  
  89.                     break;  
  90.                 }  
  91.             }  
  92.         }catch(Exception e){  
  93.             logger.error("ADSL拨号异常:", e);  
  94.         }  
  95.           
  96.         return bAdsl;         
  97.     }  
  98.        
  99.     public static void main(String[] args) throws Exception {  
  100. //        reconnectAdsl("宽带","adsl账号","密码");     
  101.     }     
  102.       
  103. }  
import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.log4j.Logger;

/**
 * 
 * ADSL拨号上网
 * Windwos操作系统需要是GBK编码
 * @author yijianfeng
 * 
 */

public class ConnectAdslNet {
	static Logger logger = Logger.getLogger(ConnectAdslNet.class);
	
	 /** 
     * 执行CMD命令,并返回String字符串 
     */  
    public static String executeCmd(String strCmd) throws Exception {  
        Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);  
        StringBuilder sbCmd = new StringBuilder();  
        
        //注意编码 GBK
        BufferedReader br = new BufferedReader(new InputStreamReader(p  
                .getInputStream(),"GBK"));  
        String line;  
        while ((line = br.readLine()) != null) {  
            sbCmd.append(line + "\n");  
        }  
        return sbCmd.toString();  
    }  
  
    /** 
     * 连接ADSL 
     */  
    public static boolean connectAdsl(String adslTitle, String adslName, String adslPass) throws Exception {  
        System.out.println("正在建立连接.");  
        String adslCmd = "rasdial " + adslTitle + " " + adslName + " "  
                + adslPass;  
        String tempCmd = executeCmd(adslCmd);  
        
        // 判断是否连接成功  
        if (tempCmd.indexOf("已连接") > 0) {  
            System.out.println("已成功建立连接.");  
            return true;  
        } else {  
            System.out.println(tempCmd);  
            System.out.println("建立连接失败");  
            return false;  
        }  
    }  
  
    /** 
     * 断开ADSL 
     */  
    public static boolean disconnectAdsl(String adslTitle) throws Exception {  
        String disconnectAdsl = "rasdial " + adslTitle + " /disconnect";  
        String result = executeCmd(disconnectAdsl);       
         
        if (result.indexOf("没有连接")!=-1){  
            System.out.println(adslTitle + "连接不存在!");  
            return false;  
        } else {  
            System.out.println("连接已断开");  
            return true;  
        }  
    }  
    
    /**
     * adsl重新拨号,支持失败不断重拨
     * @param args
     * @throws Exception
     */
    public static boolean reconnectAdsl(String adslTitle, String adslName, String adslPass){
    	boolean bAdsl = false;
    	try {
			disconnectAdsl(adslTitle); 
			Thread.sleep(3000);    		
    		bAdsl = connectAdsl(adslTitle,adslName,adslPass);
			Thread.sleep(3000);
    		int i = 0;
    		while (!bAdsl){
				disconnectAdsl(adslTitle); 
				Thread.sleep(3000);
				bAdsl = connectAdsl(adslTitle,adslName,adslPass);
				Thread.sleep(3000);
				if(i>5){
					break;
				}
    		}
    	}catch(Exception e){
    		logger.error("ADSL拨号异常:", e);
    	}
    	
    	return bAdsl;     	
    }
     
    public static void main(String[] args) throws Exception {
//        reconnectAdsl("宽带","adsl账号","密码");  
    }  	
	
}


采用上述办法,基本上就可以解决拨号的问题了。


如果程序加入了多线程。 那么就必须考虑多线程,拨号同步,以及数据同步问题。  提高效率和避免重复操作。


到此,破解屏蔽ip访问就搞定了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值