摘要:以字節(jié)表示的數(shù)據(jù)包長度。當(dāng)前數(shù)據(jù)包到達(dá)時(shí)間與第一個(gè)數(shù)據(jù)包的差值。的窗口大小僅用于數(shù)據(jù)包。如果你對的應(yīng)用實(shí)例感興趣,你可以看看我的項(xiàng)目上一篇入門對象
原文鏈接:http://zodiacg.net/2016/07/in...
本系列文章譯自thePacketGeek的系列文章。原創(chuàng)翻譯,轉(zhuǎn)載請注明出處。
目前在這一系列文章中我們已經(jīng)了解了如何捕獲數(shù)據(jù)包和使用 capture 對象,我們終于到了有趣的部分,開始對數(shù)據(jù)包進(jìn)行操作了!
當(dāng)我們捕獲了數(shù)據(jù)包后,它們以 packet 對象列表的形式存儲(chǔ)在 capture 對象中。這些 packet 對象的方法和屬性使我們能夠訪問數(shù)據(jù)包頭以及包的負(fù)載信息。在之前的文章中提到過,我們可以使用 only_summaries 參數(shù)來控制每個(gè)數(shù)據(jù)包保存的信息量。
數(shù)據(jù)包摘要屬性在捕獲時(shí)將 only_summaries 設(shè)置為 True 會(huì)使得不管捕獲的數(shù)據(jù)包的內(nèi)容是何種協(xié)議, packet 對象都具有固定的屬性集。其中最有用的屬性值有:
>>> cap = pyshark.FileCapture("test.pcap", only_summaries=True) >>> >>> dir(cap[0]) ["delta", "destination", "info", "ip id", "length", "no", "protocol", "source", "stream", "summary_line", "time", "window"]
delta : 當(dāng)前數(shù)據(jù)包和上一個(gè)數(shù)據(jù)包捕獲時(shí)間的差值。
destination : IP層的目標(biāo)地址。
info :應(yīng)用層數(shù)據(jù)的簡短摘要(比如"HTTP GET /resource_folder/page.html")。
ip id : IP標(biāo)識(shí)符字段。
length : 以字節(jié)表示的數(shù)據(jù)包長度。
no : 數(shù)據(jù)包在列表中的索引值。
protocol : 數(shù)據(jù)包中識(shí)別出的最高層級的協(xié)議。(譯注:HTTP數(shù)據(jù)包如果是JSON的數(shù)據(jù),此處可能是JSON而非HTTP)
source : IP層的源地址。
stream : 索引值,標(biāo)識(shí)出該數(shù)據(jù)包屬于哪一個(gè)TCP流(僅用于TCP數(shù)據(jù)包)。
summary_line : 將所有的摘要屬性輸出在一個(gè)tab分隔的字符串中。
time : 當(dāng)前數(shù)據(jù)包到達(dá)時(shí)間與第一個(gè)數(shù)據(jù)包的差值。
window : TCP的窗口大?。▋H用于TCP數(shù)據(jù)包)。
利用這些內(nèi)容可以做很多事情,打印出數(shù)據(jù)包摘要只是一個(gè)開始!利用這些數(shù)據(jù)可以做出很棒的可視化圖表來展示IP會(huì)話、帶寬使用、協(xié)議以及應(yīng)用的性能指標(biāo)(比如TCP數(shù)據(jù)流中的RTT值)。這都是很有用的分析,還有別的嗎?
完整的數(shù)據(jù)包屬性如果你不僅想從捕獲的數(shù)據(jù)包中獲取摘要信息,那么好好看看這部分吧。使用Wireshark和tshark內(nèi)建的解析器,PyShark可以將數(shù)據(jù)包的所有細(xì)節(jié)按層次分解。
比如我們先來深入研究一下DNS數(shù)據(jù)包,看一下數(shù)據(jù)包所具有的屬性。
>>> cap = pyshark.LiveCapture(interface="en0", bpf_filter="udp port 53") >>> cap.sniff(packet_count=50) >>> dns_1 = cap[0] >>> dns_2 = cap[1] >>> dns_1. #(tab auto-complete) dns_1.captured_length dns_1.highest_layer dns_1.length dns_1.transport_layer dns_1.dns dns_1.interface_captured dns_1.pretty_print dns_1.udp dns_1.eth dns_1.ip dns_1.sniff_time dns_1.frame_info dns_1.layers dns_1.sniff_timestamp
這其中有一些普通的數(shù)據(jù)包信息屬性,比如length,frame_info,以及time,還有pretty_print()方法用于以可讀性較強(qiáng)的方式顯示數(shù)據(jù)包(類似于Wireshark的詳細(xì)信息視圖)。
如果你仔細(xì)看的話能夠發(fā)現(xiàn)直接制定層次名的屬性(eth和ip),還有會(huì)根據(jù)數(shù)據(jù)包內(nèi)的協(xié)議而變動(dòng)的屬性(transport_layer和highest_layer)。
如果你要尋找特定類型的數(shù)據(jù)流量,這些屬性可以使得尋找感興趣的信息變得很簡單。
比如下面的腳本會(huì)打印出所有的DNS查詢和響應(yīng):
import pyshark cap = pyshark.LiveCapture(interface="en0", bpf_filter="udp port 53") cap.sniff(packet_count=10) def print_dns_info(pkt): if pkt.dns.qry_name: print "DNS Request from %s: %s" % (pkt.ip.src, pkt.dns.qry_name) elif pkt.dns.resp_name: print "DNS Response from %s: %s" % (pkt.ip.src, pkt.dns.resp_name) cap.apply_on_packets(print_dns_info, timeout=100)
會(huì)給出如下的結(jié)果:
DNS Request from 10.10.10.40: apple.com DNS Request from 10.10.10.1: apple.com DNS Request from 10.10.10.40: ipv6.icanhazip.com DNS Request from 10.10.10.1: ipv6.icanhazip.com DNS Request from 10.10.10.40: ipv4.icanhazip.com DNS Request from 10.10.10.1: ipv4.icanhazip.com動(dòng)態(tài)的層引用
使用上面提到的動(dòng)態(tài)變化的層屬性(比如transport_layer和highest_layer)讓我們在分析數(shù)據(jù)包時(shí)更靈活。
如果你對每個(gè)數(shù)據(jù)包都試圖訪問pkt.dns.qry_resp屬性,那么如果這個(gè)數(shù)據(jù)包不是DNS數(shù)據(jù)包就會(huì)返回AttributeError異常。傳輸層也有類似的問題,因?yàn)橛蠺CP和UDP兩種可能。我們可以使用動(dòng)態(tài)引用的層屬性來獲取源地址和目的地址,然后使用try/except來處理既不是TCP也不是UDP數(shù)據(jù)包的情況。
import pyshark cap = pyshark.FileCapture("test.pcap") def print_conversation_header(pkt): try: protocol = pkt.transport_layer src_addr = pkt.ip.src src_port = pkt[pkt.transport_layer].srcport dst_addr = pkt.ip.dst dst_port = pkt[pkt.transport_layer].dstport print "%s %s:%s --> %s:%s" % (protocol, src_addr, src_port, dst_addr, dst_port) except AttributeError as e: #ignore packets that aren"t TCP/UDP or IPv4 pass cap.apply_on_packets(print_conversation_header, timeout=100)
該腳本會(huì)輸出:
UDP 10.10.10.12:51554 --> 239.255.255.250:1900 UDP 10.10.10.12:51554 --> 239.255.255.250:1900 UDP 10.10.10.15:58803 --> 8.8.8.8:53 UDP 8.8.8.8:53 --> 10.10.10.15:58803 TCP 10.10.10.15:58632 --> 192.168.20.197:80 TCP 192.168.20.197:80 --> 10.10.10.15:58632 TCP 10.10.10.15:58632 --> 192.168.20.197:80無限的可能
從這幾個(gè)簡單的例子當(dāng)中我們可以看出,PyShark使我們能夠輕松的訪問所有的數(shù)據(jù)包細(xì)節(jié)。
在分類和處理多種不同協(xié)議的時(shí)候,可以使用條件語句來創(chuàng)造動(dòng)態(tài)的邏輯,你也可以尋找具有特定屬性的數(shù)據(jù)包來篩選特定類型的數(shù)據(jù)流量(當(dāng)然要注意處理AttributeError)。
希望你喜歡這一系列文章。如果你對PyShark的應(yīng)用實(shí)例感興趣,你可以看看我的Cloud-Pcap項(xiàng)目
上一篇:PyShark入門(3):capture對象
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38067.html
摘要:,和屬性是之前傳遞給或者的值。方法使得對象可以通過循環(huán)進(jìn)行遍歷。方法是另一種遍歷數(shù)據(jù)包的方式,它接受一個(gè)函數(shù)作為參數(shù)并將之作用于所有的數(shù)據(jù)包。下面的腳本會(huì)將所有的數(shù)據(jù)包加入到一個(gè)列表中并打印總數(shù)上一篇入門和模塊下一篇入門對象 原文鏈接:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創(chuàng)翻譯,轉(zhuǎn)載請注明出處。 我們已...
摘要:中進(jìn)行數(shù)據(jù)包分析的兩個(gè)典型方法是使用和模塊。僅用于在嗅探時(shí)使用的過濾條件。僅用于保存的捕獲文件的路徑格式。用于在讀取較大的捕獲時(shí)節(jié)省內(nèi)存。類似于使用或者進(jìn)行嗅探,過濾器可以用于確定進(jìn)入到返回的對象中的流量。 原文地址:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創(chuàng)翻譯,轉(zhuǎn)載請注明出處。 PyShark中進(jìn)行數(shù)據(jù)...
摘要:如主頁文檔中展示的打開存儲(chǔ)的捕獲文件從網(wǎng)絡(luò)接口上進(jìn)行捕獲使用或者方法建立對象后,在捕獲和數(shù)據(jù)包層面就會(huì)有多個(gè)方法和屬性可用。的強(qiáng)大在于可以調(diào)用內(nèi)建的所有數(shù)據(jù)包解碼器。后續(xù)文章中會(huì)說明需要那些措施來保留內(nèi)存。下一篇入門和模塊 原文地址:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創(chuàng)翻譯,轉(zhuǎn)載請注明出處。 文章作者...
摘要:命令提示符,其為管理員賬號(hào),擁有最高權(quán)限,能執(zhí)行所有操作普通用戶,沒有管理權(quán)限,不能執(zhí)行系統(tǒng)管理類操作。幾個(gè)基礎(chǔ)命令探測網(wǎng)絡(luò)目標(biāo)主機(jī)與當(dāng)前主機(jī)之間的連通性終止命令執(zhí)行回顯幾個(gè)關(guān)機(jī)命令Terminal用戶界面GUI:KDE GNome CLI:bashzshshcshtcshksh 查看所用的shell類型:[root@iZerb5rob3dcf6Z ~]# echo $SHELL /...
摘要:指定鏡像綁定端口出錯(cuò)。查看容器顯示,沒有啟動(dòng)成功。啟動(dòng)命令網(wǎng)卡信息背景補(bǔ)充構(gòu)建容器時(shí),使用的端口映射為解決方法改為使用網(wǎng)卡地址,指定端口號(hào)。 代碼文件 [root@Optimus /]# cd docker-training/ [root@Optimus docker-training]# ls centos7 mysql php-fpm README.md wordpress...
閱讀 3658·2021-11-25 09:43
閱讀 652·2021-09-22 15:59
閱讀 1755·2021-09-06 15:00
閱讀 1778·2021-09-02 09:54
閱讀 697·2019-08-30 15:56
閱讀 1189·2019-08-29 17:14
閱讀 1849·2019-08-29 13:15
閱讀 889·2019-08-28 18:28