1. 程式人生 > >【自動回帖器/原理】自動回帖器的原理與實現(一)原理篇

【自動回帖器/原理】自動回帖器的原理與實現(一)原理篇

自動回帖技術

前言:2012.9月,由於某些原因,我開始編寫一個基於Discuz論壇的自動回帖器,這次的小工作讓我對Cookie有了進一步的認識,充分認識到,利用它實在可以做太多的事了~啊哈哈~話不多說~進入主題吧!

0.驗證碼識別

3年前想做的驗證碼識別已經ok了,參考博文:http://blog.csdn.net/xxxxxx91116/article/details/78942753

1.   自動登入

要實現自動回帖,第一個要解決的問題是自動登陸,不知道你上網的時候有沒有想過,為什麼每個網站可以記錄我們的賬戶資訊,知道你是誰?你在做什麼操作?其實一切的一切,都是因為Cookie值,只要每次操作,都發送專屬於你的cookie值,系統就能識別你。下面是可行的3種登陸方法:

A.給出賬號密碼自動登入

優點:最方便,最符合邏輯

缺點:難度較大,要解決識別圖片驗證碼的問題

B.記錄賬號cookie值,利用cookie值自動登陸

優點:簡單

缺點:cookie值有過期時間,每隔一段時間需要更新一次,每次更新需要人為輸入賬號密碼並記錄cookie值

C.每次註冊一堆新賬號

優點:簡單,不需要手工操作

缺點:cookie值有過期時間,每隔一段時間需要重新申請一堆賬號,可能會發生重複的賬號

2.   分析

由上面可知A方法難度很大,那麼在沒有辦法解決驗證碼識別的情況下如何進行自動登入呢?換個角度想,有2種可行的方法,第一種:我們可以手動登陸,然後通過瀏覽器得到cookie值,在程式中寫死即可。第二種:通過觀察,這個網站的賬號申請不需要驗證碼,這樣的話,我們就可以寫程式申請一堆賬號獲取Cookie值,就不要手動檢查瀏覽器了。

由於不同網站的架構不同,所以對每個網站有不同的處理,這裡使用wireshark進行捕包分析,下面模擬各個步驟:

A.     自動登入



圖2-1

Cookie: 3j9D_2132_saltkey=84RMtc5t;3j9D_2132_auth=4c4d3DGYNBfUBovTPBaXKSXWccS%2FRMgyy%2Bcvl1jAGskT7Q5Q0ZBvL8AJz%2FEpZfuzhP1rxvo5OKKQ%2BwSjmTFFDMDtvQ; 3j9D_2132_lastvisit=1346832644;3j9D_2132_visitedfid=305D75;3j9D_2132_smile

=1D1;3j9D_2132_sid=9r1uC2;3j9D_2132_ulastactivity=f76eJegRfs3OW0hfDqcTSQcZf7vXIpdTQpG%2Frz8FycyH99yQpmIV;pgv_pvi=8475715224;pgv_info=ssi=s4413658656;CNZZDATA4398266=cnzz_eid=14352506-1346836061-&ntime=1347792018&cnzz_a=0&retime=1347792021741&sin=&ltime=1347792021741&rtime=3;3j9D_2132_lastact=1347792033%09home.php%09misc; 3j9D_2132_connect_is_bind=0;3j9D_2132_sendmail=1; 3j9D_2132_noticeTitle=1; tjpctrl=1347793900462

圖2-2

報文內容如上圖,可以看到cookie的內容非常的多,由於使用的是第二種方法,所以手動記錄那麼多的cookie很麻煩,於是考慮找出必要的cookie,這裡可以利用chrome瀏覽器來幫忙,開啟瀏覽器的設定,顯示高階設定,內容設定,所有cookie和網站資料,選擇對應的網址,可以看到對應的cookie值,形式如下:



圖2-3

我們可以刪除一些cookie,來測試有哪些cookie是必須的,經過測試後,發現3j9D_2132_auth和3j9D_2132_saltkey是必須的2個cookie變數,也就是報文中只要有這兩個cookie值伺服器就可以識別我們的賬戶。

B.登陸目標帖子的過程

請求:



圖2-4

由上圖可以看出,我們在瀏覽http://www.*******.cn/forum.php?mod=viewthread&tid=54217這個URL的帖子時,各個引數如圖2-4所示,我們只需要在程式碼中構造一個類似的報文即可,但是要注意加上3j9D_2132_auth和3j9D_2132_saltkey這兩個cookie變數。

回覆:


HTTP/1.1 200 OK

Server: nginx/1.2.0

Date: Sun, 16 Sep 2012 12:08:57 GMT

Content-Type: text/html; charset=gbk

Transfer-Encoding: chunked

Connection: keep-alive

Set-Cookie: 3j9D_2132_lastact=1347797336%09forum.php%09viewthread; expires=Mon, 17-Sep-2012 12:08:56 GMT; path=/

Set-Cookie: 3j9D_2132_stats_qc_reg=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/

Set-Cookie: 3j9D_2132_cloudstatpost=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/

Set-Cookie: 3j9D_2132_connect_is_bind=0; expires=Mon, 16-Sep-2013 12:08:56 GMT; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Set-Cookie: xwb_tips_type=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT

Set-Cookie: 3j9D_2132_sid=eeyVey; expires=Mon, 17-Sep-2012 12:08:56 GMT; path=/

Content-Encoding: gzip

48b8

}wSZNk|F4viIG##?HIoH1m^v6Iri(]yHGlLK:got~g_oSWv}}O{oJL>i$z^(~|CCCC=}7LmYoj6gwL>NW55NV#[,$.=chw$y

{mQJ_5#(>jH)8;1>;s~7P3/~(/[email protected] }bOj1

Gi'fL2/H}=AYCbB.B_23p29pZ>Nf=;|I[#[email protected]*3uahi42xbL

4*5%hVO)2ZN5^w2+z^vZ0]jjZQ3qKO!=

+m"g

圖2-5

上圖2-5就是伺服器給出的回覆,主要要關心的是紅色部分,Transfer-Encoding: chunked表示報文長度不固定,Content-Encoding:gzip表示報文內容使用gzip,在這句話後面的48b8表示報文長度,所以接下來的48b8(十六進位制)個位元組是報文的長度,那麼整個網頁資訊就在下面的48b8個位元組中了,獲得報文以後,由於它使用gzip壓縮,我們還要對其進行解壓。

C.回帖的過程

請求:



圖2-6


圖2-7

由圖2-6的request URI可以看出,我們需要知道fid,tid,extra,replysubmit等變數的值,這些值都可以在上一次的帖子原始碼中找到,由圖2-7可以看出我們在回帖的時候包含的報文內容,需要message—回覆內容,posttime---回覆時間,formhash---可以有上一個頁面的原始碼得到,subject為空即可。但是要注意這裡的回帖內容需要進行url編碼。

由上面一個部分可以看出,我們要將gzip格式的資料包解壓縮,這樣才能獲得原始碼。下面是從chrome解析的原始碼中看到的需要的變數:




圖2-8

這樣我們就可以構造一個類似的報文傳送到伺服器,並且伺服器將會顯示我們的回覆。


相關推薦

自動回帖/原理自動回帖原理實現()原理

自動回帖技術 前言:2012.9月,由於某些原因,我開始編寫一個基於Discuz論壇的自動回帖器,這次的小工作讓我對Cookie有了進一步的認識,充分認識到,利用它實在可以做太多的事了~啊哈哈~話不多說~進入主題吧! 0.驗證碼識別 3年前想做的驗證碼識別已經ok了,參

電賽優秀作品集自動循跡小車製作方案

簡單來說自動循跡小車就是集光,機,電於一體的簡易智慧小車。參賽者通過論證,比較,實驗之後,製作出了簡易小車的循跡電路系統,整個系統基於普通玩具小車的機械結構,並利用了小車的底盤,前後輪電機及其自動復原裝置,能夠平穩跟蹤路面黑色軌跡執行。下面是小編辛苦彙總的自動循跡小車作品,涉及了自動循跡小車的電路設

安全牛學習筆記python裝飾

信息安全 python security+ 互聯網 python裝飾器 裝飾器本質上是一個函數,該函數用來處理其他函數,它可以讓其他函數在不需要修改代碼的前提 下增加額外的功能,裝飾器的返回值也是一個函數對象。它經常用於有切面需求的場景,比如:插 入日誌

swoole快速入門5設定定時

swoole提供了類似JavaScript的setInterval/setTimeout非同步高精度定時器,粒度為毫秒級。使用也非常簡單。 程式程式碼 //每隔2000ms觸發一次 swoole_timer_tick(2000, function ($timer_id)

輕鬆前端之旅​CSS選擇中的空格尖括號有何區別?

CSS選擇器中的空格與尖括號有何區別? 例子1: .a .b {     margin: 0; } 空格隔開a和b,選擇所有後代元素。 例子2: .a>.b  {      margin:

設計模式學習筆記迭代模式

迭代器模式,這是一個很好玩的模式。其實迭代器已經存於集合中了。但是呢,我們可以動手寫一個迭代器,並且將其運用在迭代器模式中,而不是在list中。 文章目錄 1.1 定義一個迭代器介面及實現 1.2 我們統計生產的車是這樣的

深度學習原理交叉熵損失函式的實現

交叉熵損失函式 一般我們學習交叉熵損失函式是在二元分類情況下: L = −

目標檢測目標檢測原理實現()

轉載:http://blog.csdn.net/marvin521/article/details/9058735 基於閾值影象處理的目標檢測           從今天起開始要寫一些關於目標檢測的文章,涵蓋從簡單的閾值影象處理檢測、霍夫變換(hough transf

Stimulsoft Reports Flex教程在檢視中顯示報表

下載Stimulsoft Reports Flex最新版本 此示例顯示如何在檢視器中顯示報表。要從程式碼建立和顯示檢視器,您需要呼叫StiViewerFx.initialize() 靜態方法。在應用程式的initialize事件中呼叫此方法: <mx:Application x

Stimulsoft Reports Flex教程在檢視中顯示渲染文件

下載Stimulsoft Reports Flex最新版本 此示例顯示如何在檢視器中顯示呈現的報表文件。要從程式碼建立和顯示檢視器,您需要呼叫StiViewerFx.initialize() 靜態方法。在應用程式的initialize事件中呼叫此方法: <mx:Application

蟲師--系列08效能測試知多少---效能測試工具原理架構

來自:http://www.cnblogs.com/fnng/archive/2012/07/31/2617546.html      作者:蟲師 在效能測試的學習過程中,堅持思想與工具(分開)並行,當前面世面上的效能測試書籍大多把理論與loadrunner融為一體講解

UWP通用應用開發檔案選取、獲取檔案屬性、寫入和讀取、儲存讀取和刪除應用資料

讀取檔案和資料夾名 這一節開始我們將陸續看到UWP通用應用是如何獲取到檔案及資料夾的屬性等資訊,以及如何寫入和讀取資料等,當然了最重要的還是如何儲存讀取和刪除應用的資料。 在Windows上讀取檔名、資料夾名 首先我們在XAML中定義一個Button和

機器學習演算法原理詳細推導實現():線性迴歸

【機器學習】演算法原理詳細推導與實現(一):線性迴歸 今天我們這裡要講第一個有監督學習演算法,他可以用於一個迴歸任務,這個演算法叫做 線性迴歸 房價預測 假設存在如下 m 組房價資料: 面積(m^2) 價格(萬元) 82.35 193 65.00 213 114.20 255 75.

Autofac打標籤模式Aspect攔截

【 Autofac打標籤模式】開源DI框架擴充套件地址: https://github.com/yuzd/Autofac.Annotation/wiki   前提條件 自己new一個物件不能實現攔截器功能,必須得從DI容器拿到的物件才能具備攔截器功能 可以參考 我寫的文章介紹

python測試開發棧帶你徹底搞明白python3編碼原理

在之前的文章中,我們介紹過編碼格式的發展史:[文章傳送門-todo]。今天我們通過幾個例子,來徹底搞清楚python3中的編碼格式原理,這樣你之後寫python指令碼時碰到編碼問題,才能有章可循。 我們先搞清楚幾個概念: 系統預設編碼:指python直譯器預設的編碼格式,在python檔案頭部沒有宣告其他編

14華為HCIE-StorageCache讀寫鏡像&高低水位&二寫盤&三讀寫策略&四讀機制

HCIE storage hostman ------------------------------------重要說明------------------------------------以下部分內容來網絡,部分自華為存儲官方教材具體教材內容請移步華為存儲官網進行教材下載 網絡引用內容

我們一起寫框架MVVM的WPF框架(五)—完結

前言 這篇文章是WPF框架系列的最後一篇,在這裡我想闡述一下我對框架設計的理解。 我對框架設計的理解是這樣的: 框架設計不應該侷限於任何一種設計模式,我們在設計框架時,應該將設計模式揉碎,再重組;這樣設計出來的框架才具有一戰之力。 框架設計應該根據專案團隊成員水平量身定製。 我上

讀書筆記《Linux核心設計實現》程序管理程序排程

大學跟老師做嵌入式專案,寫過I2C的裝置驅動,但對Linux核心的瞭解也僅限於此。Android系統許多導致root的漏洞都是核心中的,研究起來很有趣,但看相關的分析文章總感覺隔著一層窗戶紙,不能完全理會。所以打算系統的學習一下Linux核心。買了兩本書《Linux核心設計與實現(第3版)》和《深入理解Lin

Java-POJO-設計模式JavaEE中的POJO設計模式中多型繼承的衝突

最近看《重構》談到利用OO的多型來優化 if else 和 switch 分支語句,但是我發現OO語法中的多型在使用框架的JavaEE中是無法實踐的。對此,我感到十分的疑惑,加之之前專案中有個“狀態模式”類的模組被頻繁改動的需求折磨要死,又去看了《設計模式》。《設計模式》中也是強調,使

python小課堂專欄python小課堂05 - 基本資料型別字串(重要)

python小課堂05 - 基本資料型別字串篇(重要) 什麼是字串? 題西林壁 作者:蘇軾 橫看成嶺側成峰,遠近高低各不同。 不識廬山真面目,只緣身在此山中。 如上面的詩詞一樣,將其對映到我們計算機程式中,顯然不是前幾張介紹的資料型別,那麼今天就來說下程式設計中