Python-對Pcap檔案進行處理,擷取指定TCP流

來源:互聯網
上載者:User

標籤:zone   led   des   指標   版本號碼   根據   連網   選項   線資料   

        通過對TCP/IP協議的學習,本人寫了一個可以實現對PCAP檔案中的IPV4下的TCP流提取,以及提取指定的TCP流,鑒於為了學習,沒有採用第三方包解析pcap,而是對bytes流進行解析,其核心思想為:若想要提取TCP Content,需在下層的IPV4協議中判斷Protocol是否為TCP,然後判斷下層的乙太網路協議的Type是否為IPV4協議(此處的IPV4判斷,只針對本人所寫項目);對於指定流需要擷取Client以及Server的[IP,PORT]。

一、Pcap檔案解析

  對於一個Pcap檔案,其結構為檔案頭,資料包頭,資料包資料,資料包頭,資料包資料……,檔案頭為24位元組,如下:

 

 

  • Magic:4Byte:標記檔案開始,並用來識別檔案自己和位元組順序
  • Major:2Byte: 當前檔案主要的版本號碼
  • Minor:2Byte: 當前檔案次要的版本號碼
  • ThisZone:4Byte:當地的標準時間,如果用的是GMT則全零,一般都直接寫 0000 0000
  • SigFigs:4Byte:時間戳記的精度
  • SnapLen:4Byte:最大的儲存長度
  • LinkType:4Byte:鏈路類型

  資料前序為16位元組,如下:

  • Timestamp 4Byte:被捕獲時間的高位,精度為seconds
  • Timestamp 4Byte:被捕獲時間的低位,精度為microseconds
  • Caplen 4Byte:當前資料區的長度,即抓取到的資料幀長度,不包括Packet Header本身的長度,單位是 Byte ,由此可以得到下一個資料幀的位置。
  • Len 4Byte:離線資料長度:網路中實際資料幀的長度,一般不大於caplen,多數情況下和Caplen數值相等。
  Packet Data 
  在資料包頭之後,就是資料包的資料了,資料長度就是Caplen個Byte,在此之後是一個新的Packet Header,新的Packet Data,如此迴圈。  二、乙太網路協議解析  乙太網路協議為14Byte,6Byte Destination,6Byte Source,2Byte Type

 

三、IPV4協議解析  不同的IP協議各有不同,本項目只選用IPV4下的TCP流  

 

  • Version 4bit:對於IPv 4,這總是等於4
  • IHL 4bit:資料報協議頭長度,表示協議頭具有32位字長的數量。該欄位的最小值為5,它表示長度為5×32位=160位=20位元組。作為一個4位欄位,最大值為15字(15×32位,或480位=60位元組)
  • DSCP 6bit:差異服務代碼點
  • ECN 2bit:明確壅塞通知
  • Total Length 2Byte:這個16位欄位定義了整個IP資料包大小(以位元組為單位),包括前序和資料,最小大小為20位元組(沒有資料的頭),最大為65535位元組。
  • Identification 2Byte:該欄位是一個識別欄位,主要用於唯一標識單個IP資料報的片段組。
  • Flags 3bit:用於控制或識別片段
  • Fragment Offset 13bit:片段位移欄位以8位元組塊為單位進行測量。它有13位長,並指定特定片段相對於原始未分段ip資料報開頭的位移量。第一個片段的位移量為零。這允許最大位移量(2**13-1)×8=65528位元組,這將超過包含前序長度(65528+20=65548位元組)的最大IP資料包長度65535位元組。
  • Time To Live (TTL) 1Byte:一段8位的存活時間有助於防止資料報在互連網上持久化
  • Protocol 1Byte:此欄位定義IP資料報的資料部分中使用的協議
  • Header Checksum 2Byte:16位IPV4頭校正和欄位用於對標題進行錯誤檢查
  • Source address 4Byte:此欄位是資料包寄件者的IPV4地址。
  • Destination address 4Byte:該欄位是資料包接收方的IPV4地址
  • Options:選項欄位不常使用。

四、TCP協議解析

  • Source port (16 bits):標識傳送埠
  • Destination port (16 bits):標識接收埠
  • Sequence number (32 bits):序號,具有雙重作用,如果syn被設定成1,標誌這是初始序號,如果syn被設定成0,表示這是初始序號,如果syn被設定成0,表示這是當前會話的此段的第一個資料位元組的累積序號
  • Acknowledgment number (32 bits):如果設定ACK標誌,則此欄位的值是ACK發送方期望的下一個序號
  • Data offset (4 bits):指定以32位為單位的tcp前序的大小。最小標題為5字,最大為15字,從而使其最小為20位元組,最大為60位元組,允許在標題中設定多達40位元組的選項
  • Reserved (3 bits):供將來使用,並應設定為零
  • Flags (9 bits) (aka Control bits):包含9個標誌位
    • NS (1 bit): ECN-nonce - 隱藏保護
    • CWR (1 bit): 發送主機設定擁塞視窗減少(Cwr)標誌,以表明它收到了設定了ecc標誌的tcp段,並在擁塞控制機制中作出了響應
    • ECE (1 bit): ECN-Echo具有雙重角色,這取決於SYN標誌的值
    • URG (1 bit): 指示緊急指標欄位是有效
    • ACK (1 bit): 指示確認欄位是有效。用戶端發送的初始SYN資料包之後的所有資料包都應該設定此標誌
    • PSH (1 bit): 推送功能,請求將緩衝資料推送到接收應用程式
    • RST (1 bit):重設串連
    • SYN (1 bit): 同步序號。只有從每一端發送的第一個資料包應該設定此標誌。其他一些標誌和欄位根據此標誌更改含義,有些只有在設定1時才有效,而另一些則在0時才有效
    • FIN (1 bit): 來自發送方的最後一包
  • Window size (16 bits):接收視窗的大小
  • Checksum (16 bits):16位校正和欄位用於對前序、有效載荷和偽頭進行錯誤檢查
  • Urgent pointer (16 bits):如果設定了URG標誌,則此16位欄位與表示最後一個緊急資料位元組的序號之間的位移量
  • Options (Variable 0–320 bits, divisible by 32):該欄位的長度由資料位移欄位決定

五、處理檔案

  部分核心代碼如下:

  此部分是對pcap(bytes)檔案讀入,將每一個資料包資料作為一幀,判斷為IPV4-TCP資料後,將TCP裡面的[src, dst,src_port,dst_port, seq, ack, flags, content]一幀幀提取,儲存在tcp_stream,此處即為提取pcap檔案中所有的TCP流

  此處是對於上面傳入的tcp_stream,提取出我們想要指定的Tcpstream,如果flags_ack,flages_push為1時,即有Client或Server進行http請求,若此包被確認接收,則進行儲存(避免重傳,丟包的情況),判斷flags_fin為1時,結束迴圈,返回指定的Tcp流。

六、完整代碼

  TCP學習:https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure

  IPV4學習:https://en.wikipedia.org/wiki/IPv4#Packet_structure

  完整代碼:https://github.com/sunpudding/python,裡面不僅有完整項目代碼,還有單元測試,歡迎下載,一起學習交流。

  

Python-對Pcap檔案進行處理,擷取指定TCP流

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.