日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流

發(fā)布時間:2025/3/15 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

通過對TCP/IP協(xié)議的學(xué)習(xí),本人寫了一個可以實現(xiàn)對PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鑒于為了學(xué)習(xí),沒有采用第三方包解析pcap,而是對bytes流進行解析,其核心思想為:若想要提取TCP Content,需在下層的IPV4協(xié)議中判斷Protocol是否為TCP,然后判斷下層的以太網(wǎng)協(xié)議的Type是否為IPV4協(xié)議(此處的IPV4判斷,只針對本人所寫項目);對于指定流需要獲取Client以及Server的[IP,PORT]。

一、Pcap文件解析

對于一個Pcap文件,其結(jié)構(gòu)為文件頭,數(shù)據(jù)包頭,數(shù)據(jù)包數(shù)據(jù),數(shù)據(jù)包頭,數(shù)據(jù)包數(shù)據(jù)……,文件頭為24字節(jié),如下:

Magic:4Byte:標記文件開始,并用來識別文件自己和字節(jié)順序

Major:2Byte:?當(dāng)前文件主要的版本號

Minor:2Byte:?當(dāng)前文件次要的版本號

ThisZone:4Byte:當(dāng)?shù)氐臉藴蕰r間,如果用的是GMT則全零,一般都直接寫?0000 0000

SigFigs:4Byte:時間戳的精度

SnapLen:4Byte:最大的存儲長度

LinkType:4Byte:鏈路類型

數(shù)據(jù)報頭為16字節(jié),如下:

Timestamp 4Byte:被捕獲時間的高位,精度為seconds

Timestamp 4Byte:被捕獲時間的低位,精度為microseconds

Caplen 4Byte:當(dāng)前數(shù)據(jù)區(qū)的長度,即抓取到的數(shù)據(jù)幀長度,不包括Packet?Header本身的長度,單位是?Byte?,由此可以得到下一個數(shù)據(jù)幀的位置。

Len 4Byte:離線數(shù)據(jù)長度:網(wǎng)絡(luò)中實際數(shù)據(jù)幀的長度,一般不大于caplen,多數(shù)情況下和Caplen數(shù)值相等。

Packet?Data

在數(shù)據(jù)包頭之后,就是數(shù)據(jù)包的數(shù)據(jù)了,數(shù)據(jù)長度就是Caplen個Byte,在此之后是一個新的Packet?Header,新的Packet?Data,如此循環(huán)。

二、以太網(wǎng)協(xié)議解析

以太網(wǎng)協(xié)議為14Byte,6Byte Destination,6Byte?Source,2Byte?Type

三、IPV4協(xié)議解析

不同的IP協(xié)議各有不同,本項目只選用IPV4下的TCP流

Version 4bit:對于IPv 4,這總是等于4

IHL 4bit:數(shù)據(jù)報協(xié)議頭長度,表示協(xié)議頭具有32位字長的數(shù)量。該字段的最小值為5,它表示長度為5×32位=160位=20字節(jié)。作為一個4位字段,最大值為15字(15×32位,或480位=60字節(jié))

DSCP 6bit:差分服務(wù)代碼點

ECN 2bit:顯式擁塞通知

Total?Length 2Byte:這個16位字段定義了整個IP數(shù)據(jù)包大小(以字節(jié)為單位),包括報頭和數(shù)據(jù),最小大小為20字節(jié)(沒有數(shù)據(jù)的頭),最大為65535字節(jié)。

Identification 2Byte:該字段是一個標識字段,主要用于唯一標識單個IP數(shù)據(jù)報的片段組。

Flags 3bit:用于控制或識別片段

Fragment Offset 13bit:片段偏移字段以8字節(jié)塊為單位進行測量。它有13位長,并指定特定片段相對于原始未分段ip數(shù)據(jù)報開頭的偏移量。第一個片段的偏移量為零。這允許最大偏移量(2**13-1)×8=65528字節(jié),這將超過包含報頭長度(65528+20=65548字節(jié))的最大IP數(shù)據(jù)包長度65535字節(jié)。

Time To Live (TTL) 1Byte:一段8位的存活時間有助于防止數(shù)據(jù)報在互聯(lián)網(wǎng)上持久化

Protocol 1Byte:此字段定義IP數(shù)據(jù)報的數(shù)據(jù)部分中使用的協(xié)議

Header Checksum 2Byte:16位IPV4頭校驗和字段用于對標頭進行錯誤檢查

Source address 4Byte:此字段是數(shù)據(jù)包發(fā)件人的IPV4地址。

Destination address 4Byte:該字段是數(shù)據(jù)包接收方的IPV4地址

Options:選項字段不常使用。

四、TCP協(xié)議解析

Source port (16 bits):標識發(fā)送端口

Destination port (16 bits):標識接收端口

Sequence number (32 bits):序列號,具有雙重作用,如果syn被設(shè)置成1,標志這是初始序列號,如果syn被設(shè)置成0,表示這是初始序列號,如果syn被設(shè)置成0,表示這是當(dāng)前會話的此段的第一個數(shù)據(jù)字節(jié)的累積序列號

Acknowledgment number (32 bits):如果設(shè)置ACK標志,則此字段的值是ACK發(fā)送方期望的下一個序列號

Data offset (4 bits):指定以32位為單位的tcp報頭的大小。最小標頭為5字,最大為15字,從而使其最小為20字節(jié),最大為60字節(jié),允許在標題中設(shè)置多達40字節(jié)的選項

Reserved (3 bits):供將來使用,并應(yīng)設(shè)置為零

Flags (9 bits) (aka Control bits):包含9個標志位

NS?(1 bit): ECN-nonce -?隱藏保護

CWR?(1 bit):?發(fā)送主機設(shè)置擁塞窗口減少(Cwr)標志,以表明它收到了設(shè)置了ecc標志的tcp段,并在擁塞控制機制中作出了響應(yīng)

ECE?(1 bit):?ECN-Echo具有雙重角色,這取決于SYN標志的值

URG?(1 bit):?指示緊急指針字段是有效的

ACK?(1 bit):?指示確認字段是有效的??蛻舳税l(fā)送的初始SYN數(shù)據(jù)包之后的所有數(shù)據(jù)包都應(yīng)該設(shè)置此標志

PSH?(1 bit):?推送功能,請求將緩沖數(shù)據(jù)推送到接收應(yīng)用程序

RST?(1 bit):重置連接

SYN?(1 bit):?同步序列號。只有從每一端發(fā)送的第一個數(shù)據(jù)包應(yīng)該設(shè)置此標志。其他一些標志和字段根據(jù)此標志更改含義,有些只有在設(shè)置1時才有效,而另一些則在0時才有效

FIN?(1 bit):?來自發(fā)送方的最后一包

Window size (16 bits):接收窗口的大小

Checksum (16 bits):16位校驗和字段用于對報頭、有效載荷和偽頭進行錯誤檢查

Urgent pointer (16 bits):如果設(shè)置了URG標志,則此16位字段與表示最后一個緊急數(shù)據(jù)字節(jié)的序列號之間的偏移量

Options (Variable 0–320 bits, divisible by 32):該字段的長度由數(shù)據(jù)偏移字段決定

五、處理文件

部分核心代碼如下:

此部分是對pcap(bytes)文件讀入,將每一個數(shù)據(jù)包數(shù)據(jù)作為一幀,判斷為IPV4-TCP數(shù)據(jù)后,將TCP里面的[src, dst,src_port,dst_port, seq, ack, flags, content]一幀幀提取,存儲在tcp_stream,此處即為提取pcap文件中所有的TCP流

此處是對于上面?zhèn)魅氲膖cp_stream,提取出我們想要指定的Tcpstream,如果flags_ack,flages_push為1時,即有Client或Server進行http請求,若此包被確認接收,則進行存儲(避免重傳,丟包的情況),判斷flags_fin為1時,結(jié)束循環(huán),返回指定的Tcp流。

六、完整代碼

TCP學(xué)習(xí):https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure

IPV4學(xué)習(xí):https://en.wikipedia.org/wiki/IPv4#Packet_structure

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

總結(jié)

以上是生活随笔為你收集整理的python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。