static bool RegNewUser(RegInfo user, string tid) { try { HttpWebRequest request = null; string url = "http://www.vnscoin.com/user/register/?code=" + user.InviteCodeFrom; //登录页面 request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; if (user.proxy != null) { request.Proxy = new WebProxy(user.proxy.IP, user.proxy.Port); } else { if (webproxy != null) { request.Proxy = webproxy; } else { request.Proxy = new WebProxy(localproxy.IP, localproxy.Port); } } request.Accept = "*/*;"; request.UserAgent = "Mozilla/5.0"; request.ContentType = "application/x-www-form-urlencoded"; request.AllowAutoRedirect = true; request.CookieContainer = user.CC; request.KeepAlive = true; /* * code:TOfUKS7u * mobile:18648611298 * phone_code:901693 * password:vn,.?1wyky.. * pwd_again:vn,.?1wyky.. */ string postData = string.Format("code={0}&mobile={1}&phone_code={2}&password={3}&pwd_again={4}&check_code={5}", System.Web.HttpUtility.UrlEncode(user.InviteCodeFrom), System.Web.HttpUtility.UrlEncode(user.Phone), System.Web.HttpUtility.UrlEncode(user.PhoneSmsCode), System.Web.HttpUtility.UrlEncode(user.Password), System.Web.HttpUtility.UrlEncode(user.Password), System.Web.HttpUtility.UrlEncode(user.PicVCode)); log.WriteLine(postData);//这里按照前面FireBug中查到的POST字符串做相应修改。 byte[] postdatabyte = Encoding.UTF8.GetBytes(postData); request.ContentLength = postdatabyte.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(postdatabyte, 0, postdatabyte.Length); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string strWebData = string.Empty; using (StreamReader reader = new StreamReader(response.GetResponseStream())) { strWebData = reader.ReadToEnd(); } if (strWebData.IndexOf("奖") > 0) { var doc = new HtmlDocument(); doc.LoadHtml(strWebData); try { var yaoqing = doc.DocumentNode.SelectNodes("/html/body/div[2]/div/div[3]/div[3]/div[2]/table/tbody/tr[2]/td[2]/div").First().InnerText; var jifen = doc.DocumentNode.SelectNodes("/html/body/div[2]/div/div[3]/div[3]/div[2]/table/tbody/tr[4]/td[2]").First().InnerText; var jiangli = doc.DocumentNode.SelectNodes("/html/body/div[2]/div/div[3]/div[3]/div[2]/table/tbody/tr[5]/td[2]").First().InnerText; user.InviteCode = yaoqing; user.JiFen = Convert.ToInt32(jifen); user.JiangLi = Convert.ToInt32(jiangli); } catch { } string info = string.Format(tid + "新用户:{0}注册成功!!!,邀请:{1},积分:{2},奖励:{3}", user.Phone, user.InviteCode, user.JiFen, user.JiangLi); Console.WriteLine(info); log.WriteLine(info); NewUserLog.WriteLine(info); return(true); } else { throw new Exception(strWebData); } } catch (Exception e) { string info = string.Format(tid + "新用户:{0}注册失败 Err{1}", user.Phone, e.Message); string info1 = string.Format(tid + "新用户:{0}注册失败 ", user.Phone); Console.WriteLine(info1); log.WriteLine(info); } return(false); }
//Thread.CurrentThread.ManagedThreadId.ToString() 获取线程ID static void Reg() { string tid = Thread.CurrentThread.ManagedThreadId.ToString(); Console.WriteLine("线程:{0}启动...", tid); Thread.Sleep(1000); RegInfo newuser = new RegInfo(Smss); //获取代理服务器 bool proxyflag = GetProxy(newuser, tid); int proxycount = 0; while (!proxyflag) { Thread.Sleep(300); proxyflag = GetProxy(newuser, tid); proxycount++; if (proxycount > 3) { break; } } if (!proxyflag) { newuser.proxy = null; } newuser.Phone = newuser.Sms.GetPhone(); if (newuser.Phone.Length != 11) { Console.WriteLine(tid + "手机号获取失败:" + newuser.Sms.ServiceName + newuser.Phone); log.WriteLine(tid + "手机号获取失败:" + newuser.Sms.ServiceName + newuser.Phone); ThreadCount--; return; } Console.WriteLine(tid + "手机号获取:" + newuser.Sms.ServiceName + newuser.Phone + " 成功"); log.WriteLine(tid + "手机号获取:" + newuser.Sms.ServiceName + newuser.Phone + " 成功"); //破解验证码 int piccount = 1; while (!BreakImgCode(newuser, tid)) { Console.WriteLine(tid + "尝试第{0}次破解图片验证码", (piccount + 1)); piccount++; if (piccount > 5) { break; } } if (newuser.PicVCode == "") { ThreadCount--; return; } try { SendSmsMsg(newuser.Phone, newuser); } catch (Exception e) { Console.WriteLine(e.Message); ThreadCount--; return; } //获取短信内容 int times = 0; string Smsresult = ""; while (true) { if (times > 20) { break; } if (!Working) { break; } Smsresult = newuser.Sms.GetMsg(newuser.Phone); if (Smsresult.Length > 4) { break; } else { times++; //Console.WriteLine(string.Format(tid +newuser.Sms.ServiceName+"正在第 {0} 次获取验证码。", times)); Thread.Sleep(5000); } } if (Smsresult.Length < 4) { Console.WriteLine(tid + "获取短信内容失败" + newuser.Sms.ServiceName); log.WriteLine(tid + "获取短信内容失败" + newuser.Sms.ServiceName); newuser.Sms.AddIngore(newuser.Phone); newuser.Sms.Release(newuser.Phone); ThreadCount--; return; } //获取短信验证码 正则方式 newuser.PhoneSmsCode = getyzm(Smsresult, 6); Console.WriteLine(tid + "Raw SmsMsg:" + Smsresult + newuser.Sms.ServiceName); Console.WriteLine(tid + "Sms Verficode:" + newuser.PhoneSmsCode + newuser.Sms.ServiceName); //获取邀请码 newuser.InviteCodeFrom = GetInvCodeList(); Console.WriteLine(tid + "返回随机邀请码:" + newuser.InviteCodeFrom); newuser.Password = GetRandomString(12, true, true, true); newuser.Password = newuser.Password.Substring(0, 11) + "0"; Console.WriteLine(tid + "返回随机密码:" + newuser.Password); int regtime = 1; while (true) { Console.WriteLine(tid + "第{0}次尝试注册:", regtime); bool flag = RegNewUser(newuser, tid); if (flag) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(tid + "第{0}次尝试注册成功,更新数据库...", regtime); Console.ForegroundColor = ConsoleColor.White; log.WriteLine(tid + "第" + regtime + "次尝试注册成功,更新数据库..."); //更新数据库 regqueue.Put(newuser); //newuser.UpdateDB(); break; } else { Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine(tid + "第{0}次尝试注册失败,..", regtime); Console.ForegroundColor = ConsoleColor.White; log.WriteLine(tid + "第" + regtime + "次尝试注册失败..."); regtime++; } if (regtime >= 4) { Console.WriteLine(tid + "超过注册次数限制,失败!"); log.WriteLine(tid + "超过注册次数限制,失败!"); break; } // 默认注册失败是由于 图片验证码破解失败造成破解验证码 piccount = 1; while (!BreakImgCode(newuser, tid)) { Console.WriteLine(tid + "第{1}次尝试注册 尝试第{0}次破解图片验证码", (piccount + 1), regtime); piccount++; if (piccount > 5) { break; } } } //该号码拉黑 newuser.Sms.AddIngore(newuser.Phone); if (newuser.Sms.Release(newuser.Phone)) { Console.WriteLine("释放手机号:" + newuser.Phone + "成功!"); } else { Console.WriteLine("释放手机号:" + newuser.Phone + "失败!"); } ThreadCount--; //UpdateWebProxy(); }