1. 程式人生 > >關於PHP寫的投票網站之刷票原理(curl模組)

關於PHP寫的投票網站之刷票原理(curl模組)

告訴大家一個壞訊息,還是有刷票的行為,有圖有真相:

enter image description here

倒數第三項是時間軸,倒數第二項是IP,倒數第一項是郵箱,你們要刷票,攔都攔不住呀呀呀呀呀呀!!!!!

看看這些時間的間隔,看看這些IP的地址,哎,再看看郵箱,全163的,再也不愛了。

  再來看看這些軟體,有圖有真相:

還有神馬人工輸入驗證碼的,自動輸入驗證碼的,哎,被秒殺了瞬間。。。。

  繼上篇刷票風雲的隨筆之後,我還是決定用每個學生登入教務處的密碼嘗試一下,雖然這個我在開學的時候做微信開發的時候弄過。

  首先要做的是登入學校教務處網站,然後開啟sharkwire,取得傳過去的資訊,這些圖我就明天上傳補上,現在是用的同學電腦。

  獲取到傳過去的資料之後,我們就可以copy一下,用curl這個PHP中的API,創造個cookie傳過去。

//第一步:提交資料,生成cookie,將cookie儲存在臨時目錄下
//在指定目錄中建立一個具有唯一檔名的檔案。如果該目錄不存在,tempnam() 會在系統臨時目錄中生成一個檔案,並返回其檔名
$cookie_file=tempnam('./temp','cookie');
$ch=curl_init();
$login_url="網址";
$curlPost="uname=賬號&upwd=密碼&usertypex=%B9%DC%C0%ED%D4%B1";
curl_setopt($ch,CURLOPT_URL,$login_url);
//啟用時會將標頭檔案的資訊作為資料流輸出
curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible;MS IE 9.0; Windows NT 6.1; WOW 64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2; MASM; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0; SE 2.X MeTaSr 1.0)');
curl_setopt($ch,CURLOPT_HEADER,true); 
curl_setopt($ch,CURLOPT_MAXREDIRS,1); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); 
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
//設定連線結束後儲存cookie資訊的檔案
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$content_login=curl_exec($ch);
//print_r($content_login);
var_dump($cookie_file);
curl_close($ch);

  測試什麼都沒有顯示,因為:

$content_login=curl_exec($ch);
//print_r($content_login);

  後面會解釋,繼續:

$ch2=curl_init();
$login_url2=網址2";
curl_setopt($ch2,CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible;MS IE 9.0; Windows NT 6.1; WOW 64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2; MASM; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0; SE 2.X MeTaSr 1.0)');
curl_setopt($ch2,CURLOPT_HEADER,0); 
curl_setopt($ch2,CURLOPT_URL,$login_url2); 
curl_setopt($ch2,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch2,CURLOPT_CONNECTTIMEOUT,120);

curl_setopt($ch2,CURLOPT_AUTOREFERER,1); 
curl_setopt($ch2,CURLOPT_POST,1);

curl_setopt($ch2,CURLOPT_POSTFIELDS,$curlPost); 
curl_setopt($ch2,CURLOPT_REFERER,"來源");  
//設定連線結束後儲存cookie資訊的檔案
curl_setopt($ch2,CURLOPT_COOKIEFILE,$cookie_file); 
$content_login=curl_exec($ch2);
//$content_login='1';
print_r($content_login);
//curl_exec($ch);
curl_close($ch2);

  在這裡,用到的是同一個cookie,這樣伺服器就可以直接識別了。

$content_login=curl_exec($ch2);

  這是獲取到網頁上的內容。

print_r($content_login);

  這是將獲取到的內容打印出來,如果你細心,你可以發現前面有:

$content_login='1';

  這麼一句話被我註釋掉了,這是我檢測是否能修改資料用的,當初在獲取課表的時候就不能修改獲得的資料,也不知道是為何,但是在這裡可以。

  如果賬號密碼錯了,就會按網站那樣彈出個對話方塊顯示賬號密碼錯誤,這樣,只要再資料表裡面再新增一項student_id便可以了,一個賬號只能用一次。

  真心希望這次能真正的制止住刷票,我已經心疲力盡了。

  也謝謝網友們,蘑菇街的驗證碼真心好,我也弄出來了,明天與大家分享,但是刷票器有個功能是手工輸入驗證碼,這又沒轍了,所以放棄驗證碼了。

  我要被那些人罵死了。