[英]How to parse TCP packet payload
我正在使用pcap捕獲我想要解析有效負載的TCP數據包。 我的策略如下:
ETHERTYPE_IP
類型(IP數據包) IPPROTO_TCP
(TCP數據包) 檢查有效負載大小> 0 (size = ntohs(ip_header->total_length - ip->header_length*4 - sizeof(struct tcp_header))
。
解析有效負載(抓取主機URL)
我還沒有開始解析有效載荷,因為我得到了不一致。 下面是使用過濾器"host = www.google.com"
打印出10個捕獲的TCP數據包的有效負載。
包號:3 :TCP包:源端口:80目的端口:58723包中沒有數據
數據包編號:4 :TCP數據包:源端口:58723目標端口:80數據包中沒有數據
數據包編號:5 :TCP數據包:源端口:58723目標端口:80 有效負載: GET / HTTP / 1.1主機:www.google.com用戶代理:Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10_6_5; en- us)AppleWebKit / 533.19.4(KHTML,類似Gecko)版本/ 5.0.3 Safari / 533.19.4接受:application / xml,application / xhtml + xml,text / html; q = 0.9,text / plain; q = 0.8 ,image / png, / ; q = 0.5 Accept-Language:en-us Accept-Encoding:gzip,deflate Cookie:THICNT = 25; SID = DQAAAKIAAAB2ktMrEftADifGm05WkZmlHQsiy1Z2v-連接:保持活着
包號碼:6 :TCP包:源端口:80目的端口:58723包中沒有數據
包號碼:7 :TCP包:源端口:80目的端口:58723 有效載荷: \\ 272 \\ u \\ 243 \\ 255 \\ 375 \\ 375} \\ 336H \\ 221 \\ 227 \\ 206 \\ 312~ \\ 322 \\ 317N \\ 236 \\ 255A \\ 343 #\\ 226 \\ 370֤\\ 245 [\\ 327` \\ 306ըnE \\ 263 \\ 204 \\ 313 \\ 356 \\ 3268)p \\ 344 \\ 301_Y \\ 255 \\ 267 \\ 240 \\ 222x \\ 364
數據包編號:8 :TCP數據包:源端口:58723目標端口:80數據包中沒有數據
包號碼:9 :TCP包:源端口:80目的端口:58723 有效載荷: HTTP / 1.1 200 OK日期:星期一,2010年11月29日10:11:36 GMT到期:-1緩存控制:私有,最大 - 年齡= 0內容類型:text / html; charset = UTF-8內容編碼:gzip服務器:gws內容長度:8806 X-XSS-Protection:1; mode = block \\ 213
為什么有效載荷和端口存在差異? 理想情況下,我只想解析數據包5之類的數據包。如何忽略像7和9這樣的數據包?
只有通過分析內容。 什么在IP或TCP標頭中什么都不能標記“HTTP請求”數據包。 甚至“連接中的第一個數據包”也不起作用,因為存在持久連接。
此外,要完全確定捕獲所有URI,您需要重新組裝TCP流並解析HTTP請求:URI可以拆分為兩個或更多數據包。
與IP頭一樣,TCP頭也是可變長度的。 你沒有考慮到這一點。 您需要在IP數據中找到TCP標頭,然后使用其長度字段(需要乘以4,就像IP標頭長度字段一樣sizeof(struct tcp_header))
,而不是盲目地從總數據包大小中減去sizeof(struct tcp_header))
。 )了解實際數據有效負載的位置。
您的大小計算不正確 - 您無法在網絡主機順序中進行減法,您必須先將每個字段轉換為主機字節順序:
size = ntohs(ip_header->total_length) - ntohs(ip->header_length) * 4 - sizeof(struct tcp_header))
但是,正如Remy Lebeau指出的那樣,您實際上需要檢查TCP標頭中的offset
字段以了解有效負載的起始位置。
包5和包7之間的區別在於,前者是從客戶端去, 到服務器,而后者是從服務器到客戶端的響應。 這就是端口切換的原因 - 源地址和目標地址也將被切換。
如果您只想查看來自客戶端的數據包,請檢查源地址是否等於客戶端的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.