惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
博客园_首页
雷峰网
雷峰网
V
V2EX
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
T
Tailwind CSS Blog
小众软件
小众软件
博客园 - 叶小钗
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
MyScale Blog
MyScale Blog
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - zhouruixi0728

通过数据库生成CodeFirst实体类(带字段中文名称) ASP.NET Simple OOXML导出Excel,Word 防止页面重复提交,插入重复数据的解决办法 提高编码效率的一些经验 解决Ext Tab 从ifram1页刷新ifram2页 ext控件宽度变小的bug Repeater没有数据时显示空行 - zhouruixi0728 - 博客园 水晶报表添加字段 asp.net项目注意事项 - zhouruixi0728 - 博客园 清空sql2005数据库日志 还原卡破解(联想机房管家) asp.net ModalPopupExtender实现指定位置弹出 C# 多线程辅助类实现多任务 sql2005导出Excel错误解决方法 C#word转pdf失败解决方法 如何判断IIS版本 判断IIS中.NET2.0是否注册 一个委托的小例子 C# XceedFtp下载卡死解决方案 SQL 两表之间拷贝复制数据 C# tcp发送消息和传输文件
刷访问量程序
zhouruixi0728 · 2011-06-28 · via 博客园 - zhouruixi0728

背景

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

只需十几分钟就多了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代码 

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;
            }

        }

    }

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