百度登陆协议分析!!!用libcurl来模拟百度登陆
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                百度登陆协议分析!!!用libcurl来模拟百度登陆
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                有空就分析了下百度的登陸協(xié)議。
大家看代碼:
size_t CURLWriteDataCallbak(char *data, size_t size, size_t nmemb, string *writerData) {if (writerData == NULL) return 0; size_t len = size*nmemb; writerData->append(data, len); return len; }void MsgCookie(CURL *curl) {CURLcode cookieRes;struct curl_slist *cookies;struct curl_slist *nc;int i;cookieRes = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);if (cookieRes != CURLE_OK) {::MessageBox(NULL,"err get cookie!","",0);return ;}nc = cookies, i = 1;CStdioFile f;//f.Open("c:\\cookie.txt",CFile::modeCreate|// CFile::modeNoTruncate|CFile::modeWrite);while (nc){::MessageBox(NULL,nc->data,"",0);//f.WriteString(nc->data);//f.WriteString("\n");nc = nc->next;i++;}//f.Close();::MessageBox(NULL,"ok","",0);if (i == 1){::MessageBox(NULL,"read cookie err\n","",0);}curl_slist_free_all(cookies);} //主要思路是,先登陸百度首頁,然后登陸百度空間,為啥不直接登陸百度空間等會大家看下面(當然大家可以登陸百度首頁后可以直接訪問百度其他的產(chǎn)品!!嘿嘿)void CassssssssssssDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知處理程序代碼CURL *curl;CURLcode res;string url="http://www.baidu.com/";string urlRetStr;string baiduid;string bdu;string token="token=";curl_global_init(CURL_GLOBAL_ALL);curl = curl_easy_init();if (curl){//第一步:獲取BAIDUID get BIADUIDcurl_easy_setopt(curl,CURLOPT_URL,url);curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"baiducookie");//要保存cookie哦,一次保存以后libcurl會自己維護cookie的curl_easy_setopt(curl,CURLOPT_WRITEDATA,&urlRetStr);curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,CURLWriteDataCallbak);//回調(diào)函數(shù)res=curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get www.baidu.comfor baiduid");}//第二步 get token,主要通過返回cookie里面的BAIDUID來獲取tokenurlRetStr="";curl_easy_setopt(curl,CURLOPT_URL,"https://passport.baidu.com/v2/ap""i/?getapi&class=login&tpl=mn&tangram=true");res = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get token");}int i = urlRetStr.find("token=")+7;int n = urlRetStr.find("';",i);token += urlRetStr.substr(i,n-i);//第三步在百度首頁登陸時候當密碼框獲得焦點會進行check 驗證碼curl_easy_setopt(curl,CURLOPT_URL,"https://passport.baidu.com/v2/ap""i/?getapi&class=login&tpl=mn&tangram=true");//add token to cookieres = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get check 驗證碼 status");}//第四步 檢測賬號是否正常 主要是啥異地登陸的 codestring callbak checkurlRetStr = "";curl_easy_setopt(curl,CURLOPT_URL,"https://passport.baidu.co""m/v2/api/?logincheck&callback=bdPass.api.login._needCode""stringCheckCallback&tpl=mn&charset=utf-8&index=0&username""=這里是你的賬號&time=1350284309109");//add token to cookieres = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get check 驗證碼 status");}//MessageBox(urlRetStr.c_str());//第五步 進行post loginurlRetStr = "";string fed = "ppui_logintime=507578&charset=utf-8&""codestring=&"+token+"&isPhone=false&index=0&u=&safeflg=0&staticpage=http%3""A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&loginType=1&tpl=mn&""callback=parent.bdPass.api.login._postCallback&username=你的賬號&password=""你的密碼&verifycode=&mem_pass=on";curl_easy_setopt(curl,CURLOPT_URL,"https://passport.baidu.com/v2/api/?login");curl_easy_setopt(curl,CURLOPT_POSTFIELDS,fed.c_str());//這里是post的字段curl_easy_setopt(curl,CURLOPT_REFERER,"http://www.baidu.com/cache/user/html/login-1.2.html");res = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err post login");}//第六步 返回的一個網(wǎng)頁值 我們必須要替換里面的%號位%25,這里我們找到hao123Param值,這里他會訪問這個其實我也不知道干啥他i=urlRetStr.find("http://www");n=urlRetStr.find("');",i);urlRetStr=urlRetStr.substr(i,n-i);i=urlRetStr.find("hao123Param=")+12;bdu=urlRetStr.substr(i);CString tmp=urlRetStr.c_str();tmp.Replace("%","%25");//MsgCookie(curl);//jumpurlRetStr = "";curl_easy_setopt(curl,CURLOPT_URL,tmp);curl_easy_setopt(curl,CURLOPT_POST,0L);//因為前面的是post,這里我們改成getres = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get check 驗證碼 status");}//MessageBox(urlRetStr.c_str());//crossdomain chek//第七步,crossdomain檢測urlRetStr = "";url ="http://user.hao123.com/static/crossdomain.php?bdu="+bdu+"&t=0.05889427157399846";curl_easy_setopt(curl,CURLOPT_URL,url);//curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"newcookie");res = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get check 驗證碼 status");}//最后一步,前面的所有都好了,我們可以隨意訪問百度的產(chǎn)品了,嘿嘿 all good then goto www.baidu.comurlRetStr = "";curl_easy_setopt(curl,CURLOPT_URL,"http://hi.baidu.com/new/guhuisec");curl_easy_setopt(curl,CURLOPT_REFERER,"http://www.xiaoming.com");res = curl_easy_perform(curl);if (res!=CURLE_OK){MessageBox("err get check 驗證碼 status");}//MessageBox(urlRetStr.c_str());CStdioFile f;f.Open("c:\\htm.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);f.WriteString(urlRetStr.c_str());f.Close();MessageBox("ok");curl_easy_cleanup(curl);}curl_global_cleanup(); }
在此我分享下我的那個百度空間登錄代碼,沒有寫完,最主要的是最后一步我不會js,最后百度空間的跨域檢測!!如果有大牛知道請告訴小弟! void CassssssssssssDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知處理程序代碼CString baiduUid;CString token;CURL *curl;CURLcode res;string strPage;CString callBakUrlStr;curl_global_init(CURL_GLOBAL_ALL);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, "http://hi.baidu.com/go/login");curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);//初始化cookie引擎curl_easy_setopt(curl, CURLOPT_COOKIEFILE,"cookiesfile"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CURLWriteDataCallbak); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strPage); res = curl_easy_perform(curl);if(res != CURLE_OK)fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));//get tokenstrPage="";curl_easy_setopt(curl, CURLOPT_URL, "https://passport.baidu.c""om/v2/api/?getapi&class=login&tpl=qing");res = curl_easy_perform(curl);if(res == CURLE_OK){token=strPage.c_str();int index=token.Find("login_token=")+13;token=token.Mid(index,32);}strPage="";//post login string fed="charset=UTF-8&codestring=&token="+token+"&isPhone=false&index=0&u=http%3A%2F%2Fhi.baidu.com%2Fgo%2Flo""gin%3Ffrom_page%3D101%26from_mod%3D0&safeflag=0&staticpag""e=http%3A%2F%2Fhi.baidu.com%2Fcom%2Fshow%2Fproxy%3Ffun%3Dcal""lback.login.submited&loginType=1&tpl=qing&username=賬號&pas""sword=密碼&verifycode=&mem_pass=on";curl_easy_setopt(curl, CURLOPT_URL, "https://passport.baidu.com/v2/api/?login");curl_easy_setopt(curl,CURLOPT_REFERER,"http://hi.baidu.com/go/login");curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fed.c_str());curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L);res = curl_easy_perform(curl);if(res != CURLE_OK){MessageBox("err to get callbakurl");return;}callBakUrlStr=strPage.c_str();int index=callBakUrlStr.Find("http://hi.baidu.com");int endindex=callBakUrlStr.Find("');",index);callBakUrlStr = callBakUrlStr.Mid(index,endindex-index);//MessageBox(callBakUrlStr);curl_easy_setopt(curl, CURLOPT_URL, callBakUrlStr);res = curl_easy_perform(curl);if(res != CURLE_OK){MessageBox("err to get callbakurl");return;}strPage=strPage.c_str();//CString url="http://hi.baidu.com/com/show/proxy?fun=callback.login.submited&error=0&callback=&index=0&username=guhuisec&phonenumber=電話號碼&mail=郵箱@qq.com&tpl=qing&u=http%253A%252F%252Fhi.baidu.com%252Fgo%252Flogin%253Ffrom_page%253D101%2526from_mod%253D0&needToModifyPassword=0&auth=56731c258b7df9911219e221b96ab5342dca5705d3ce7edd922c03338bdd3c8f57b7fecc8da0&hao123Param=alpQVFdsT2RsQllTRzFSVFV4WExVSkRWR0V6WWtkVWMwOUJTWGx4VkdrdGVFZHNVamQ2VFRKdUxWbC1WMDVTUVZGQlFVRkJKQ1FBQUFBQUFBQUFBQW9hSmh1MUt6NGtaM1ZvZFdselpXTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQVlJQXJNQUFBQU0CcXBYY0FBQUFBZUdsREFBQUFBQUF4TUM0eU15NHlOSml2ZGxDWXIzWlFk";int a=callBakUrlStr.Replace("%","%25");MessageBox(callBakUrlStr);curl_easy_setopt(curl, CURLOPT_URL, callBakUrlStr);//curl_easy_setopt(curl,CURLOPT_COOKIELIST,"domain=.hi.baidu.com");curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L);res = curl_easy_perform(curl);//MessageBox("ok");if(res != CURLE_OK){MessageBox("err to get callbakurl");return;}strPage=strPage.c_str();MessageBox(strPage.c_str());//go homecurl_easy_setopt(curl, CURLOPT_URL, "http://hi.baidu.com/go/login");//curl_easy_setopt(curl,CURLOPT_COOKIELIST,"domain=.hi.baidu.com");curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L);res = curl_easy_perform(curl);//MessageBox("ok");if(res != CURLE_OK){MessageBox("err to get callbakurl");return;}strPage=strPage.c_str();MessageBox(strPage.c_str());curl_easy_cleanup(curl);}curl_global_cleanup(); }
 
 
總結(jié)
以上是生活随笔為你收集整理的百度登陆协议分析!!!用libcurl来模拟百度登陆的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 主动降噪开发之四——多通道算法实现
- 下一篇: 渗透测试-安服面试点总结
