国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PyShark入門(4):packet對象

cooxer / 2257人閱讀

摘要:以字節表示的數據包長度。當前數據包到達時間與第一個數據包的差值。的窗口大小僅用于數據包。如果你對的應用實例感興趣,你可以看看我的項目上一篇入門對象

原文鏈接:http://zodiacg.net/2016/07/in...

本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。

目前在這一系列文章中我們已經了解了如何捕獲數據包和使用 capture 對象,我們終于到了有趣的部分,開始對數據包進行操作了!

當我們捕獲了數據包后,它們以 packet 對象列表的形式存儲在 capture 對象中。這些 packet 對象的方法和屬性使我們能夠訪問數據包頭以及包的負載信息。在之前的文章中提到過,我們可以使用 only_summaries 參數來控制每個數據包保存的信息量。

數據包摘要屬性

在捕獲時將 only_summaries 設置為 True 會使得不管捕獲的數據包的內容是何種協議, 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 : 當前數據包和上一個數據包捕獲時間的差值。

destination : IP層的目標地址。

info :應用層數據的簡短摘要(比如"HTTP GET /resource_folder/page.html")。

ip id : IP標識符字段。

length : 以字節表示的數據包長度。

no : 數據包在列表中的索引值。

protocol : 數據包中識別出的最高層級的協議。(譯注:HTTP數據包如果是JSON的數據,此處可能是JSON而非HTTP)

source : IP層的源地址。

stream : 索引值,標識出該數據包屬于哪一個TCP流(僅用于TCP數據包)。

summary_line : 將所有的摘要屬性輸出在一個tab分隔的字符串中。

time : 當前數據包到達時間與第一個數據包的差值。

window : TCP的窗口大小(僅用于TCP數據包)。

利用這些內容可以做很多事情,打印出數據包摘要只是一個開始!利用這些數據可以做出很棒的可視化圖表來展示IP會話、帶寬使用、協議以及應用的性能指標(比如TCP數據流中的RTT值)。這都是很有用的分析,還有別的嗎?

完整的數據包屬性

如果你不僅想從捕獲的數據包中獲取摘要信息,那么好好看看這部分吧。使用Wireshark和tshark內建的解析器,PyShark可以將數據包的所有細節按層次分解。
比如我們先來深入研究一下DNS數據包,看一下數據包所具有的屬性。

>>> 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

這其中有一些普通的數據包信息屬性,比如length,frame_info,以及time,還有pretty_print()方法用于以可讀性較強的方式顯示數據包(類似于Wireshark的詳細信息視圖)。
如果你仔細看的話能夠發現直接制定層次名的屬性(ethip),還有會根據數據包內的協議而變動的屬性(transport_layerhighest_layer)。
如果你要尋找特定類型的數據流量,這些屬性可以使得尋找感興趣的信息變得很簡單。
比如下面的腳本會打印出所有的DNS查詢和響應:

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)

會給出如下的結果:

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
動態的層引用

使用上面提到的動態變化的層屬性(比如transport_layerhighest_layer)讓我們在分析數據包時更靈活。
如果你對每個數據包都試圖訪問pkt.dns.qry_resp屬性,那么如果這個數據包不是DNS數據包就會返回AttributeError異常。傳輸層也有類似的問題,因為有TCP和UDP兩種可能。我們可以使用動態引用的層屬性來獲取源地址和目的地址,然后使用try/except來處理既不是TCP也不是UDP數據包的情況。

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)

該腳本會輸出:

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
無限的可能

從這幾個簡單的例子當中我們可以看出,PyShark使我們能夠輕松的訪問所有的數據包細節。
在分類和處理多種不同協議的時候,可以使用條件語句來創造動態的邏輯,你也可以尋找具有特定屬性的數據包來篩選特定類型的數據流量(當然要注意處理AttributeError)。

希望你喜歡這一系列文章。如果你對PyShark的應用實例感興趣,你可以看看我的Cloud-Pcap項目


上一篇:PyShark入門(3):capture對象

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38067.html

相關文章

  • PyShark入門(3):capture對象

    摘要:,和屬性是之前傳遞給或者的值。方法使得對象可以通過循環進行遍歷。方法是另一種遍歷數據包的方式,它接受一個函數作為參數并將之作用于所有的數據包。下面的腳本會將所有的數據包加入到一個列表中并打印總數上一篇入門和模塊下一篇入門對象 原文鏈接:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。 我們已...

    Youngdze 評論0 收藏0
  • PyShark入門(2):FileCapture和LiveCapture模塊

    摘要:中進行數據包分析的兩個典型方法是使用和模塊。僅用于在嗅探時使用的過濾條件。僅用于保存的捕獲文件的路徑格式。用于在讀取較大的捕獲時節省內存。類似于使用或者進行嗅探,過濾器可以用于確定進入到返回的對象中的流量。 原文地址:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。 PyShark中進行數據...

    joyqi 評論0 收藏0
  • PyShark入門(1):簡介

    摘要:如主頁文檔中展示的打開存儲的捕獲文件從網絡接口上進行捕獲使用或者方法建立對象后,在捕獲和數據包層面就會有多個方法和屬性可用。的強大在于可以調用內建的所有數據包解碼器。后續文章中會說明需要那些措施來保留內存。下一篇入門和模塊 原文地址:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。 文章作者...

    includecmath 評論0 收藏0
  • Linux入門之Linux終端管理與命令入門

    摘要:命令提示符,其為管理員賬號,擁有最高權限,能執行所有操作普通用戶,沒有管理權限,不能執行系統管理類操作。幾個基礎命令探測網絡目標主機與當前主機之間的連通性終止命令執行回顯幾個關機命令Terminal用戶界面GUI:KDE GNome CLI:bashzshshcshtcshksh 查看所用的shell類型:[root@iZerb5rob3dcf6Z ~]# echo $SHELL /...

    Tecode 評論0 收藏0
  • 【Docker實戰之入門】Dockerfile詳細分析:構建docker鏡像(4)構建動態網站Wor

    摘要:指定鏡像綁定端口出錯。查看容器顯示,沒有啟動成功。啟動命令網卡信息背景補充構建容器時,使用的端口映射為解決方法改為使用網卡地址,指定端口號。 代碼文件 [root@Optimus /]# cd docker-training/ [root@Optimus docker-training]# ls centos7 mysql php-fpm README.md wordpress...

    yuanxin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<