簡體   English   中英

使用 PyShark 打印數據包協議類型

[英]Print packet protocol type using PyShark

我想打印數據包的所有協議(即:ICMP、ARP、TCP、UDP 等),但我只得到 TCP 和 UDP。我正在使用 pyshark 和 python 來捕獲數據包。

import pyshark 

capture = pyshark.LiveCapture(interface='eth0')
capture.sniff(timeout=50)
for packet in capture.sniff_continuously():
    localtime = time.asctime(time.localtime(time.time()))
    protocol = packet.transport_layer
    src_addr = packet.ip.src
    src_port = packet[packet.transport_layer].srcport
    dst_addr = packet.ip.dst
    dst_port = packet[packet.transport_layer].dstport

    print (localtime,"\t",protocol,"\t", src_addr,"\t", src_port,"\t", dst_addr, "\t", dst_port)

您只收到TCPUDP數據包的原因是因為您正在調用transport_layer

參考: Pyshark 動態層參考

這是查看單個數據包層的一種方法:

import pyshark

capture = pyshark.LiveCapture('en0')
for packet in capture:
    protocol = packet.layers
    print(protocol)
    filtered...
    [<ETH Layer>, <IP Layer>, <TCP Layer>, <NBSS Layer>, <SMB2 Layer>]
    [<ETH Layer>, <IP Layer>, <TCP Layer>]
    [<ETH Layer>, <IP Layer>, <UDP Layer>, <QUIC Layer>]
    [<ETH Layer>, <IP Layer>, <TCP Layer>, <HTTP Layer>]
    [<ETH Layer>, <IP Layer>, <TCP Layer>, <TLS Layer>]
    [<ETH Layer>, <ARP Layer>]
    truncated...

您可以通過這種方式訪問highest packet layer

import pyshark

capture = pyshark.LiveCapture('en0')
for packet in capture:
    layer = packet.highest_layer
    print(layer)
    filtered...
    ARP
    DNS
    TCP
    HTTP
    UDP
    truncated...

我不確定您的用例是什么來解析與數據包相關的所有數據。

這是我寫的關於使用pyshark解析數據包的文檔

Here is some documentation for pyshark提供有關解析數據包數據的信息。

如果您需要任何其他幫助,請告訴我,我會幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM