http協議分析網頁

2021-06-21 04:28:37 字數 1440 閱讀 5408

上週接收完成離職同事的活: 對網路中使用者訪問的內容進行監控(某些非法關鍵字)。 需要用到http協議對網頁進行解析。

由於以前同事寫的**過於雜亂,並且在實際環境中,出現以下問題:段錯誤, chunked傳輸方式的網頁無法監測。

專案經理讓我進行重新架構。我簡單學習了一下http協議(rfc2616)。

對於完整的http的解析, 考慮的東西還是很多的,但是針對於我們的需要, 解析的內容不需要面面俱到,只是需要幾個需求:

1. 請求的方法是get方式

2.響應的http的content-type是文字格式,如txt/html,txt/plain

3.響應解析支援固定size的網頁(報文有content-length資訊)和 trunked模式傳送資料的網頁(報文中transfer-encoding:trunked)

實現簡單描述:

1.使用libpcap庫,監聽網絡卡的80埠

libpcap使用方法,可以參考

2. 當監聽到有網路資料時

1)如果遠端埠是80,是http 請求。  用環形緩衝區儲存request 資料報,直到有乙個完整的http 頭(包含請求行和頭資訊,以crlfcrlf結尾), 解析這個完整http頭

2)如果遠端埠不是80, 是http響應。同樣方式快取http資料報,直到有乙個完整http響應頭(包含狀態行和頭資訊,以crlfcrlf結尾),解析這個頭,如果是get方式並且是文字內容,就儲存payload資料

簡單**摘取:

// ip header

payload_len -= sizeof(struct ether_header);

if (payload_len < sizeof(struct iphdr))

// tcp header

payload_len -= sizeof(struct iphdr);

if (payload_len < sizeof(struct tcphdr))

tcpptr = (struct tcphdr*)(packet + sizeof(struct ether_header) +

sizeof(struct iphdr));

// payload

payload_len -= tcpptr->doff * 4;

if (payload_len <= 0)

src_port = ntohs(tcpptr->source);

dest_port = ntohs(tcpptr->dest);

seq = ntohl(tcpptr->seq);

ack_seq = ntohl(tcpptr->ack_seq);

payload = (char*)packet + header->len - payload_len;

if (dest_port == 80)

else

http協議分析

http協議版本 http協議中共定義了八種方法或者叫 動作 來表明對request uri指定的資源的不同操作方式,具體介紹如下 connect http 1.1協議中預留給能夠將連線改為管道方式的 伺服器。雖然http的請求方式有8種,但是我們在實際應用中常用的也就是get和post,其他請求方...

分析HTTP協議

1.簡介 http是hyper text transfer protocol 超文字傳輸協議 的縮寫。它的發展是全球資訊網協會 world wide web consortium 和internet工作小組ietf internet engineering task force 合作的結果,他們 最...

HTTP協議分析

url即統一資源定位符 用來唯一地表示全球資訊網中的某乙個文件 url由協議 主機埠 檔名三個部分構成 get http 1.1 請求行 host 傳送請求時,該頭域是必須的 主要用於指定被請求資源的internet主機和埠號,它通常從http url中提取出來的。http 1.1請求必須包含主機頭...