当前位置: 首页 > news >正文

刷访问量程序

背景

今天研究了一下刷博客的访问量的程序

只需十几分钟就多了100多的访问量

实现过程

本来感觉很简单直接写个html页,里面嵌一个IFRAME,然后用js一直设置iframe的src,但是由于js的权限问题没成功...没办法只能做个winform的了.

直接在winform上放一个webbrowser然后在webbrowser页面加载完成后再重新加载就达到了刷访问量的目的...但是问题又出现了刷了几次之后访问量就不变了,原来博客系统屏蔽了一直请求的IP地址.

所以切换IP地址就成了问题的关键:

         public   void  ChangeIP()
        {
            
try
            {
                
// change ip
                Execute( " rasdial \"宽带名称\" /d " 6000 ); // 断开宽带
                Execute( " rasdial \"宽带名称\" \"宽带账号\" \"宽带密码\" " 6000 ); // 连接宽带
            }
            
catch
            {
            }
        }       
/**/
        
///  
        
///  执行DOS命令,返回DOS命令的输出
         ///  dos命令
        
///  等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待
        
///  返回输出,如果发生异常,返回空字符串
         public   static   string  Execute( string  dosCommand,  int  milliseconds)
        {
            
string  output  =   "" ;      // 输出字符串
            
if  (dosCommand  !=   null   &&  dosCommand  !=   "" )
            {
                Process process 
=   new  Process();      // 创建进程对象
                ProcessStartInfo startInfo  =   new  ProcessStartInfo();
                startInfo.FileName 
=   " cmd.exe " ;       // 设定需要执行的命令
                startInfo.Arguments  =   " /C  "   +  dosCommand;    // 设定参数,其中的“/C”表示执行完命令后马上退出
                startInfo.UseShellExecute  =   false ;      // 不使用系统外壳程序启动
                startInfo.RedirectStandardInput  =   false ;    // 不重定向输入
                startInfo.RedirectStandardOutput  =   true ;    // 重定向输出
                startInfo.CreateNoWindow  =   true ;      // 不创建窗口
                process.StartInfo  =  startInfo;
                
try
                {
                    
if  (process.Start())        // 开始进程
                    {
                        
if  (milliseconds  ==   0 )
                            process.WaitForExit();     
// 这里无限等待进程结束
                         else
                            process.WaitForExit(milliseconds);  
// 这里等待进程结束,等待时间为指定的毫秒
                        output  =  process.StandardOutput.ReadToEnd(); // 读取进程的输出
                    }
                }
                
catch
                {
                }
                
finally
                {
                    
if  (process  !=   null )
                        process.Close();
                }
            }
            
return  output;
        }

通过adsl拨号,用dos命令来断开宽带重新连接达到替换IP地址方法

Execute是执行dos命令的方法

至此简单的刷访问量是可以实现了但是这样的效率不是很高,因为有的时候连接上宽带后是之前用过的ip地址,所以再加一个List来过滤一下就ok了 

        List < string >  IPS  =   new  List < string > ();
        
public   void  RefreshBlog()
        {
            
if  (refreshcount  >   5 ) // 每个IP差不多可以用5次
            {
                ChangeIP();
                
// 判断是否连接宽带成功 即是否有两个IP(内网和外网)
                 while  (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length  <   2 )
                {
                    ChangeIP();
                }
                
// 获取外网IP并判断是否已使用过
                 string  ip  =  System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[ 1 ].ToString();
                
while  (IPS.Contains(ip))
                {
                    ChangeIP();
                    ip 
=  System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[ 1 ].ToString();
                }
                IPS.Add(ip);
                refreshcount 
=   0 ;
            }
            refreshcount
++ ;
        }

  完整cs代码 

ExpandedBlockStart.gif View Code
public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
        }

        
int  refreshcount  =   0 ;
        
private   void  Form1_Load( object  sender, EventArgs e)
        {
            webBrowser1.Navigate(
" 要刷新的地址 " );
        }
        
private   void  webBrowser1_DocumentCompleted( object  sender, WebBrowserDocumentCompletedEventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }
        List
< string >  IPS  =   new  List < string > ();
        
public   void  RefreshBlog()
        {
            
if  (refreshcount  >   5 ) // 每个IP差不多可以用5次
            {
                ChangeIP();
                
// 判断是否连接宽带成功 即是否有两个IP(内网和外网)
                 while  (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length  <   2 )
                {
                    ChangeIP();
                }
                
// 获取外网IP并判断是否已使用过
                 string  ip  =  System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[ 1 ].ToString();
                
while  (IPS.Contains(ip))
                {
                    ChangeIP();
                    ip 
=  System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[ 1 ].ToString();
                }
                IPS.Add(ip);
                refreshcount 
=   0 ;
            }
            refreshcount
++ ;
        }
        
public   void  ChangeIP()
        {
            
try
            {
                
// change ip
                Execute( " rasdial \"宽带名称\" /d " 6000 ); // 断开宽带
                Execute( " rasdial \"宽带名称\" \"账号\" \"密码\" " 6000 ); // 连接宽带
            }
            
catch
            {

            }
        }
        
/**/
        
///  
        
///  执行DOS命令,返回DOS命令的输出
        
///  
        
///  dos命令
        
///  等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待
        
///  返回输出,如果发生异常,返回空字符串
         public   static   string  Execute( string  dosCommand,  int  milliseconds)
        {
            
string  output  =   "" ;      // 输出字符串

            
if  (dosCommand  !=   null   &&  dosCommand  !=   "" )
            {
                Process process 
=   new  Process();      // 创建进程对象
                ProcessStartInfo startInfo  =   new  ProcessStartInfo();
                startInfo.FileName 
=   " cmd.exe " ;       // 设定需要执行的命令
                startInfo.Arguments  =   " /C  "   +  dosCommand;    // 设定参数,其中的“/C”表示执行完命令后马上退出
                startInfo.UseShellExecute  =   false ;      // 不使用系统外壳程序启动
                startInfo.RedirectStandardInput  =   false ;    // 不重定向输入
                startInfo.RedirectStandardOutput  =   true ;    // 重定向输出
                startInfo.CreateNoWindow  =   true ;      // 不创建窗口
                process.StartInfo  =  startInfo;
                
try
                {
                    
if  (process.Start())        // 开始进程
                    {
                        
if  (milliseconds  ==   0 )
                            process.WaitForExit();     
// 这里无限等待进程结束
                         else
                            process.WaitForExit(milliseconds);  
// 这里等待进程结束,等待时间为指定的毫秒
                        output  =  process.StandardOutput.ReadToEnd(); // 读取进程的输出
                    }
                }
                
catch
                {
                }
                
finally
                {
                    
if  (process  !=   null )
                        process.Close();
                }
            }
            
return  output;
        }

        
private   void  backgroundWorker1_DoWork( object  sender, DoWorkEventArgs e)
        {
            Thread.Sleep(
1000 );
            RefreshBlog();
        }

        
private   void  backgroundWorker1_RunWorkerCompleted( object  sender, RunWorkerCompletedEventArgs e)
        {
            seturl:
            try
            {
                webBrowser1.Navigate("博客地址");
            }
            catch
            {
                goto seturl;
            }
        }

    }

 声明:本文只用来技术探讨,严禁利用此文从事非法活动,后果自负

转载于:https://www.cnblogs.com/zrx401558287/archive/2011/06/28/2092476.html

相关文章:

  • Dede 查询附加表
  • LAMP自动化安装脚本
  • verilog实现的VGA显示自反弹移动小方块
  • UNIX和Linux Shell正则表达式语法介绍
  • iOS.FBTweak
  • 数据结构-图
  • Linux 下完整安装ffmpeg(包括各种解码器)
  • poj2031
  • logistic regression
  • Linux中tty、pty、pts的概念区别
  • CISCO交换机QOS设置文档
  • QCon全球软件开发大会(北京站)2015精彩回顾和总结
  • MBA = married but available
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • Android中的Button自定义点击效果
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 03Go 类型总结
  • AngularJS指令开发(1)——参数详解
  • ECMAScript入门(七)--Module语法
  • JavaScript 一些 DOM 的知识点
  • Java编程基础24——递归练习
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • ReactNative开发常用的三方模块
  • webpack4 一点通
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 彻底搞懂浏览器Event-loop
  • 初识 beanstalkd
  • 第十八天-企业应用架构模式-基本模式
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 记一次和乔布斯合作最难忘的经历
  • 技术胖1-4季视频复习— (看视频笔记)
  • 容器服务kubernetes弹性伸缩高级用法
  • 实现菜单下拉伸展折叠效果demo
  • 原生 js 实现移动端 Touch 滑动反弹
  • 自制字幕遮挡器
  • ionic入门之数据绑定显示-1
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ###C语言程序设计-----C语言学习(6)#
  • #Z0458. 树的中心2
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1)SpringCloud 整合Python
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (译)计算距离、方位和更多经纬度之间的点
  • (转载)hibernate缓存
  • (状压dp)uva 10817 Headmaster's Headache
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net IE10 _doPostBack 未定义
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 发展历程
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET单元测试