背景
今天研究了一下刷博客的访问量的程序
只需十几分钟就多了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;
}
{
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 ++ ;
}
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;
}
{
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;
}
}
}
}
声明:本文只用来技术探讨,严禁利用此文从事非法活动,后果自负