• socket 实现淘宝秒杀器(抢拍器) 附源码与截图


           最近淘宝秒杀真的很火,掌故的拿几个宝贝设置成低价限时来促销,就被那些有秒杀器的家伙0秒下单了,是在是受不了也看不下去,也尝试的去写个秒杀器,摸索的几天几夜,终于有点小成绩,但还不完善,如果遇到有验证码 就死翘翘。

          但听说有人的秒杀器就能绕过验证码,还千真万确,我也百度GG 几天几夜,没找到答案,但至少有了点眉目,就是什么cookies强制过期法,来让验证码失效,可以提前输入验证码。

    我知道园子里很多牛人。可以指点指点,共同学习学习,有兴趣的可以完善下,同时也学学高深的破解验证码的技术。

    如果你真的绕过验证码了,那去年9月26日,淘宝1元包邮秒杀笔记本就是你的了。哈哈哈。。。。

        代码都贴在这了,但代码中socket获取页面的时候有时候获取的不全,需要调整线程sleep时间之类的东西,代码里的东西有的是从网上copy下来到,作者也不不知道是谁了,我就用了,请多多海涵。

    待会截个前台的图,好让没有接触过秒杀的朋友有个大体的了解.

    你也可以到秒杀网来找找秒杀信息试试手!

    二话不说了,截图。

    先输入淘宝的账户和密码,然后贴上宝贝的地址 点击检测并抢购。

     
     
    全部源代码
      1 using System;
      2 using System.Collections;
      3 using System.Configuration;
      4 using System.Data;
      5 using System.Web;
      6 using System.Web.Security;
      7 using System.Web.UI;
      8 using System.Web.UI.HtmlControls;
      9 using System.Web.UI.WebControls;
     10 using System.Net;
     11 using System.Net.Sockets;
     12 using System.Text;
     13 using System.Threading;
     14 using System.IO;
     15 using System.Text.RegularExpressions;
     16 
     17 public partial class MiaoSha : System.Web.UI.Page
     18 {
     19     string strServer = string.Empty;
     20     string strPath = string.Empty;
     21 
     22     protected void Page_Load(object sender, EventArgs e)
     23     {
     24        
     25     }
     26 
     27     public static String Recv(Socket sock, Encoding encode)
     28     {
     29         Byte[] buffer = new Byte[8192];
     30         StringBuilder sb = new StringBuilder();
     31 
     32         Thread.Sleep(50);//根据页面响应时间进行微调
     33         Int32 len = sock.Receive(buffer);
     34         sb.Append(encode.GetString(buffer, 0, len));
     35 
     36         while (sock.Available > 0)
     37         {
     38             Thread.Sleep(300);//也可以视情况微调
     39             Array.Clear(buffer, 0, buffer.Length);
     40             len = sock.Receive(buffer);
     41             sb.Append(encode.GetString(buffer, 0, len));
     42             string ss = encode.GetString(buffer, 0, len);
     43         }
     44         sock.Close();
     45         return sb.ToString();
     46     }
     47 
     48     /// <summary>
     49     /// Socket获取页面HTML同时返回头信息
     50     /// </summary>
     51     /// <param name="server">服务器地址或主机名</param>
     52     /// <param name="url">请求的页面</param>
     53     /// <param name="method">post or get</param>
     54     /// <param name="data">提交的数据</param>
     55     /// <param name="Cookies">Cookies</param>
     56     /// <returns>返回页面的HTML</returns>
     57     public string GetHtml(string server, string url, string method, string data, string Cookies)
     58     {
     59         string _method = method.ToUpper();
     60         string _url = string.Empty;
     61         if (url == "")
     62         {
     63             _url = "/";
     64         }
     65         else if (url.Substring(01!= "/")
     66         {
     67             _url = "/" + url;
     68         }
     69         else
     70         {
     71             _url = url;
     72         }
     73         string formatString = string.Empty;
     74         string sendString = string.Empty;
     75         Encoding ASCII = Encoding.Default;
     76 
     77         //以下是拼接的HTTP头信息
     78         if (_method == "GET")
     79         {
     80             formatString = "";
     81             formatString += "{0} {1} HTTP/1.1\r\n";
     82             formatString += "Host: {2}\r\n";
     83             formatString += "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7\r\n";
     84             formatString += "Accept: text/html\r\n";
     85             formatString += "Keep-Alive: 300\r\n";
     86             formatString += "Cookies:{3}\r\n";
     87             formatString += "Connection: keep-alive\r\n\r\n";
     88             sendString = string.Format(formatString, _method, _url, server, Cookies);
     89         }
     90         else
     91         {
     92             formatString = "";
     93             formatString += "{0} {1} HTTP/1.1\r\n";
     94             formatString += "Host: {2}\r\n";
     95             formatString += "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7\r\n";
     96             formatString += "Accept:text/html\r\n";
     97             formatString += "Content-Type:application/x-www-form-urlencoded\r\n";
     98             formatString += "Content-Length:{3}\r\n";
     99             formatString += "Referer:http://buy.taobao.com/auction/buy_now.jhtml";
    100             formatString += "Keep-Alive:300\r\n";
    101             formatString += "Cookies:{4}\r\n";
    102             formatString += "Connection: keep-alive\r\n\r\n";
    103             formatString += "{5}\r\n";
    104             sendString = string.Format(formatString, _method, _url, server, Encoding.Default.GetByteCount(data), Cookies, data);
    105         }
    106 
    107         Byte[] ByteGet = ASCII.GetBytes(sendString);
    108         Byte[] RecvBytes = new Byte[1024];
    109         String strRetPage = null;
    110         IPAddress hostadd = Dns.Resolve(server).AddressList[0];
    111         IPEndPoint EPhost = new IPEndPoint(hostadd, 80);
    112         Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    113         s.Connect(EPhost);
    114         if (!s.Connected)
    115         {
    116             strRetPage = "链接主机失败";
    117             return strRetPage;
    118         }
    119         s.Send(ByteGet, ByteGet.Length, SocketFlags.None);
    120 
    121         strRetPage = Recv(s, ASCII);
    122 
    123         return strRetPage;
    124     }
    125 
    126     protected void btnLogin_Click(object sender, EventArgs e)
    127     {
    128         string u = this.txtUserName.Text.Trim();
    129         string p = this.txtPwd.Text.Trim();
    130         DateTime st = DateTime.Now;
    131 
    132         //淘宝登录需要post的数据串
    133         string sendData = "TPL_username=" + u + "&TPL_password=" + Server.UrlEncode(p) + "&actionForStable=enable_post_user_action&action=Authenticator&mi_uid=&mcheck=&TPL_redirect_url=http%3A%2F%2Fitem.taobao.com%2Fauction%2Fitem_detail-0db1-3036113cf5455bd74047f1a581ba4be7.htm&_oooo_=http%3A%2F%2Fitem.taobao.com%2Fauction%2Fitem_detail-0db1-3036113cf5455bd74047f1a581ba4be7.htm&event_submit_do_login=anything&abtest=&pstrong=3&from=&yparam=&done=&loginType=3&tid=&support=000001&CtrlVersion=1%2C0%2C0%2C7";
    134 
    135         string s = GetHtml("login.taobao.com""/member/login.jhtml""post", sendData, "");
    136         Session["Cookies"= GetCookies(s); //从返回的源码中提取cookies,抓取登录后的页面需要附上该cookies 
    137 
    138     }
    139     protected void btnBuy_Click(object sender, EventArgs e)
    140     {
    141         string strURL = this.txtURL.Text.Trim();
    142         getServerAndPath(strURL);
    143 
    144         string s = GetHtml(strServer, strPath, "get""", Session["Cookies"].ToString());
    145         //Response.Write(s);
    146         if (s.IndexOf("立即购买"> 0)
    147         {
    148             string item_id = strURL.Split('-')[2].Split('.')[0].ToString();
    149             string x_id = strURL.Split('-')[1].ToString();
    150 
    151             s = GetHtml("buy.taobao.com""/auction/buy.htm?from=itemDetail&item_id=" + item_id + "&x_id=" + x_id, "get""", Session["Cookies"].ToString());
    152             //Response.Write(s);
    153             using (StreamWriter sw = new StreamWriter(Server.MapPath("debug1.html")))
    154             {
    155                 sw.Write(s);
    156             }
    157 
    158             if (s.IndexOf("确认提交订单"> 0)
    159             {
    160                 Session["Cookies"= GetCookies(s);
    161                 string postData = getPostData(s);
    162                 string r = GetHtml("buy.taobao.com""/auction/buy_now.htm""post", postData, Session["Cookies"].ToString());
    163                 if (r.IndexOf("302"> 0)
    164                 {
    165                     using (StreamWriter sw = new StreamWriter(Server.MapPath("debug2.html")))
    166                     {
    167                         sw.Write(r);
    168                     }
    169                 }
    170                 else
    171                 {
    172                     ////
    173                 }
    174                 using (StreamWriter sw = new StreamWriter(Server.MapPath("debug2.html")))
    175                 {
    176                     sw.Write(r);
    177                 }
    178             }
    179         }
    180         else if (s.IndexOf("btn-wait"> 0)//该宝贝还处于定时上架的状态
    181         { 
    182             
    183         }
    184 
    185     }
    186 
    187 
    188     /// <summary>
    189     /// 从返回的源代码中提取cookies
    190     /// </summary>
    191     /// <param name="s"></param>
    192     /// <returns></returns>
    193     private string GetCookies(string s)
    194     {
    195         StringBuilder sbCookies = new StringBuilder();
    196 
    197         string[] arr = s.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    198         foreach (string str in arr)
    199         {
    200             if (str.StartsWith("Set-Cookie: "))
    201             {
    202                 int intStart = str.IndexOf(";");
    203                 string strCookie = str.Substring(12, intStart - 11);
    204                 sbCookies.Append(strCookie);
    205             }
    206         }
    207         return sbCookies.ToString();
    208     }
    209 
    210     private string GetLocationURL(string s)
    211     {
    212 
    213         string RtnString = string.Empty;
    214         StringBuilder sbCookies = new StringBuilder();
    215 
    216         string[] arr = s.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    217         foreach (string str in arr)
    218         {
    219             if (str.StartsWith("Location: "))
    220             {
    221                 RtnString = str.Substring(11, str.Length - 11);
    222             }
    223         }
    224         return RtnString;
    225     }
    226 
    227 
    228 
    229     private void getServerAndPath(string strURL)
    230     {
    231         if (strURL != "" && strURL.IndexOf("/"> 0)
    232         {
    233             int SlashPos = strURL.Substring(7).IndexOf("/");
    234             strServer = strURL.Substring(7, SlashPos);
    235             strPath = strURL.Substring(SlashPos + 7);
    236         }
    237         else
    238             return;
    239     }
    240 
    241 
    242 
    243     /// <summary>
    244     /// 从最后确认购买页面的源代码中提取表单数据的数据
    245     /// </summary>
    246     /// <param name="html"></param>
    247     /// <returns></returns>
    248     private string getPostData(string html)
    249     {
    250         string postStr = "";
    251         string pat = "<input .*?name.{0,1}=.{0,1}\"(.*?)\".*? value.{0,1}=\"(.*?)\".*?>";
    252         Regex regex = new Regex(pat, RegexOptions.Multiline | RegexOptions.IgnoreCase);
    253         MatchCollection mcollection = regex.Matches(html);
    254 
    255         foreach (Match m in mcollection)
    256         {
    257             GroupCollection gcollection = m.Groups;
    258             if (m.ToString().IndexOf("_fma.b._0.s"> 0) { continue; }
    259             if (m.ToString().IndexOf("_fma.b._0.c"> 0) { continue; }
    260             if (m.ToString().IndexOf("isCheckCode"> 0 && gcollection[2].Value.ToLower() == "true")
    261             {
    262                 //isCheckCode = true;
    263             }
    264             postStr += gcollection[1].Value; postStr += "=";
    265             postStr += Server.UrlEncode(gcollection[2].Value);
    266             postStr += "&";
    267         }
    268         postStr += "n_prov=370000&n_city=370500&n_area=370522&_fma.b._0.w=quicky&_fma.b._0.ac=250&consignment=10&_fma.b._0.au=5&_fma.b._0.c=8888";
    269         postStr = postStr.Replace("quantity=0""quantity=1").Replace("_fma.b._0.d=您不必重复省-市-区信息;至少5个字""_fma.b._0.d=" + Server.UrlEncode("收货人的具体地址")).Replace("_fma.b._0.po=""_fma.b._0.po=230031").Replace("_fma.b._0.de=""_fma.b._0.de="+Server.UrlEncode("啊峰")).Replace("_fma.b._0.u=""_fma.b._0.u=0").Replace("_fma.b._0.di=1""_fma.b._0.di=370522").Replace("_fma.b._0.deli=""_fma.b._0.deli=13888888888");
    270         postStr += "&_fma.b._0.s=2";
    271         //postStr = Server.UrlEncode(postStr);
    272 
    273         return postStr;
    274     }
    275 }
  • 相关阅读:
    个人技能总结8--linux 基本命令的使用
    个人技能总结7--Apache服务器反向代理,负载均衡,热备份+Tomcat配置
    个人技能总结6--Java网络接口以及协议
    个人技能总结5--Redis在Javaweb项目中的应用
    个人技能总结4--MongoDB在windows上安装以及java中的增删改查
    个人技能总结3--Mysql--20170828
    从源码的角度解读String、StringBuilder、StringBuffer的性能差别
    java二叉树的实现
    如何理解递归?
    继承泛型类
  • 原文地址:https://www.cnblogs.com/chjf2008/p/1711811.html
Copyright © 2020-2023  润新知