基於離線pcap包的FTP協議網路流量資料提取

2021-09-30 00:23:33 字數 1924 閱讀 2289

最近要利用python程式對離線pcap資料報進行分析,工作的環境是win10系統,python3.6

附:利用wireshark進行輔助分析

1、定義所需要的庫

import struct

import io

import sys`

2、對資料報進行匯入

open_file =

open

('檔名'

,'rb'

)

這裡要對pcap資料報有一定的了解:

參考:tcp(傳輸控制協議詳解)詳解

觀察wireshark工具下的ftp資料報,可以發現,ftp協議的資料幀就在tcp協議的填充部分

2))#首先來判斷一下資料報是否遵循ipv4協議

defis_ipv4_tcp

(data)

:return struct.unpack(

'h', data[12:

14])[

0]==8

and data[23]

==6#定**析提取函式

defget_ftp_data

(data)

: ip_header_len =

(data[14]

&0x0f)*

4 ip_total_len = struct.unpack(

'!h'

, data[16:

18])[

0]tcp_header_len =

(data[

14+ ip_header_len +12]

>>4)

*4tcontent = data[

14+ ip_header_len +tcp_header_len:

14+ ip_total_len]

return

[tcontent]

#接下來因為ftp協議資料報是乙個乙個傳送的,所以要對資料報進行迴圈遍歷提取

while pcap_header < file_length:

open_file.seek(

8, io.seek_cur)

#從當前位置開始偏移8個位元組

pkt_length = struct.unpack(

'i', open_file.read(4)

)[0]

#open_file.read(4)讀取四個位元組數

open_file.seek(

4, io.seek_cur)

# 從當前位置開始偏移4個位元組

# packet body

pkt_body = open_file.read(pkt_length)

if is_ipv4_tcp(pkt_body)

: data = get_ftp_data(pkt_body)

data[0]

= data[0]

.decode(encoding=

"utf-8"

, errors=

"strict"

) ftp_stream += data

count +=

1 pcap_header +=

16+ pkt_length

因為jupyter中不能列印特別多的資料量,否則會報錯,所以這裡用spyder對變數ftp_stream進行了觀測:

基於TCP協議的簡易FTP雲盤(客戶端)

include include include include include include include include include msg.h intget cmd type char cmd 將命令字串轉換成整數 char getdir char cmd 分離引數 intcmd han...

基於udp協議的套接字及udp協議粘包問題

udp協議的套接字 udp協議傳輸 服務端和客戶端沒有建立連線一說。import socket 總結一下基礎工作流程 服務端生成套接字並繫結ip port,進入資料傳輸迴圈,服務端接受客戶端傳送的資訊和位址,然後服務端對客戶端請求做出響應,傳送處理好的資料根據而客戶端位址。客戶端建立套接字,直接進入...

基於tgp協議的套接字的 粘包解決

客戶端 import socket import struct import json phone socket.socket socket.af inet,socket.sock stream 買手機phone.connect 127.0.0.1 8082 繫結手機卡 發,收訊息 while tr...