如何使用C#adsl拨号刷网站流量?
好久没更新blog了!新年到了,各公司网站到这个时候都大规模的跳水。推广部给出了任务,年假咱们就刷些ip吧。好主意,那就行动吧!
由于公司内部用就没写哪么复杂!给大家参考下
form1.cs
namespace mainApp
{ /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox2; private Thread t; private string[] aUrl; private System.Windows.Forms.Timer timer1; private int tv = 20; private System.ComponentModel.IContainer components; public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent();//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // }/// <summary>
/// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }#region Windows 窗体设计器生成的代码
/// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.textBox2 = new System.Windows.Forms.TextBox(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // groupBox1 // this.groupBox1.Controls.Add(this.textBox1); this.groupBox1.Location = new System.Drawing.Point(8, 8); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(272, 176); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; this.groupBox1.Text = "请输入网址"; // // textBox1 // this.textBox1.Location = new System.Drawing.Point(8, 16); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(256, 152); this.textBox1.TabIndex = 0; this.textBox1.Text = "http://www.changshang.com"; // // button1 // this.button1.Location = new System.Drawing.Point(128, 192); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(70, 24); this.button1.TabIndex = 1; this.button1.Text = "开始"; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Enabled = false; this.button2.Location = new System.Drawing.Point(208, 192); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(70, 24); this.button2.TabIndex = 2; this.button2.Text = "停止"; this.button2.Click += new System.EventHandler(this.button2_Click); // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(8, 200); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(66, 17); this.label1.TabIndex = 3; this.label1.Text = "定时(秒):"; // // textBox2 // this.textBox2.Location = new System.Drawing.Point(72, 193); this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(48, 21); this.textBox2.TabIndex = 4; this.textBox2.Text = "20"; // // timer1 // this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(292, 238); this.Controls.Add(this.textBox2); this.Controls.Add(this.label1); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Controls.Add(this.groupBox1); this.Name = "Form1"; this.Text = "刷流量"; this.Load += new System.EventHandler(this.Form1_Load); this.groupBox1.ResumeLayout(false); this.ResumeLayout(false);}
#endregion/// <summary>
/// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); }private void Form1_Load(object sender, System.EventArgs e)
{ }private void button1_Click(object sender, System.EventArgs e)
{ try { if(chkTxtUrl()==false) return; if(chkTimerVal()==false) return; else timer1.Interval = tv*1000; timer1.Start(); } catch{} finally { btnStatsChange(); } } private void button2_Click(object sender, System.EventArgs e) { try { timer1.Stop(); //t.Abort(); } catch { } finally { btnStatsChange(); } } #region 自定义函数 /// <summary> /// 当出发按扭事件时改变按扭状态 /// </summary> private void btnStatsChange() { this.button1.Enabled = (!this.button1.Enabled); this.button2.Enabled = (!this.button2.Enabled); } public bool chkTimerVal() { if(textBox2.Text.Trim()=="") { MessageBox.Show("请输入刷新时间。"); return false; } try { tv = int.Parse(textBox2.Text.Trim()); if(tv<20) { MessageBox.Show("最小时间间隔为20秒,请重新设置时间。"); return false; } } catch { MessageBox.Show("请输入一个整数值。"); return false; } return true; } public void openNewWin() { timer1.Stop(); //重新进行adsl拨号。 int tmp =0; RASHelper.InternetDial(IntPtr.Zero,"",2,ref tmp,0); if(RASHelper.IsNetConnectViaLAN()==false) openNewWin(); t = new Thread(new ThreadStart(_openNewWin)); t.IsBackground = true; t.Start(); timer1.Start(); } /// <summary> /// 启动一新的浏览器窗体,刷新用户设定的网址 /// </summary> public void _openNewWin() { System.Diagnostics.Process p = System.Diagnostics.Process.Start("iexplore.exe","http://www.changshang.com/?id=refresh"); System.Threading.Thread.Sleep(10000); p.CloseMainWindow(); p.Close(); //线程结束时关闭所有adsl连接。 RASHelper.HangUp(); } /// <summary> /// 判断用户输入的网址是否符合要求,返回bool值 /// </summary> /// <returns></returns> public bool chkTxtUrl() { if(this.textBox1.Text.Trim()=="") { MessageBox.Show("请输入网址。"); return false; } aUrl = this.textBox1.Text.Split('/n'); Regex re = new Regex(@"http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?"); for(int i = 0; i < aUrl.Length; i++) { if(re.IsMatch(aUrl[i])==false) { MessageBox.Show("您输入的网址有错误。"); return false; } } return true; } #endregionprivate void timer1_Tick(object sender, System.EventArgs e)
{ openNewWin(); } } }//////////////////////////////////////////////////////////////////////////////////////////////////
RASHelper.cs
using System;
using System.Collections; using System.Text; using System.Runtime.InteropServices; using System.Threading; using System.ComponentModel;namespace mainApp
{ /// <summary> /// RASHelper 的摘要说明。 /// </summary> public class RASHelper { public RASHelper() { // // TODO: 在此处添加构造函数逻辑 // } const int INTERNET_RAS_INSTALLED = 0x10; const int INTERNET_CONNECTION_LAN = 0x02;[DllImport("WININET", CharSet = CharSet.Auto)]
public static extern bool InternetGetConnectedState( ref int lpdwFlags, int dwReserved); [DllImport("WININET",CharSet = CharSet.Auto)] public static extern int InternetGetConnectedStateEx( ref int lpdwFlags, string lpszConnectionName, int dwNameLen, int dwReserved);const int INTERNET_DIALSTATE_DISCONNECTED = 1;
const int INTERNET_AUTODIAL_FORCE_ONLINE = 1; const int INTERNET_AUTODIAL_FORCE_UNATTENDED = 2; const int INTERNET_DIAL_UNATTENDED = 0x8000;[DllImport("WININET",CharSet = CharSet.Auto)]
public static extern int InternetDial( IntPtr hwndParent, string lpszConnectoid, int dwFlags, ref int lpdwConnection, int dwReserved );const int MAX_PATH = 260;
const int RAS_MaxDeviceType = 16; const int RAS_MaxPhoneNumber = 128; const int RAS_MaxEntryName = 256; const int RAS_MaxDeviceName = 128;const int RAS_Connected = 0x2000;
[DllImport("RASAPI32", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int RasEnumConnections( ref RASCONN lprasconn, ref int lpcb, ref int lpcConnections);[DllImport("RASAPI32", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int RasGetConnectStatus( IntPtr hrasconn, ref RASCONNSTATUS lprasconnstatus); [DllImport("RASAPI32", SetLastError = true, CharSet = CharSet.Auto)] public static extern int RasHangUp(IntPtr hrasconn);[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct RASCONN { public int dwSize; public IntPtr hrasconn; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)] public string szEntryName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceType + 1)] public string szDeviceType; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceName + 1)] public string szDeviceName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] public string szPhonebook; public int dwSubEntry; }[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct RASCONNSTATUS { public int dwSize; public int rasconnstate; public int dwError; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceType + 1)] public string szDeviceType; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceName + 1)] public string szDeviceName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxPhoneNumber + 1)] public string szPhoneNumber; } /// <summary> /// 关闭拨号连接 /// </summary>public static void HangUp()
{ IntPtr m_ConnectedRasHandle; RASCONN lprasConn = new RASCONN();lprasConn.dwSize = Marshal.SizeOf(typeof(RASCONN));
lprasConn.hrasconn = IntPtr.Zero; int lpcb = 0; int lpcConnections = 0; int nRet = 0; lpcb = Marshal.SizeOf(typeof(RASCONN)); nRet = RasEnumConnections(ref lprasConn, ref lpcb, ref lpcConnections); if(nRet != 0) { return; } if(lpcConnections > 0) { RASCONNSTATUS rasconnstatus = new RASCONNSTATUS(); m_ConnectedRasHandle = lprasConn.hrasconn; RasHangUp(m_ConnectedRasHandle); Thread.Sleep(1000); for(;;) { rasconnstatus.dwSize = Marshal.SizeOf(typeof(RASCONNSTATUS)); if(RasGetConnectStatus(m_ConnectedRasHandle,ref rasconnstatus)==0) //获得当前连接的状态 { if(rasconnstatus.rasconnstate==0x2001) //已经彻底挂断 break; } else break;//获得当前连接状态失败 } }}
///<sumarry> ///判断是否是lan连接 ///</sumarry> public static bool IsNetConnectViaLAN() { int dwFlags = 0; return InternetGetConnectedState(ref dwFlags,0); //return dwFlags==INTERNET_CONNECTION_LAN; } } }