欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

libnids源碼解讀:TCP流重組、IP分片與掃描檢測(cè)的完整路徑

libnids源碼解讀:TCP流重組、IP分片與掃描檢測(cè)的完整路徑 簡(jiǎn)介這份資源是libnids-1.20源碼的深度注釋版適合網(wǎng)絡(luò)安全工程師、C語言開發(fā)者及對(duì)NIDS網(wǎng)絡(luò)入侵檢測(cè)底層實(shí)現(xiàn)感興趣的讀者。libnids基于libpcap捕獲原始數(shù)據(jù)包實(shí)現(xiàn)IP協(xié)議解析與TCP流重組是構(gòu)建入侵檢測(cè)系統(tǒng)的基礎(chǔ)庫。資源對(duì)核心模塊逐一拆解重點(diǎn)剖析IP頭部字段含義、tcp_stream連接結(jié)構(gòu)、序列號(hào)管理add_seq/find_seq以及tcp_reassemble重組主流程并配合大量中文注釋幫助讀者理解分片亂序重組、事件回調(diào)觸發(fā)機(jī)制大幅降低源碼閱讀門檻。壓縮包共65個(gè)文件以C源碼和H頭文件為主同時(shí)包含配置腳本、Makefile、示例程序與API文檔整體僅245KB便于快速下載研讀。目前已有466人學(xué)習(xí)這份資料適合想深入掌握網(wǎng)絡(luò)協(xié)議解析原理、或基于libnids做定制化安全工具和流量分析系統(tǒng)的開發(fā)者。1. libnids 源碼解讀加了大量注釋的版本為什么值得從頭讀到尾libnids 源碼解讀是流量分析和網(wǎng)絡(luò)安全從業(yè)者繞不開的一課它站在底層抓包庫 libpcap 之上把 IP 分片重組、TCP 流重組、端口掃描檢測(cè)三件事封裝成幾個(gè)回調(diào)函數(shù)想自己實(shí)現(xiàn)協(xié)議分析或入侵檢測(cè)前置模塊的人幾乎都會(huì)把它當(dāng)范本。加了大量注釋的 libnids 源碼價(jià)值不在把英文翻譯成中文而在于把三類最容易卡人的邏輯講透了——分片重組的哈希與超時(shí)、tcp_stream 狀態(tài)機(jī)的遷移條件、以及 half_stream 里那個(gè)鏈表型數(shù)據(jù)隊(duì)列。下面的閱讀路徑不綁定某個(gè)具體注釋版本而是把讀這種帶注釋源碼的完整流程重走一遍先搭骨架再攻流重組接著看兩個(gè)容易被跳過的模塊最后用插樁驗(yàn)證理解。適合準(zhǔn)備基于 libnids 做二次開發(fā)、或者想把流重組實(shí)現(xiàn)吃透的開發(fā)者。2. 先讀骨架再看內(nèi)核libnids 的目錄結(jié)構(gòu)、初始化與回調(diào)注冊(cè)機(jī)制帶注釋的源碼最容易犯的錯(cuò)是從第一行順序讀到最后一個(gè)文件。libnids 代碼量不大但文件之間是清晰的流水線關(guān)系抓包庫把原始報(bào)文交進(jìn)來ip_fragment.c 負(fù)責(zé)把分片拼回完整 IP 包tcp_stream.c 負(fù)責(zé)把 TCP 段的字節(jié)按序還原成流scan.c 在邊上盯著異常連接最后統(tǒng)一通過回調(diào)把結(jié)果交給用戶。我建議的順序是先花一個(gè)晚上把 nids.h 里的結(jié)構(gòu)體全部過一遍再讀 nids.c 的初始化然后直接跳進(jìn) tcp_stream.c 的核心循環(huán)。下面按這個(gè)順序拆。2.1 源碼文件地圖哪些值得逐行看哪些可以跳過我一般會(huì)在讀代碼前先建一張文件職責(zé)表避免中途迷路。這張表同樣適用于其它網(wǎng)絡(luò)庫先分清主干和枝葉注釋才能讀得有的放矢。文件職責(zé)閱讀策略nids.h對(duì)外 API、nids_params、tcp_stream/half_stream 等結(jié)構(gòu)體定義精讀幾乎每個(gè)字段都會(huì)被后面的文件引用nids.cnids_init 初始化、參數(shù)默認(rèn)值、pcap 主循環(huán)、回調(diào)分發(fā)精讀先理解入口和出口tcp_stream.cTCP 流重組狀態(tài)機(jī)、seq 管理、數(shù)據(jù)隊(duì)列拼接逐行讀這是整個(gè)庫的重心ip_fragment.cIP 分片重組、超時(shí)和內(nèi)存上限重點(diǎn)讀哈希邏輯和回收邏輯scan.c端口掃描檢測(cè)、半開連接統(tǒng)計(jì)讀閾值判定和鏈表維護(hù)即可checksum.cIP/TCP/UDP 校驗(yàn)和計(jì)算略讀理解用途即可rtp.cRTP 流識(shí)別輔助用到再看不影響主線tcp_stream.c 和 nids.h 是注釋應(yīng)該最密集的地方因?yàn)樗鼈儬砍稜顟B(tài)遷移和內(nèi)存所有權(quán)。checksum.c、rtp.c 這種自包含文件注釋只需要回答這段在算什么就夠了。我自己的習(xí)慣是第一個(gè)晚上只看 nids.h把每個(gè)結(jié)構(gòu)體字段在旁邊寫一句誰初始化、誰修改、誰釋放第二天再看實(shí)現(xiàn)文件時(shí)大部分代碼已經(jīng)能猜出意圖。2.2 nids_init() 初始化流程參數(shù)默認(rèn)值、抓包過濾與主循環(huán)nids_init 是唯一入口。常見實(shí)現(xiàn)步驟是檢查用戶是否改過 nids_params設(shè)置默認(rèn)抓包過濾器用抓包庫打開設(shè)備并編譯過濾器再初始化分片表和掃描鏈表。初始化成功返回 0失敗返回 -1錯(cuò)誤信息放在全局錯(cuò)誤緩沖區(qū)里。最小可用程序長(zhǎng)這樣#include nids.h #include stdio.h /* my_tcp_cb 先用空實(shí)現(xiàn)占位2.3 節(jié)給出完整版本 */ static void my_tcp_cb(struct tcp_stream *stream, void **userdata) { (void)stream; (void)userdata; } int main(void) { /* nids_init 失敗時(shí)返回 -1錯(cuò)誤信息在 nids_errbuf */ if (nids_init() -1) { fprintf(stderr, nids_init failed: %s\n, nids_errbuf); return -1; } /* 注冊(cè) TCP 回調(diào)后續(xù)每條流的 JUST_EST/DATA/CLOSE 都會(huì)進(jìn)來 */ nids_register_tcp(my_tcp_cb); /* 主循環(huán)不斷從抓包句柄取包并驅(qū)動(dòng)內(nèi)部狀態(tài)機(jī) */ while (1) { nids_next(); } return 0; }這里的幾個(gè)點(diǎn)需要特別說明。nids_errbuf 是全局緩沖區(qū)初始化失敗時(shí)直接打印它比猜原因快得多。nids_register_tcp 必須在 nids_init 成功之后、nids_next 循環(huán)之前調(diào)用注冊(cè)只是往內(nèi)部鏈表掛一個(gè)函數(shù)指針但放錯(cuò)位置會(huì)導(dǎo)致回調(diào)永遠(yuǎn)不被觸發(fā)。nids_next 每調(diào)用一次就處理一批從抓包句柄取到的報(bào)文回調(diào)正是在這個(gè)函數(shù)內(nèi)部被觸發(fā)的所以回調(diào)函數(shù)里絕對(duì)不能再次調(diào)用 nids_next這個(gè)坑在第 5 章單獨(dú)展開。提示nids_params 是全局結(jié)構(gòu)體所有改動(dòng)必須在 nids_init 之前完成初始化之后再改不會(huì)生效。和初始化直接相關(guān)的參數(shù)集中在 nids_params 里常見版本下關(guān)鍵字段如下默認(rèn)值以你手頭 nids.h 為準(zhǔn)字段含義常見默認(rèn)值n_tcp_streams可同時(shí)跟蹤的 TCP 流數(shù)量上限超出后新連接會(huì)被拒絕8192n_hosts用于掃描檢測(cè)的主機(jī)表上限32768n_scan_lines觸發(fā)掃描告警所需的半開連接數(shù)300n_scan_hosts觸發(fā)告警涉及的目的主機(jī)數(shù)1000n_pcap_filter自定義過濾表達(dá)式NULL 表示不過濾抓全部NULL把這些字段調(diào)大能降低高流量下的丟流概率但會(huì)直接抬高內(nèi)存占用。tcp_stream 內(nèi)部還有 sk_buff 隊(duì)列每條流在擁塞時(shí)可能積壓幾十個(gè)數(shù)據(jù)節(jié)點(diǎn)所以把 n_tcp_streams 從 8192 調(diào)到 16384 時(shí)峰值內(nèi)存往往不是線性翻倍要實(shí)測(cè)調(diào)整。2.3 三類回調(diào)注冊(cè)TCP、UDP、IP 各自在什么時(shí)機(jī)觸發(fā)libnids 對(duì)上層只暴露三種注冊(cè)函數(shù)nids_register_tcp、nids_register_udp、nids_register_ip。TCP 回調(diào)拿到的 tcp_stream 包含雙向的 half_stream 和當(dāng)前事件狀態(tài)是最常用的入口UDP 回調(diào)直接給 tuple4四元組、數(shù)據(jù)指針和長(zhǎng)度IP 回調(diào)給重組后的 IP 包適合自己解析非 TCP/UDP 協(xié)議。注意區(qū)分IP 回調(diào)在分片重組完成后觸發(fā)一次UDP/TCP 回調(diào)則是在各自協(xié)議層處理后觸發(fā)同一個(gè)包可能同時(shí)走 IP 回調(diào)和 UDP 回調(diào)?;卣{(diào)的第二個(gè)參數(shù) void **userdata 是 libnids 最有用的設(shè)計(jì)它允許給每條流掛一個(gè)私有上下文從建立到關(guān)閉全程跟著走。常見做法是在剛剛建立時(shí)分配、在關(guān)閉時(shí)釋放/* TCP 回調(diào)用 userdata 保存每條流的私有計(jì)數(shù)器 */ static void tcp_cb(struct tcp_stream *stream, void **userdata) { if (stream-nids_state NIDS_JUST_EST) { /* 新連接建立給這條流掛一個(gè)計(jì)數(shù)器 */ *userdata calloc(1, sizeof(unsigned long)); } else if (stream-nids_state NIDS_DATA) { /* 有序數(shù)據(jù)到達(dá)可以安全讀 data 鏈 */ unsigned long *count *userdata; if (count ! NULL) { (*count); } } else if (stream-nids_state NIDS_CLOSE) { /* 正常關(guān)閉釋放私有上下文防止逐流泄漏 */ free(*userdata); *userdata NULL; } }參數(shù)說明stream-nids_state 是回調(diào)被觸發(fā)的唯一依據(jù)不要試圖在回調(diào)里通過別的字段反推事件類型。userdata 的賦值必須用 *userdata它內(nèi)部對(duì)應(yīng) half_stream 上的一個(gè)保留字段整個(gè)生命周期里 libnids 不會(huì)碰它完全由用戶管理?;卣{(diào)簽名是 void不能通過返回值報(bào)錯(cuò)所以 calloc 失敗的情況要在回調(diào)內(nèi)部自己處理現(xiàn)實(shí)代碼里至少要判空。我見過不少人在 NIDS_DATA 里只讀 data 鏈、不處理關(guān)閉時(shí)的殘留數(shù)據(jù)后面會(huì)在連接結(jié)束時(shí)丟尾巴這個(gè)坑在第 5 章展開。3. 深入 TCP 流重組tcp_stream 狀態(tài)機(jī)、數(shù)據(jù)隊(duì)列與注釋應(yīng)該寫在哪TCP 流重組是 libnids 存在的意義。網(wǎng)絡(luò)是全雙工的兩端各自有序列號(hào)空間包會(huì)亂序、重傳、分片還有 32 位序列號(hào)回繞。libnids 把這一切收斂成兩個(gè) half_stream 和一個(gè)狀態(tài)位任何時(shí)刻你只需要判斷當(dāng)前事件是什么然后去讀對(duì)應(yīng)方向的數(shù)據(jù)鏈。這一章的讀法決定了你能不能真正吃透源碼。3.1 tcp_stream 與 half_stream為什么 data 是一條鏈表而不是一塊連續(xù)內(nèi)存在 nids.h 里能找到 tcp_stream 和 half_stream 的定義。為了講清楚我做了字段裁剪完整定義以你手上的頭文件為準(zhǔn)struct half_stream { char state; /* 本方向狀態(tài)SYN/RST/FIN 等階段的標(biāo)志 */ u_int ack_seq; /* 對(duì)端確認(rèn)號(hào)用于亂序判斷 */ struct sk_buff *data; /* 已經(jīng)按序排列、可以安全讀的數(shù)據(jù)鏈 */ struct sk_buff *queue; /* 亂序到達(dá)、等待拼裝的數(shù)據(jù)鏈 */ int offset; /* 相對(duì)連接起始 seq 的偏移 */ void *nids_state; /* 用戶私有數(shù)據(jù)即 void** userdata 的載體 */ };這里最反直覺的是 data 的類型是指針不是數(shù)組。libnids 的重組結(jié)果是一串 sk_buff 節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)攜帶一段已經(jīng)排好序的載荷節(jié)點(diǎn)之間用 next 指針連接。這樣做的原因是報(bào)文到達(dá)時(shí)天然是一段一段的用鏈表可以避免頻繁的大塊 memcpy代價(jià)是讀取時(shí)必須自己遍歷/* 把一端重組好的數(shù)據(jù)鏈全部寫入文件 */ void dump_half_stream(struct half_stream *half, FILE *fp) { struct sk_buff *skb half-data; while (skb ! NULL) { fwrite(skb-data, 1, skb-len, fp); skb skb-next; } }邏輯說明skb-data 指向這段載荷的起始位置skb-len 是這段載荷的長(zhǎng)度兩者必須配對(duì)使用。skb 里的載荷已經(jīng)剝掉了 IP 頭和 TCP 頭是純應(yīng)用層字節(jié)可以直接寫文件。參數(shù)說明不要在循環(huán)里修改 skb 的字段也不要試圖 free 鏈表節(jié)點(diǎn)sk_buff 內(nèi)存由 libnids 內(nèi)部統(tǒng)一回收你只負(fù)責(zé)讀。讀完之后libnids 會(huì)通過狀態(tài)機(jī)推進(jìn)把已讀節(jié)點(diǎn)釋放但前提是你在正確的事件狀態(tài)下讀——這就是 NIDS_DATA 狀態(tài)存在的意義。3.2 狀態(tài)機(jī)流轉(zhuǎn)與 seq 溢出比較注釋最密集的區(qū)域tcp_stream.c 的核心是一個(gè)不斷被 pcap 回調(diào)驅(qū)動(dòng)的狀態(tài)機(jī)。對(duì)上層來說只需要關(guān)心五個(gè)事件nids_state 宏觸發(fā)時(shí)機(jī)處理建議NIDS_JUST_EST連接建立完成分配私有上下文NIDS_DATA有按序數(shù)據(jù)可讀遍歷 data 鏈NIDS_CLOSE連接正常關(guān)閉讀完殘留數(shù)據(jù)后釋放上下文NIDS_RESET收到 RST立即清理NIDS_TIMED_OUT超時(shí)未活動(dòng)被回收清理并上報(bào)讀 tcp_stream.c 時(shí)最需要注釋輔助的地方是序列號(hào)比較。TCP 的 seq 是 32 位無符號(hào)數(shù)會(huì)從 0xffffffff 回繞到 0所以源碼里所有誰在前面的判斷都不能寫 a b而是用差值符號(hào)判斷/* 判斷 a 是否嚴(yán)格晚于 b兼容 32 位回繞 */ static inline int seq_after(u32 a, u32 b) { return (s32)(a - b) 0; }邏輯說明a - b 在無符號(hào)下得出的是環(huán)形距離強(qiáng)轉(zhuǎn)成有符號(hào)后正數(shù)表示 a 在 b 的順時(shí)針方向 0 到 2^31-1 范圍內(nèi)即 a 更新。參數(shù)說明兩個(gè) seq 的差值超過 2^31 時(shí)這個(gè)函數(shù)會(huì)判斷失敗這是 TCP 協(xié)議本身的限制不是庫的缺陷注釋里如果看到這類函數(shù)值得在旁邊補(bǔ)一句為什么不能用大于號(hào)。圍繞這個(gè)比較函數(shù)tcp_stream.c 會(huì)做三件事判斷新來的段是否重復(fù)、是否亂序、能否推進(jìn) ack_seq。每來一個(gè)段先檢查它是不是已經(jīng)確認(rèn)過的舊數(shù)據(jù)是就丟棄再檢查 seq 是否落在當(dāng)前窗口右側(cè)是就掛進(jìn) queue否則拼進(jìn) data 鏈并嘗試把 queue 里能拼的節(jié)點(diǎn)一并帶走。這三步在整個(gè)文件里反復(fù)出現(xiàn)讀通一次后面所有分支都能看懂。3.3 加注釋的正確姿勢(shì)只寫為什么不寫是什么既然拿到的是加了大量注釋的源碼你遲早也會(huì)想自己補(bǔ)注釋。我的經(jīng)驗(yàn)是注釋的價(jià)值密度取決于它寫了什么層級(jí)。把代碼翻譯成中文是最低級(jí)的注釋比如指針指向下一個(gè)節(jié)點(diǎn)真正有用的是解釋分支為什么存在、內(nèi)存由誰負(fù)責(zé)、狀態(tài)為什么這樣遷移??磧山M示例/* 低價(jià)值注釋復(fù)述代碼刪掉也不影響理解 */ skb skb-next; /* 指針指向下個(gè)節(jié)點(diǎn) */ /* 高價(jià)值注釋解釋不可見的前置條件 */ if (skb-len 0) { /* * 長(zhǎng)度為 0 的段是合法探測(cè)包可能攜帶 PSH 標(biāo)志 * 不能因?yàn)闆]數(shù)據(jù)就丟掉否則對(duì)端永遠(yuǎn)等不到 ACK */ }添加注釋的操作路徑第一遍只讀主干函數(shù)把每個(gè)全局變量的生命周期寫在聲明旁邊第二遍針對(duì)所有 if 分支提問什么情況會(huì)走到這里答不上來的就是值得寫注釋的地方第三遍用調(diào)試器驗(yàn)證兩三個(gè)分支把驗(yàn)證結(jié)論補(bǔ)成注釋。這樣產(chǎn)出的注釋是對(duì)行為的記錄而不是從博客抄來的轉(zhuǎn)述。帶注釋的源碼讀起來快但注釋不是權(quán)威代碼才是遇到注釋和邏輯打架時(shí)以代碼行為準(zhǔn)。4. IP 分片重組與端口掃描檢測(cè)兩個(gè)容易被跳過的附屬模塊很多人把 tcp_stream.c 讀完就覺得 libnids 已經(jīng)掌握但 ip_fragment.c 和 scan.c 才是把庫變成系統(tǒng)的部分。前者保證重組數(shù)據(jù)完整后者提供安全檢測(cè)能力。它們各自獨(dú)立、不依賴 TCP 狀態(tài)機(jī)非常適合用來練習(xí)獨(dú)立讀代碼和寫注釋。4.1 ip_fragment.c分片哈希表的 key、上限與超時(shí)回收IP 分片在網(wǎng)絡(luò)上會(huì)亂序到達(dá)libnids 必須把它們收集齊再交給上層。ip_fragment.c 的做法是維護(hù)一張分片表先到達(dá)的分片以源地址、目的地址、協(xié)議類型和 IP 標(biāo)識(shí)符組成的聯(lián)合 key 建立條目后續(xù)分片按 offset 掛到對(duì)應(yīng)條目收齊后拼成一個(gè)完整 IP 包交給 nids_register_ip 注冊(cè)的 IP 回調(diào)。不分片的包不會(huì)進(jìn)入這張表直接放行。分片表在常見實(shí)現(xiàn)里用哈希桶組織桶的數(shù)量寫在源碼頭文件里是編譯期常量。兩個(gè)內(nèi)存保護(hù)機(jī)制必須理解一是每個(gè)條目有最大分片數(shù)限制超過就丟棄整個(gè)條目二是條目不收齊也會(huì)超時(shí)超時(shí)后整條釋放防止惡意分片把內(nèi)存打滿。這兩個(gè)限制在源碼里通常是宏和定時(shí)回調(diào)注釋里應(yīng)該標(biāo)出誰在回收、回收條件是什么。讀這個(gè)文件時(shí)最容易踩的坑不在代碼里而在調(diào)用方如果你改了 nids_params 的過濾串把表達(dá)式寫成了只保留特定端口那么非首個(gè)分片可能被過濾掉重組永遠(yuǎn)無法完成。具體表現(xiàn)為所有大包都收不全小包正常。解決方法是過濾表達(dá)式里保留 ip 關(guān)鍵字或者直接用默認(rèn)的不過濾配置。4.2 scan.c半開連接統(tǒng)計(jì)、n_scan_lines 與告警觸發(fā)條件scan.c 實(shí)現(xiàn)的是最樸素的端口掃描檢測(cè)統(tǒng)計(jì)一個(gè)源 IP 發(fā)起了多少條沒有完成握手的連接。新連接建立時(shí)scan.c 在內(nèi)部鏈表記一筆連接最終完成或超時(shí)對(duì)應(yīng)記錄被移除當(dāng)某個(gè)源 IP 的記錄數(shù)超過 n_scan_lines、且涉及的目的主機(jī)數(shù)超過 n_scan_hosts就判定為掃描行為并通知上層。這里的沒完成握手包括 SYN 后沒等到 SYNACK以及 SYNACK 后沒等到 ACK 兩種情況源碼里是兩段獨(dú)立的分支。因?yàn)槟J(rèn)值對(duì)真實(shí)流量不一定合適二次開發(fā)時(shí)基本都要改這兩個(gè)閾值。改法是在初始化之前操作全局參數(shù)#include nids.h #include string.h int main(void) { /* 先清空參數(shù)避免殘留默認(rèn)值干擾 */ memset(nids_params, 0, sizeof(nids_params)); /* 高流量?jī)?nèi)網(wǎng)環(huán)境半開超過 500 才告警 */ nids_params.n_scan_lines 500; /* 單源 IP 掃描超過 100 臺(tái)主機(jī)才算攻擊 */ nids_params.n_scan_hosts 100; /* 并發(fā)流上限抬高避免大流量下誤拒絕 */ nids_params.n_tcp_streams 16384; if (nids_init() -1) { return -1; } /* 后續(xù)注冊(cè)回調(diào)并進(jìn)入主循環(huán) */ return 0; }參數(shù)說明n_scan_lines 調(diào)大能顯著降低誤報(bào)但會(huì)放過慢速掃描慢速掃描本來就是靠拉長(zhǎng)時(shí)間線繞過檢測(cè)這是所有閾值方案的共同取舍。n_scan_hosts 的作用是過濾單主機(jī)高頻連接的正常業(yè)務(wù)比如客戶端連同一臺(tái)服務(wù)器的多個(gè)端口此時(shí) lines 很高但 hosts 很小不會(huì)被誤判。memset 之后再逐個(gè)賦值是最穩(wěn)妥的初始化姿勢(shì)因?yàn)椴煌姹緦?duì)默認(rèn)參數(shù)的定義不完全一樣直接改某個(gè)字段可能踩到未初始化數(shù)據(jù)。4.3 checksum.c 與 rtp.c快速略讀的兩個(gè)文件checksum.c 只做一件事計(jì)算 IP、TCP、UDP 的校驗(yàn)和。它不涉及狀態(tài)不涉及內(nèi)存所有權(quán)是典型的自包含文件。讀它的價(jià)值在于理解 libnids 默認(rèn)不做校驗(yàn)和驗(yàn)證——校驗(yàn)和錯(cuò)誤的包依然會(huì)進(jìn)入回調(diào)校驗(yàn)職責(zé)被留給上層。這是性能考量抓包分析場(chǎng)景里通常不關(guān)心硬件已經(jīng)過濾掉的壞包。rtp.c 是另一個(gè)可選模塊用于在 UDP 流量里識(shí)別 RTP 流。它依賴 UDP 回調(diào)傳入的數(shù)據(jù)通過 RTP 頭特征做判定。如果你不做音視頻流量分析完全可以跳過如果要做先讀它的入口函數(shù)再對(duì)照協(xié)議頭格式逐個(gè)字段看。這兩個(gè)文件是練習(xí)帶注釋閱讀法的好素材文件短、無外部依賴適合驗(yàn)證你能否在半小時(shí)內(nèi)把代碼邏輯給別人講清楚。5. 避坑清單讀 libnids 源碼與二次開發(fā)時(shí)最常見的 4 個(gè)坑帶注釋源碼讀得再熟動(dòng)手寫程序時(shí)該翻車還是會(huì)翻車。下面四個(gè)坑是我在幾個(gè)用 libnids 搭的模擬項(xiàng)目里反復(fù)踩過的全部按現(xiàn)象、原因、解決三段寫后面做二次開發(fā)時(shí)可以直接對(duì)照。5.1 在回調(diào)里調(diào)用 nids_next() 導(dǎo)致循環(huán)重入現(xiàn)象程序運(yùn)行幾秒后段錯(cuò)誤崩潰棧顯示在回調(diào)函數(shù)里反復(fù)調(diào)用同一地址。原因nids_next() 內(nèi)部調(diào)用抓包回調(diào)去處理報(bào)文而回調(diào)執(zhí)行時(shí)又再次調(diào)用 nids_next()形成遞歸。libnids 內(nèi)部沒有重入保護(hù)共享緩沖區(qū)被上下兩層同時(shí)讀寫最終踩到野指針。解決回調(diào)里只記錄事件、緩存數(shù)據(jù)絕對(duì)不調(diào)用 nids_next()。需要事件驅(qū)動(dòng)時(shí)用標(biāo)志位在主循環(huán)里輪詢static volatile int has_data 0; void my_tcp_cb(struct tcp_stream *stream, void **userdata) { /* 只在回調(diào)里置標(biāo)志具體處理挪到主循環(huán) */ has_data 1; } int main(void) { /* 初始化與注冊(cè)省略 */ while (1) { nids_next(); if (has_data) { /* 在這里讀數(shù)據(jù)鏈安全 */ has_data 0; } } }邏輯說明nids_next 返回后回調(diào)已全部執(zhí)行完此時(shí)再處理數(shù)據(jù)不會(huì)有重入問題。參數(shù)說明has_data 用 volatile 修飾是因?yàn)榛卣{(diào)在同一個(gè)線程內(nèi)被觸發(fā)但編譯器可能把循環(huán)內(nèi)對(duì)標(biāo)志位的重復(fù)讀取優(yōu)化掉加 volatile 是必要的防御。5.2 連接關(guān)閉后還有數(shù)據(jù)滯留在隊(duì)列里現(xiàn)象用 NIDS_DATA 狀態(tài)把數(shù)據(jù)寫文件文件尾部總是缺一段而且缺的字節(jié)數(shù)不固定。原因TCP 關(guān)閉時(shí)攜帶 FIN 的段可能同時(shí)帶著最后一批數(shù)據(jù)。libnids 在 NIDS_DATA 階段只送出了已排好序的數(shù)據(jù)最后一批數(shù)據(jù)還掛在 stream 的 queue 里等拼裝然后狀態(tài)直接切到 NIDS_CLOSE。只在 NIDS_DATA 里讀數(shù)據(jù)必然丟尾巴。解決在 NIDS_CLOSE 和 NIDS_RESET 分支里對(duì) client 和 server 兩側(cè)的 data 鏈與 queue 都做一次遍歷把剩余字節(jié)取出后再釋放私有上下文。注意 queue 里的數(shù)據(jù)可能是亂序的關(guān)閉時(shí)能讀多少算多少不要強(qiáng)求重組完整度。5.3 把 half_stream.data 當(dāng)連續(xù)內(nèi)存讀導(dǎo)致越界現(xiàn)象解析出的協(xié)議字段錯(cuò)位偶爾讀到垃圾數(shù)據(jù)嚴(yán)重時(shí)崩潰。原因data 是 sk_buff 鏈表每個(gè)節(jié)點(diǎn)長(zhǎng)度不同節(jié)點(diǎn)之間不是連續(xù)地址。用數(shù)組下標(biāo)去訪問 skb-data 范圍之外越界讀的是下一個(gè)節(jié)點(diǎn)或已釋放內(nèi)存行為完全不可預(yù)測(cè)。解決嚴(yán)格按鏈表遍歷或者自己拼連續(xù)緩沖。拼緩沖時(shí)先遍歷一遍統(tǒng)計(jì)總長(zhǎng)度再一次性分配最后逐個(gè)節(jié)點(diǎn)拷貝。注意在 NIDS_DATA 事件里 data 鏈?zhǔn)欠€(wěn)定的但事件返回后節(jié)點(diǎn)可能被復(fù)用所以讀到就要立即處理或拷貝別把指針存起來等下次回調(diào)再用。5.4 注釋與代碼版本脫節(jié)按注釋找字段找不到現(xiàn)象按注釋寫的行號(hào)或字段名去源碼里找找不到甚至編譯報(bào)錯(cuò)。原因帶注釋的版本可能基于較舊源碼后續(xù)某次重構(gòu)把 half_stream 的字段挪了位置、改了名字注釋沒有同步更新。把注釋當(dāng)權(quán)威索引就會(huì)踩空。解決拿到注釋后先看版本記錄確認(rèn)基線版本讀到關(guān)鍵結(jié)構(gòu)體時(shí)用頭文件里的實(shí)際定義去核對(duì)發(fā)現(xiàn)不一致就以代碼為準(zhǔn)并在注釋旁標(biāo)注與當(dāng)前版本不一致待更新。版本管理工具的 blame 命令能快速定位某行注釋最后一次修改的上下文是排查這類問題的首選手段。6. 驗(yàn)證你的理解用最小回調(diào)程序加調(diào)試器插樁把狀態(tài)機(jī)跑一遍讀源碼的最終檢驗(yàn)標(biāo)準(zhǔn)是你能預(yù)測(cè)程序的下一步行為。我的習(xí)慣是寫一個(gè)最小回調(diào)程序把所有狀態(tài)遷移打印出來再用調(diào)試器在關(guān)鍵函數(shù)下斷點(diǎn)確認(rèn)自己的理解。先寫一個(gè)只打印狀態(tài)的程序#include nids.h #include stdio.h static const char *state_str(int s) { switch (s) { case NIDS_JUST_EST: return JUST_EST; case NIDS_DATA: return DATA; case NIDS_CLOSE: return CLOSE; case NIDS_RESET: return RESET; default: return OTHER; } } void cb(struct tcp_stream *stream, void **userdata) { printf(state%s client.state%c server.state%c\n, state_str(stream-nids_state), stream-client.state, stream-server.state); } int main(void) { if (nids_init() -1) { return -1; } nids_register_tcp(cb); while (1) { nids_next(); } return 0; }編譯命令cc -g -o state_demo state_demo.c -lnids -lpcap。前提是環(huán)境里已經(jīng)裝好 libnids 的開發(fā)庫和抓包庫。跑起來之后在本地用任意 TCP 客戶端連一個(gè)回環(huán)服務(wù)發(fā)幾字節(jié)數(shù)據(jù)再關(guān)閉屏幕上應(yīng)該依次出現(xiàn) JUST_EST、DATA、CLOSE主動(dòng)斷開時(shí)出現(xiàn) RESET??吹竭@個(gè)序列說明你對(duì)回調(diào)觸發(fā)時(shí)機(jī)的理解是對(duì)的。接著用調(diào)試器驗(yàn)證內(nèi)部狀態(tài)機(jī)。在 tcp_stream.c 的入口函數(shù)處下斷點(diǎn)每次停下打印 stream 指針和當(dāng)前狀態(tài)然后單步跟蹤一個(gè)段從進(jìn)入到拼裝到 data 鏈的完整路徑。重點(diǎn)觀察亂序包故意讓客戶端先發(fā)兩個(gè)不連續(xù)的段看第二個(gè)段先掛到 queue隨后第一個(gè)段到達(dá)時(shí)把 queue 里的節(jié)點(diǎn)帶走。這一步走通seq 比較和隊(duì)列拼接就徹底明白了。我自己的教訓(xùn)是讀這種系統(tǒng)級(jí) C 源碼光靠看注釋容易產(chǎn)生我懂了的錯(cuò)覺真正卡住我的總是內(nèi)存所有權(quán)和狀態(tài)遷移的邊界條件。現(xiàn)在每讀完一個(gè)模塊我都會(huì)寫一個(gè)十行左右的觸發(fā)程序去驗(yàn)證邊界驗(yàn)證不過的地方回源碼重新看反復(fù)兩三輪之后才敢說掌握。希望這篇 libnids 源碼解讀的閱讀路徑能幫你少走幾個(gè)晚上的彎路希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香综合网| 五月天激情啪啪| 久久六月婷婷| 国产超碰在线| 日日操夜夜爽| 五月四色婷婷| 狠狠色婷婷在线| 热久综合| 99爱精品| 亚洲精品亚洲人成人网| 特级西西4444www无码| 91狠狠色丁香| 韩国不卡AC视频| 91碰超| ,99视频久久| 97碰91| 色婷婷九月| 开心五月婷婷在线视频免费观看| 91操人视频| A片试看50分钟做受视频| 五月综合色| 中文字幕婷婷五月天| 在线不卡的视频| 99色综合| 99国产精品久久久久久久久久久| 婷婷久久色| 五月丁香婷婷六月| 日屌日日操日日色| 久狠日av| 五月天婷婷人妻| 99热视| 成人五月天丁香| 在线中文字幕免费视频| 久久久久久久11111111111| 九月激情网| 影音先锋人妻出差| 激情网开心网| 国产成人+综合亚洲+天堂| 深爱五月婷婷| 99热网站| 中文成人在线| 五月综合激情啪啪啪啪啪| 色综合五月天| 九九色热| 裸体做A爰片毛片A片免费| 色色色图| 久久伊人大香蕉| 人妻久久婷婷| 久久丁香| 欧洲色| 五月天婷婷免费| 亚洲最大激情无码| 伊人婷婷五月天| 婷婷色片| 午夜丁香婷婷| 激情五月天婷婷| 色婷天天| 婷婷伊人| 99久久户外勾搭| 性爱视频久久| 香蕉曰比| 欧美操逼天堂| 4399成人黄A片| 91vip在线观看| 人妻久久婷婷| 国产阿姨日皮艹逼内射视频| 欧美色色色| 99精品国产热久久91色欲| 七七色色综合| 日本在线视频播放91| 7777精品伊人久久久大香线蕉最新版| 丁香狠狠色婷婷| 超碰精品国产首页| 色噜噜狠狠色综合AV兰草影视| 4399亚洲视频| 丁香婷婷综合五月天| 丁香无五月网| 六月婷婷在线视频| 婷婷综合网| 99精品热| 婷婷99视频全集高清| 五月做爱| 色噜噜狠狠色综合无码久久欧美| 欧美毛片www| 热中文字幕| 日韩成人免费电影| 婷婷五月精品中文字幕| 久久精品视频99| 九九热这里| 日本色色网| 99re在线播放| 色色影院黄大片| 五月丁香六月综合基地| 五月婷婷免费视频| 91久久久久久久| 人人草人人爱| 91啪啪啪啪| 欧美一级色| 色婷婷丁香五月高清在线| 激情五月色综合国产精品| 99热精品在线免费观看| www.色婷婷.com| 成人 在线 日韩| 色五月婷婷基地| 五月天综合| 99人妻碰碰久久久禁片| 五月久久婷婷天堂视频| 狠狠色丁香99| 亚洲中文字幕av| 天天干天天拍| 成人网在线视频| 色五月激情视频在线综合| 亚洲 激情 中文| 天天色综合网吨吧| 五月婷婷丁香五月| 婷婷伊人75| 天天搽天天射| 丁香婷婷激情| www.韩日视频| 激情涩涩网| 色婷婷九月| 久久久无码精品成人A片小说 | 亚洲午夜Av| 五月总合激情网| 久久久精品人妻录| 99久久久99久久91熟女| 婷婷五月电影院| 亚洲国产成人在线| 色九月丁香婷婷蜜桃在线观看| 婷婷精品免费久久| 99热8| 久热伊人| 久久综合性| 五月宗合激情网| 九九人人操| 免费在线观看av网站| 99久热在线精品| 五月天成人手机在线视频| 九九成人视频| 色碰97| 99爱在线| 99A片| 91丨九色熟女丨首页| 五月天无码视屏播放| 天天澡天天狠天天天做| 曰本aaaaaa丈片| 成人va在线观看视频| 99热九九热| 日韩精品AV一区二区三区| 五月婷婷六月综合| 日韩五月丁香| 色综啪啪啪啪啪啪| 欧美激情综合色综合| 五月丁香综合啪啪| 丁香婷婷精品视频| 天天插天天插| 深爱激情网五月| 丁香五月影院| 九九AV在线| 国内久久婷婷| 停停五月丁香| 1024亚洲无码| 天天舔日日肏夜夜爽| 97人妻碰碰中文无码久热丝袜| 婷婷欧美激情综合| 色五月超碰| 婷婷之玖玖| 狠狠色综合网站| 五月丁香婷婷综合| 激情五月综亚网| 婷香五月激情视频| 五月丁香激情五月天| 日韩在线99| 婷婷五月色花丁香社区| 婷婷色六月| 91久久网站| 久久精彩视频99| 国产精品天天狠天天看| 色婷婷九月综合| AA片在线观看视频在线播放| 婷婷综合激情五月综合| 丁香影院五月综合| 99亚州综合精品成人网| 久久草中文日韩欧美| 98永久精品| 久婷婷五月天影院| 激情久久综合| 天天五月香欧美| 久久婷婷伊人| 色五月天在线| 久久与婷婷| 99人人精品| 婷婷丁香十月| www999日韩精品| 亚洲99在线| 操日视频| 狠狠爱综合| 国产伊人五月天| 久热伊人| 色婷五月天网站| 97夫妻超碰| 丁香五月婷婷激情中文| 91久久综合亚洲鲁鲁五月天| 久热91| 色婷婷六月精品| 欧美一级a | 色色婷婷丁香| 亚洲综合久| www.99热| 天天橾夜夜爽| 久热爱大香蕉在线蜜臀悦色| 欧美三级欧美一级| 综合狠狠五月婷婷| 激情久久月| 婷婷午夜精品久久久| av九九| 欧美S码亚洲码精品M码| 99热国产免费| 99热久只有| 99久久九九视频| 亚洲最大五月六月丁香婷婷| 久9热在线视频| 开心五月婷婷| 国产精品视频| 色婷婷狠狠| 99热99这里有免费的精品| 国产在线视频1234| 超碰碰碰碰| 开心五月激情五月丁香五月婷婷| 丁香婷婷五月天激情四射| 九九碰九九爱97超碰| 色情激情五月| 九热视频在线精品15| 天天干天天干天天干| 色高清无码视频| 99热插| 久久女婷| 99热免费精品| 另类的婷婷| av狠狠操| 五月激情婷婷播播开心| 五月婷婷免费视频| 夜夜夜夜做天天天做无码视频| 9精品在线| 欧美色色日韩| 久久久九九视频精品18| 婷婷久久婷婷色五月| 99精品视频在线观看| 国产成人99久久亚洲综合精品| 五月婷婷在线综合| 天天狠狠六月婷丁香影院| 好吊丝aV| AV天堂婷婷五月天| 婷婷激情五月综合| 激情五月婷婷五月丁香五月开心五月| 天天天天天日| 可以看的AV| 99er热精品视频| www.亚洲激情| 久久九九热视频| 婷婷丁香五月亚洲综合网在线视频观看| 综合亚洲五月天| 99热福利| 国产视频久色| 激情美女五月天| 97色色色色| 六月婷婷七月丁香| 久草大| www.99婷婷| www.婷婷,com| 丁香婷婷色五月| 成人国产综合| 亚洲性爱干干| 99亚洲综合| 天天舔天天插天天爱| 成人日韩欧美| 玖操97| 另类小说五月天综合网| 五月婷婷真爱激情网| 婷婷深爱五月丁香| 99久在线精品| 亚洲乱码日产精品BD| 99免费超碰在线| 一级片操逼视频| 丁香六月婷婷色XXXX| 亚洲黄色网址| 婷婷五月丁香花综合| 色天堂在线| 亚洲成人在线免费| 色婷婷五月天天天天天天天天天| 天天色综合网吨吧| 久热超碰91| 色在线99| 四川女人毛多水多A片| 久777| 五月天大香蕉视频| 丁香五月综合| 色五月亚洲开心网| 婷婷99狠狠躁天天| 天天噜| 色丁香影院| 丁香五月婷婷狠狠色| www.久久久.com| 狠狠爱婷婷| 182TV大香蕉| 丁香婷婷色五月| 午夜色丁香| 国产成人AV在线播放| 91chinese在线| 国产肥白大熟妇BBBB视频| 日本三级第一页| 偷拍91九色| 婷婷丁香黄色| 99re久热只有精品6在线直播| 99免费视频在线观看爱| 婷婷99狠狠| 97碰91| 大香蕉伊人久久| 欧美97p| 激情久久五月天| 琪琪色网在线| 色一区高清| 五月天婷婷在线播放免费| 超碰男人色| 色伊人91在线视频| 97操碰日本女人| 亚洲五月婷婷| 婷婷五月在线观看| 99久久超级| av在线资源| WWW.色婷婷.COM| 丁香五月性| 1024AV视频| 99re6热在线精品视频播放速度| 天天日天天日天天搞| 丁香五月欧美激情| 激情小说五月天| 97资源碰碰在线| 婷婷五月色网| 精品国产乱码久久久久久免费| 色九九综合热99| 亚洲精品视频电影| 婷婷五月色播| 日本情色一区二区| 深爱婷婷丁香五月激情| 五月丁香婷婷色啪| www.五月婷婷久久.com| 伊人激情AV一区二区三区| 99日精品视频| 色五月婷婷网| 色色激情五月| 成人一级片| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 久久久A级视频| 色婷婷六月综合| 五月丁香五月综合欧美| 九九色影视| 久久视频婷婷| 五月婷婷中文字幕| 五月久久婷婷| 九九五月天| 日日干干天天干| 午夜一区| 久久婷五月综合色| 大香蕉久久青青| 五月丁香大相交| 天天 日综合| 深爱激情五月网| 99九九精品视频| 色色色99| 亚洲综合婷婷五月| 色婷婷综合网站| 免费国产VA国产免费| 久久伊人大香蕉| 日本欧美在线| 婷婷99狠狠| 丁香色六月婷婷| 婷婷久久综合久| 久久五月视频| 欧美日韩aaa| 亚洲 综合中文| 能看的av网站| 色色亚卅| 激情国产综合| 亚洲视频伍月婷婷| 五月天婷婷综合网| 婷婷日日夜夜| 婷婷欧美综合| 大学生高潮无套内谢视频| 南京搡BBBB搡BBBB| 91伦| 欧美日综合| 五月天婷婷xxx| 国精产品一区一区三区免费视频| 永久地址 色| 99热在线爱| 日本色图综合| 天天色综合色| 婷婷五月色色| 国产精自产拍久久久久久蜜| 五月激情综合美女久久| 天堂在线婷婷| 五月成人网站| 五月婷婷丁香瑟瑟视频| 99热精品在线观看| 丁香九月色| 六月丁丁香| 操逼综合网| 色丁香五月天| 天天操天天日天天爽| 99超级超级超级碰| 五月婷婷六月丁香综合在线| 新精品99| 婷婷伊人无码| 欧洲精品爱爱| 日本V在线观看不卡视频网站| 五月天婷婷在线播放免费| 国产女生爱爱AA| 99在线69| 五月天婷婷爱| 五月婷婷色播网| 日韩av网站在线观看| 99亚洲视频| 亚洲99热| 五月社区婷婷激情| 九热...av| 99热都是精品| 色婷五月丁香久亚洲| 婷婷欧美激情| 久久婷婷五月综合色丁香花| 五月天综合网| 婷婷丁香激情综合色情| 久久久精品色色色| 天天插天天很| 99re66热这里只有精品| 操逼巨乳91| 亚洲经典三级| 第四色五月天| 影音先锋一区| 人人摸人人摸| 六月丁香影院| 视色网在线播放| 综激情网| 伊人9在线| www超碰| 久久激情五月婷婷| 天天综合网站| 久久婷婷综合五月天| 五月丁香六月欧美综合| 五月婷婷高清| 色婷婷91| www热久久yy9| 久久91久久91色欲精品| 久久久九九视频精品18| 婷婷丁香五月综合久久| 99热这里只有精品1| 久久亚洲无码| 国产成人综合在线| 丁香激情五月| 天堂综合久| 亚洲色婷婷五月| 久久这里都是精品视频| 综合五月亭亭9| 六月丁香大香蕉| 秋霞丝袜啪啪啪| 91高潮喷水久久久久久久久| 九九99视频精品| 五月婷婷综合激情小说| 综合色图婷婷| 久久婷婷五月天丁香| 欧美 日韩 人妻 高清 中文| 欧洲电影在线观看免费版英语版| 超碰成人在线观看| 婷婷五月激情综合| 丁香五月婷婷影院| 日本99热| 色丁香五月婷婷| 日本丁香五月| 亚洲欧洲中文日韩久久AV乱码| 五月婷婷啪啪| 九九久久网| 91欧美| 亚洲激情婷婷| 免费AV播放| 九九热99热| 色色色色色色色色网站| 亚洲色色色| 中文字幕日产A片在线看| 少妇人妻偷人精品无码视频新浪| j五月香在线| 99热黄| 丁香社92视频| 欧美性爱五月天| 色婷婷影院| 丁香六月婷婷开心| 丁香五月激情婷婷| 国产婷婷综合| 99热啪啪| 狠狠CAO日日穞夜夜穞AV | 99ER热精品视频| se色婷婷视频| 久久久久久久久久91| 日韩啪| 欧日韩成人| 丁香婷婷六月激情文学| 丁香婷婷激情网站| 香蕉婷婷| 中文字幕 中文字幕明步 | 五月天开心激情网色欲无码| 在线观看996精品| 沈娜娜av| 六月丁香综合| 日韩乱轮AV| 色婷婷成人做爰A片免费看网站| 99re欧美精品| 欧美在线操| 青青操avbb| 天天干夜夜想| 色九月| 日韩美一级毛卡片| 久久视屏这里只有久久| 性日本精品| 欧美日韩99| 色五月丁香A欧美com| 色色五月天婷婷丁香| 五六月婷婷| 婷婷亚洲色| 99精品一二三四视频| 99热综合| 97香蕉久久超级碰碰高清版| 亚洲va欧美va国产综合久久久| 五月天伊人综合| 欧美人与性动交CCOO| 六月丁香成人| 人妻操在线看| 五月天婷婷丁香| 色婷婷五月综合色婷婷| 亚洲色激婷| 丁香五月婷婷网| 欧美成人AAA片一区国产精品| 日本九九九九九九| 亚洲十月婷婷综合| 五月天婷婷影院| 好吊兆人妻| 激情丁香婷婷六月天| 六月婷婷私欲| 狠狠爱综合| 久久99精品日本| 久久久99精品| 欧美日韩欧美| 久久无码激情视频| 色婷婷在线播放| 欧美A级成人婬片免费看理论| 婷婷伊人久久| WWW99热| 99碰在线视频| 婷婷五月视频| 婷婷五月丁香青青草在线| 日本怕怕视频| 超碰成人免费| 五月丁香六月婷婷的女人| 99热首页在线30| 日日干天天| 亚洲午夜av| 991国产精选视频在线播放下载| 骚逼视频一区2区| 思思99精品视频在线观看| 婷婷久久大香蕉| 综合狠狠干| 99在线精品视频| 丁香五月色色婷| 久久综合天天综合| 99色嘟嘟精品网站| 五月天激情视频网站| 免费观看欧美成人AA片爱我多深| 色五月婷婷狠狠撸| 五月婷婷六月丁香| 99热思思久| 久久综合丁香激情五月| 六月99天天婷婷激情综合| 色色色色色色色色五月先| www.婷婷.com| 99日在线视频| 99视频色在线观看| 日本三级大片| 五月丁香六月情婷婷久久| 大地资源色婷婷视频在线| 婷婷五月天日本国产| 婷婷五月天激情小说| 79亚洲精品少妇| 俺也去色| 婷婷五月天综合小说网| 久久五月天免费网站| 五月婷婷开心亚州在线| 韩日AV片| 美欧日韩国产成人在战| 26UUU一区二区| 色婷婷久久| 丁香香五月激情免费视频| 国产又粗又大又爽又黄| 天天天日天天天干| 91岛国片| 色五月五月婷婷| 最新激情五月天| 91色综合网站在线| 久久丝袜婷婷| 五月天婷婷午夜丁香| 影音先锋91网站在线观看| 五月丁香六月婷婷综合网缴情| 超碰99热在线观看| 99热这里只有精品66| 天天网站天天爽| 天天操天天插| 思思热在线精品视频| 色婷婷97| 久cao香蕉影院| 五月丁香六月婷婷色日| 激情五月天啪啪视频| 婷婷综合性爱网| 丁香五月手机在线| 七七九九色色| 伊人久久大香天蕉亚洲特级| 黄色成人网站在线播放| 91日本在线| 欧美久久一级内射wwwwww.| 五月丁香婷婷六月| 国产97色在线| 色啪久| 亚洲综合成人网| 色丁香婷婷美女视频网站| 人人操操| 色婷婷综合久久| 殴美激情综合网| 色婷婷五月天激情综合 | 一级七香蕉| 综合五月丁香六月婷婷| 天天射射夜| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 五月色无码| 狠狠色丁香婷婷久久综合| 亚洲成av人影院| 丁香五月欧美午夜视频| 欧美另类五月激情| 久久欧洲久久| 亚洲AV第二区国产精品| 深爱激情五月网| 五月丁香视频在线观看| 日韩啪啪视频| 五月婷婷综合影院| 99热黄| 99自拍视频在线| 色五月婷婷很很操| 新激情五月天色播| 开心 五月 综合| 五月天激情四射网站| 天天操综合网| 99九九久久| 五月激情在线| 丁香五月天激情小说| 99碰超| 成人永久免费视频在线观看| 亚洲成人av在线观看| 97碰碰碰免费公开在线视频| 亚洲精品视频电影| 极品人妻VideOssS人妻| 啪到高潮激情丁香五月| 思思w99| 九月色婷婷| 欧美人久久| 色99无码| 国产操B| www.9操| 中文字幕丰满孑伦无码专区| 亚洲综合五月天婷婷丁香| 在线视频另类| 久久xxxx| 九九久久网| 色婷婷欧美| 色五月超碰| 色情五月停停丁香| 色五月色五天免费视频| 丁香五月六月综合激情| 99这里只有精品视频| 亚洲综合色色色| 九月婷婷丁香| www.亭亭五月天| 深爱五月日韩| 色 色 色综合com| 色激情五月| 婷婷激情小说| 99九九在线视频| 丁香五月天五码婷婷| 国产熟女日日骚五月丁香爱| 婷丁香久综合| 26UUU亚洲欧美| 激情五月天免费视频| 天天射综合网夜夜操| 丁香婷婷五月基地| 五月天婷婷综合| 六月丁香婷婷综合狠狠爱夜夜爱| 色九九综合| 大香蕉综合在线| 色色免费网站| 极品少妇XXXX精品少妇偷拍| 天天综合网站| 狠狠插狠狠操| 九九九激情综合| 五月黄色婷婷| 亚洲九区| 我爱va亚洲va52| 亚洲中文乱字字幕在线永久| 五月丁香色色网| 五月丁香在线| 五月婷婷丁香综合,亚洲天堂| aaaa.黄| www.91AV.COM| 26UUU| 婷婷综合网站| 五月丁香精品| 色色五月天婷婷| 丰满少妇乱A片无码| 亚洲超碰在线| 日韩AV中文字幕在线| 激情图片99| 五月激情婷婷图片基地| 五月婷伊人| 色五婷婷开心缴| 色99色| 欧美性色A片免费免费观看的| 99在线爽| 99热在线99| 99热精品在这里| 狠狠干狠狠干| 伊人久久大香天蕉亚洲特级| 久久激情视频| 久久婷婷五月综合伊人| 天天天天操| 人人操AV| AV在线不卡网站| 婷婷色女| 五月丁香六月婷| 97精品人人A片免费看| 色色色色色五月丁香| 色综合天天网| 丁香激情久久| 久热爱大香蕉在线蜜臀悦色| 思思视频精品| 噜噜干日本| 婷婷五月综合免费在线| 第2色五月婷| 五月狠狠| 91fuliwang| 五月六月丁香婷婷在线观看| AV在线观看网站| 九九在线91| 五月丁香啪啪激情| 99热超碰在线| 五月丁香综合成人社区| 成人精品人妻| 色香欲综合| 五月天丁香婷婷久久九| 五月激情丁香六月狠狠干| 欧美色色色色色色| 一区操| 五月婷婷乱| 九月丁香| 野外99热| 天堂久久性| 丁香 婷婷五月| 五月天婷婷久久| 天天综合 99久久婷婷| 精品色色色| 国产,欧美,学生妹,视频| www91精品| 91精品综合久久久久久五月丁香| 国产精品涩涩涩视频网站| 亚洲一区国产传媒| 日日爽夜夜爽| 久久免费试看120秒| 天天摸天天日天天舔| 色综啪啪网| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ| 91爱啪啪| 91色久| 91精品久久久久久综合五月天| www.色色色com| 激情图片亚洲| 亚洲九九视频| 人人综合久| 九九自拍网| av激情在线| 超碰在线9| 国产综合色婷婷精品久久| 激情人妻综合| 99久久婷| 五月丁香六月情| 午夜成人网站在线观看| 五月天最新网| 久久视频婷婷| 久色网| 99色在线观看免费| 国产精品99久久久久久久女警| 久久这里面只有精品视频| 丁香五月天啪啪| 伊人激情| 六月丁香久久| 婷婷五月 丁香六月| 久热这里| 丁香美女主播视频在线观看 | 69久久99精品久久久久| 婷婷另类小说| 欧美日韩国产日本精品四虎网网站物| 色五月成人| 久久婷婷综| a在线观看| 五月婷婷精品视频| 天天爱天天爽| 色五月婷激情| 人人妻人人澡人人爽| 色色网站免费| 丁香婷婷六月天| 午夜大香蕉| 久久久久久综合五月婷婷| 欧洲区自拍| 亚洲综合无码| 丁香六月视频| 99er热精品视频| 热99这就是精品视频| 六月丁香婷婷尤物| avv在线| 亚洲色热| 夜丁香五月婷婷| 色婷婷伊人| 国产在线aaa片一区二区99| 激情综合网,婷婷| 亚洲色区17| 婷婷五月天亚洲| WWW.开心五月天.COM| 五月激情婷婷偷拍| 二色av| 五月婷婷婷婷婷| 操逼毛片国语对白| 成人在线观看精品| 激情AV在线| 五月激情丁香五月| 31色区视频免费看| 狠狠的日| 开心深爱激情网| 色情·com| 免费观看18视频网站| 久热免费视频| 国产性色蜜乳| 婷婷综合五月| 色综合播放| 97操操| 99热九九热| 美女五月天婷婷| 丁香婷婷综合色五月激情国产基地| 91碰碰| 五月久视频| 欧美日韩大黄| 97久久久久| 国产成人精品一区二三区熟女在线 | 五月激情站| 五月天开心婷婷激情网站| 欧美色六月婷婷| av在线免费播放| 天天色天天操天天射| 91久久婷婷| 色婷婷五月综合| 米奇影视资源777狠狠色婷婷五月天激情网| 一区二区免费看| 日本精品人妻无码77777| 天干夜夜操| 久久婷婷综合国产| 99精吕视频在线观看了| 久热最新视频| 嫩草视频在线观看| 久久涩视频| 在线只有精品| 五月天婷婷在线播放免费| 六月色狠狠色| 亚洲小说五月婷婷| 99精品国产在热久久| 激情亚洲婷婷| 黄色一极大片| 亚州第一A片| 久久9情免费| 亚洲亚洲人成综合网络| AV电影在线播放| 色婷婷丁香五月| 大香蕉五月婷婷| 日本色爽| 99热6精品| 夜夜综合色| 色五月亚洲开心网| 婷婷六月天激情影院| 激情综合网 激情五月天| 综合激情五月丁香| 干婷婷五月天| 3p日韩网站视频| 五月激情久久综合| 亚洲看av的网站| 五月色丁香婷婷中文字幕| 久久99激情| 五月婷精品| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 五月天激情小说| 婷婷五月天天爽| 色欲婷婷五月天丁香| 五月天激情中文字幕| 色久综合天天做视频| 久久草婷婷丁香网站| 激情综合另类| 久热这里只有精品视频免费观看| 色色哒五月婷婷六月丁香| 手机免费福利视频| 欧美激情综合五月色丁香| 色色射| 丁香婷婷色五月| 婷婷伊人五月天| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 丁香婷婷综合激情五月色| 国产3p露脸普通话对白| 久操欧美在线观看97| aaaa久久| 91丁香| 99久久99久久综合| 久久6这里只有精品| 精品色色网| 天天干天天爽天天操| www夜夜| 9色在线视频| 中文激情网| 婷婷五月天天| 激情五月婷婷视频一区二区三区| 色婷婷免费观看| 色色色99韩| 插插五月天| 色停停五月,在线观看| 九色婷婷| ..真实国产乱子伦对白在线_欧 | 4399在线日本A片| 五月婷婷深深爱爱| 人妻内射视频| a在线观看| 国产成人精品一区二三区熟女在线 | 亚洲色小说在线综合| 噜噜色婷婷| 五月天成人小说| 五月天丁香色色| 激情av在线| 天天拍天天做视频| 99热久草| 久久综合99综合| 日韩精品一品二区三区的使用体验| 大香蕉手机视频| 日本成人噜噜| 爱射综合| 内射 无码 伊人| 日韩性视频| 亚洲AV色婷婷人禽五月天| www色色com| 婷婷丁香熟女| 91丨九色丨熟女|新版| 欧洲激情五月天| 人妻aV在线| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 婷婷综合精品| 久久久人妻| 九月婷婷激情| 亭亭社区五月天| 狠狠色婷婷7777久| 97久操| 六月香五月婷| 99超级碰免费视频| 色婷婷色五月综合| 色婷婷深爱五月| 91热在线| 操婷婷基地| 五月丁香六月婷婷不卡免费无码 | 九九成年视频| 久久久久婷婷五月热综合| 九九热这里只有精品31| 99久久国产宗和精品1上映| 久久9久久| www,五月天激情| 伊人在线视频| 在线观看av网站| 涩涩涩.com| www.婷婷| 99黄色在线视频精品熟女| 久久久久人妻中文| 欧美日韩中文国产一区发布| 开心五月综合激情网| 热99这就是精品视频| 九九热123| 天天舔夜夜操www com| 五月丁香综合网| 婷婷综合国产| 人人干AV| 成人无码髙潮喷水A片| 综合色色网| 色噜噜狠狠色综合网| 久草五月婷| 婷婷热婷婷色| 国产3p露脸普通话对白| 色情五月天小说| 丁香五月婷婷啪啪啪| 成人在线视频一区| 婷婷草| 婷婷丁香五月视频| 日韩欧美四五区| 亚洲综合激情五月久久| 日本精品在线噜噜噜| 色爱综合网| 97婷婷丁香| 国产婷婷综合| 久久久久久婷| 亚洲色婷婷五月| 亚洲一二三网| 婷婷丁香人妻天天| 日本三级成人秘书精品片| 99.色| 极骚大香蕉伊人| 久久精彩视频99| 这里只有精品96| 日日操,夜夜爽| 大香蕉在线99热| 国产热精品| 五月丁香色欲| 国产精品香蕉| 91xxxx九色| 色婷婷亚洲婷婷| 婷婷射综合| 女人被男人吃奶到高潮| 97碰碰人人| 能看的av网站| 婷婷爱综合| 久热在线中文字幕色999舞 | 91超碰人人操| 色欲婷婷五月天| 天天做天天爱天天高潮| 深爱开心激情网| 五月色亭丁香| 97精品自拍视频| 亚洲欧美婷婷五月色综合| 久久99激情| 精品国产人人爱人人| 四川女人毛多水多A片| 五月色俺婷婷| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 色一情一乱一乱一区91| 丁香婷婷激情综合五月激情| 狠狠综合网| 五月激情五月丁香| 蜜乳AV成人| 91综合色| 99久久99热| 九九久久偷拍| 人妻九九九九| 五月丁香激情综合网官网| 91九九热| 九九五月天| 激情综合五月.....| 日韩三级视频一区二区| 国产avapp 网| 激情综合网,婷婷| 丁香五月 性爱| 婷婷九月亚洲| 美女婷婷六月色| 国产a视频| 久久久久人妻网址| 人人人操97| 91传媒无码人妻精| 久热久| 欧洲激情精品婷婷| 99精品视频在线观看免费| 亚洲狠狠色丁香婷婷综合久久| 激情五月六月| 欧美性丁香色色五月天综合爱爱| 亚洲精品视频电影| 亚洲经典三级| 91干在线| 涩五月丁香| 欧美 日韩 成人 在线| 玖玖色综合色| www.夜夜| 97色色视频| 南京搡BBBB搡BBBB| 亚洲一区国产传媒| 久99999热视频在线观看免费| 蜜臀av粉嫩av懂色av| 99色最新在线视频网站| 久草五月| www久久久久久| 国产精品久久久久久久久久久久| 天天日日夜夜| 亚洲激情五月丁香久久久久| 人妻狠狠操| 美欧成人视频| 狠狠色丁香乆乆| 免费亚洲婷婷| 婷婷中文字幕| 激情五月婷婷中文字幕| 99久久99热| 丁香婷婷六月天| 97婷婷久久丁香| 99精品视频在线观看| 日韩欧美颜射| 五月综合缴情网| 中文字幕日韩无码制服诱或| 人妻av在线| 91se在线观看| 91碰免费视频| 99在线精品免费视频| 激情五月天天狠狠久久| 亚洲va在线| 人人人人人人人人人草| 婷婷综合激情| 91.com男女操| ...婷婷五月综合不卡,国产在线手机| 校园春色亚洲色| 成人做爰A片免费看视频| 99热网站| 碰超99| 五月天播播中文字幕| 一级二级香港秋霞欧美欧美秋霞| 啪啪啪五月天| 丁香 婷婷五月| 久久久久久xxxxx| www.色99| 久操热线| 亚洲性受XXXX五月丁香| www.91操| 91操片| 9久热免费视频99| 丁香久月| 色五月,婷婷大香蕉| 久久五月热| 大香蕉久久伊人网| 色婷婷狠狠久久综合五月 | 久久五月婷天天干| 精品九九视频| 丁香婷五月| 婷婷丁香亚洲五月天| 狠狠狠狠狠狠狠狠草| 99热热九九| 99热在这里只有免费精品| Xx色综合| 婷五月天在线草| 天天在线久久综合| 久久色天堂| 色愛综合网| 国产裸舞福利资源在线视频| 人妻乱码久久久| 在线综合网| 五月婷婷中文| 婷婷综合视频| 超碰操网| 天天色综网| 六月婷婷综合| 五月天综合| 欧美性猛交XXXX乱大交极品| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 在线综合网| 亚州视频九九99| 激情综合色婷婷六月天| 99爱在线视频| 激情久久肏屄视频| 狠狠爱综合网| 五月激情综合网| 国产性爱亚洲是图| 操操操97| 成人无码中文| 久久精品99久久久久久| 色九月婷婷| 精品无码人妻一区| 色偷偷综合| 色婷婷电影网| 日韩成人无码| 色综合播放| 操操天堂| 五月婷婷婷婷婷婷艺术| 欧美丁香婷婷五月天| 粉嫩av蜜桃av蜜臀av| 丁香五月天堂| 任我干视频在线观看| WWW.五月com| 欧美精品99久久久| 超碰renrenai| 狠狠色成人影片| 五月天婷亚洲综合在线嫩草网| 天天干天天色天天干| 伊人超碰| 成人中文网| 亚洲操B视频| 激情深爱综合| 天天色综网| 天天爽人人综合免费7799| WWW.桔色成人.COM| 亚洲爱婷婷| 性色播| 丁香五月六月婷婷怡红院| 日韩九九| 办公室少妇激情呻吟A片在线观看| 9l久久久视频| 激情五月婷婷免费视频| 丁香婷婷婷五月| 婷婷丁香五月综合免费视频百花| 搡BBBB搡BBB搡五十| 91视频人人做97| 五月婷伊人| 日本高清久| 久久丁香综合香蕉| 婷婷激情五月天综合| 欧美25p| 无码少妇高潮喷水A片免费| 开心五月婷婷综合在线精品素人| 色婷婷丁香网| 丁香色综合| 婷婷香蕉香| 日韩好吊操| av在线免费网站 | 日本色色网| 99热性色| 五月天成人手机在线视频| 91精品无码| 曰本aaaaaa丈片| 五月丁香六月停停| 开心激情五月天网| 欧美成人日韩| 久久深爱激情网| 97香蕉久久超级碰碰高清版 | 婷婷亚洲色| 色婷婷色| 停停五月天激情网| 五月激情综合网| 1234操逼网| 看久久性爱99视频| 日本视频久久| 天天综合久久| 97色婷婷成人综合在线观看| 97超碰,人人舔,人人操,人人摸 | 丁香五月天婷婷大香蕉| 丁香五月大片| 五月天婷婷社区| 高清不卡一区| 九九热免费| 色婷婷五月天av在线| 天干干夜夜操| 人人操AV| 99在线精品观看99| 婷婷基地爱| 91AV婷婷| 色吧婷婷| 国产成人AV在线播放| 五月天天天天天天天天天天天婷婷婷| 精品99*| 天天操夜夜肏| 丰满少妇猛烈A片免费看观看 | 久热超碰| 婷婷色影院| 婷婷 久综合| 99热99在线| 99亚洲综合|