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

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

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

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

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

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

待会截个前台的图,好让没有接触过秒杀的朋友有个大体的了解,有兴趣的可以加我QQ(278113569 注:博客园)。

二话不说了,截图。

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

 

 
 
全部源代码
  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( 0 1 !=   " / " )
 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  }
  • 10
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值