使用pcap或者winpcapy抓包後,對包做處理,使用dpkt工具,資料處理速度較快,但是dpkt大多數都是資料片段,一次互動請求,通常被分為很多片段,通過報文頭部的
do_not_fragment(是否分包) more_fragment(有更多片段)倆個字段,也就是(df,mf)來確定是否有分包,是否是最後乙個。
因為理論不足,以及沒找到現成的**,所以寫了個組包**
ip = eth.data
# 取出分片資訊
df = bool(ip.off & dpkt.ip.ip_df)
mf = bool(ip.off & dpkt.ip.ip_mf)
offset = ip.off & dpkt.ip.ip_offmask
# 輸出資料報資訊:time,src,dst,protocol,length,ttl,df,mf,offset,checksum
output1 =
output2 =
output3 =
output4 =
if output2['src'].strip() == '202.99.232.54':
print('ip: %s -> %s (len=%d ttl=%d df=%d mf=%d offset=%d)' % ('%d.%d.%d.%d'%tuple(ip.src), '%d.%d.%d.%d'%tuple(ip.dst), ip.len, ip.ttl, df, mf, offset))
#print(ip.data.data)
global b
if df == 1 and ip.len == 1490:
b = b + ip.data.data
#print(str(b, encoding='utf-8'))
elif ip.len > 40:
b = b+ip.data.data
print("\n**********=")
try:
start_index = b.find(b'\r\n\r\n')
end_index = b[start_index+4:].find(b'\r\n')
x = b[start_index+ 4 + end_index + 2:]
x = x[:x.find(b'\r\n')]
print(json.loads(str(x, encoding='utf-8')))
except baseexception:
print("parse to json error:" )
print("*************")
print(x)
print("*************")
print("**********==\n")
b = bytes('', encoding='utf-8')
else:
b = ip.data.data
print(str(b, encoding="utf-8"))
僅作參考,比如最大片段長度 1490,以及 長度為40,53的互動分別是什麼資訊都不是很確定。 抓包分析IP報文結構
ipv4的頭部結構如圖所示。其長度通常為20位元組,除非含有可變長的選項部分 4位版本號 指定的ip協議的版本。對ipv4來說,其值是4。4位頭部長度 標識該ip頭部有多少個32bit字。因為4位最大能表示15,所以ip頭部長度最長是60位元組。8位服務型別 包括乙個三位的優先權字段 現在已經被忽略...
ip網路抓包分析(1)
獲取原先的網路配置,將ip位址的後8個位元組改為學號的後3位。連通性測試ping www.baidu.com能正常連線網路。源位址目的位址 網域名稱172.24.55.69 一 應用層 二 傳輸層 tcp協議tcp三次握手 第一次握手 客戶端傳送乙個tcp,標誌位為syn,序列號為0,代表客戶端請求...
IP網路協議抓包分析
一 配置 1 網路位址規劃表 主機ip 子網掩碼 預設閘道器 mac位址 192.168.43.121 255.255.255.0 192.168.43.174 18 56 80 84 35 db 2 配置源位址 開啟電腦 網路和共享中心 點選 本地連線 單擊 屬性 選擇 internet 協議版本...