<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    數據包捕獲

    如何向Libpcap添加新的捕獲類型

    如果必須引入一個或多個新DLT_*值,則還必須在Wireshark中將這些DLT_*值 添加到wiretap **/ pcap-common.c中,這可能意味著向wtap.h和其中的表中添加一種或多種 WTAP_ENCAP類型。 wiretap/ wtap.c。然后,您必須為一個或多個鏈路層協議編寫一個或多個Dissector,并 通過調用來使用適當的WTAP_ENCAP值使它們在Dissector表中進行注冊。encap_table[] wtap_encap dissector_add_uint()

    Extcap:開發人員指南

    extcap接口是一個通用的插件接口,它允許外部二進制直接在Wireshark中充當捕獲接口。它用于場景的來源不是傳統的捕獲模型(從接口,管道,文件等進行實時捕獲)的場景中。典型示例是將某種深奧的硬件連接到主Wireshark應用程序。

    如果沒有extcap,則始終可以通過直接寫入捕獲文件來實現捕獲:

    *使用捕獲文件進行傳統捕獲的Bash示例。 *

    $ the-esoteric-binary –the-strange-flag –interface=stream1 –file dumpfile.pcap &
    $ wireshark dumpfile.pcap

    但是extcap接口允許使用Wireshark GUI輕松建立和配置這種連接。

    extcap子系統由GUI連續自動調用的多個extcap二進制文件組成。在以下各章中,我們將它們稱為“ extcaps”。

    Extcaps可以是extcap目錄中的任何二進制文件或腳本。請注意,在調用之前,腳本必須是可執行的,而無需在腳本解釋器前添加前綴。

    重要:
    Windows用戶由于限制,直接調用腳本可能并不總是有效。在這種情況下,可以提供批處理文件,然后該批處理文件又執行腳本。

    當Wireshark啟動extcap時,它會自動將其安裝路徑(c:\ Program Files \ Wireshark \)添加到DLL搜索路徑中,以便可以找到extcap庫依賴項(并非旨在手動啟動)。這是有目的的。extcap文件夾中僅應有extcap程序(可執行文件,python腳本等)以減少啟動時間,而Wireshark則不嘗試執行其他文件類型。

    Extcap命令行界面

    實際捕獲在設置過程之后運行,該設置過程可以由用戶手動進行,也可以由GUI自動進行。對每個extcap執行所有執行的步驟。

    查詢可用接口

    $ extcapbin –extcap-interfaces

    此調用必須打印該extcap的現有接口,并且必須返回0。輸出必須符合為extcap指定的語法,并且該輸出在doc / extcap.4生成的手冊頁(在構建目錄中)中指定。

    從Wireshark 2.9開始,此調用擴展了--extcap-version=x.x,它將始終代表調用Wireshark的版本信息。這可以用于更改行為,具體取決于所討論的Wireshark版本。

    *接口查詢的示例調用。 *
    $ extcap_example.py –extcap-interfaces –extcap-version=3.0
    extcap {version=1.0}{help=Some help url}
    interface {value=example1}{display=Example interface 1 for extcap}
    interface {value=example2}{display=Example interface 2 for extcap}

    extcap句子的版本將用于在Wireshark的about對話框中顯示extcap界面的版本信息。

    每個接口的值將在后續調用中用作接口名稱IFACE。

    使用help參數,界面可以為extcap實用程序提供通用的幫助URL。

    向每個界面要求DLT

    對于步驟1返回的所有接口的所有有效DLT,將查詢extcap二進制文件。

    $ extcap_example.py –extcap-dlts –extcap-interface IFACE

    該調用必須為指定的接口打印有效的DLT。該調用針對所有接口進行,并且必須返回0。

    *DLT查詢的示例。 *
    $ extcap_example.py –extcap-interface IFACE –extcap-dlts
    dlt {number=147}{name=USER1}{display=Demo Implementation for Extcap}

    既不提供接口列表也不提供DLT列表的二進制文件或腳本將不會顯示在extcap接口列表中。

    extcap配置界面

    要求extcap二進制文件用于特定接口的配置

    $ extcap_example.py –extcap-interface IFACE –extcap-config

    每個接口可以具有僅對該接口有效的自定義選項。這些配置選項在運行實際捕獲時在命令行上指定。為了允許最終用戶指定某些選項,可以使用extcap config參數提供此類選項。

    要共享接口可用的選項,extcap響應命令--extcap-config,該命令顯示所有可用選項(又名其他命令行選項)。

    這些選項通過對話框自動顯示給用戶以顯示各個界面。

    *接口選項示例。 *

    $ extcap_example.py –extcap-interface IFACE –extcap-config
    arg {number=0}{call=–delay}{display=Time delay}{tooltip=Time delay between packages}{type=integer}{range=1,15}{required=true}
    arg {number=1}{call=–message}{display=Message}{tooltip=Package message content}{placeholder=Please enter a message here …}{type=string}
    arg {number=2}{call=–verify}{display=Verify}{tooltip=Verify package content}{type=boolflag}
    arg {number=3}{call=–remote}{display=Remote Channel}{tooltip=Remote Channel Selector}{type=selector}
    arg {number=4}{call=–server}{display=IP address for log server}{type=string}{validation=\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b}
    value {arg=3}{value=if1}{display=Remote1}{default=true}
    value {arg=3}{value=if2}{display=Remote2}{default=false}

    現在,用戶可以單擊選項并進行更改。當捕獲啟動時,它們被發送到extcap。

    共有三種選擇:

    Flag 例如,boolflag期望出現的選項將對應的條目設置為true,否則設置為false
    Value 是基于值的選項,每個選項都可以通過命令行調用獲得單個值
    Selection 選擇項可以在命令行中多次顯示。兩者都期望配置列表中后續的“值”項,以及通過arg選擇的相應參數

    捕獲過程

    列出接口并由用戶自定義配置后,便開始捕獲。

    $ extcap_example.py –extcap-interface IFACE [params] –capture [–extcap-capture-filter CFILTER]
    –fifo FIFO

    要運行捕捉,extcap必須實現--capture--extcap-capture-filter--fifo選項。

    它們由Wireshark自動添加,從而打開fifo進行讀取。所有其他選項將自動添加以運行捕獲。extcap接口與所有其他接口一樣使用(意味著在多個接口上進行捕獲以及支持停止和重新啟動捕獲)。

    在Windows上執行基于腳本的extcap

    要在Windows上使用腳本,請在extcap文件夾中生成一個< scriptname> .bat,其中包含以下內容(在本例中為基于Python的extcap實用程序):

    @echo off
    < Path to python interpreter> < Path to script file> %*

    Windows無法直接執行大多數腳本(Powershell是一個例外),除了VBScript和PowerShell外,它也適用于所有其他基于腳本的格式

    Extcap參數

    extcap界面提供了生成GUI對話框以設置和修改extcap二進制文件設置的可能性。

    所有選項都必須提供一個數字,以標識它們。沒有NUMBER可提供兩次。同樣,所有選項都必須顯示元素CALLDISPLAY,其中call在命令行上提供參數名稱,并在GUI中顯示名稱。

    另外TOOLTIP,可以提供PLACEHOLDER,這將在GUI內向用戶提供有關在此字段中輸入內容的說明。

    這些選項確實具有類型,支持以下類型:

    INTEGER, UNSIGNED, LONG, DOUBLE 這提供了一個用于輸入給定數據類型的數值的字段。可以提供DEFAULT值以及RANGE arg {number=0}{call=–delay}{display=Time delay}{tooltip=Time delay between packages}{type=integer}{range=1,15}{default=0}
    STRING 讓用戶為捕獲提供一個字符串arg {number=1}{call=–server}{display=IP Address}{tooltip=IP Address for log server}{type=string}{validation=\b(?:(?:25[0-5]
    PASSWORD 讓用戶為捕獲提供帶掩碼的字符串。保存extcap配置時,不會保存密碼字符串 arg {number=0}{call=–password}{display=The user password}{tooltip=The password for the connection}{type=password}
    BOOLEAN, BOOLFLAG 這提供了設置真/假值的可能性。如果將BOOLFLAG值設置為true,則僅會在命令行中顯示,否則它們將不會添加到extcap接口的命令行調用中 arg {number=2}{call=–verify}{display=Verify}{tooltip=Verify package content}{type=boolflag}
    FILESELECT 讓用戶提供文件路徑。如果提供了MUSTEXIST = true,則GUI會為用戶提供一個用于選擇文件的對話框。當使用MUSTEXIST = false時,GUI會為用戶提供一個文件對話框以保存文件。 arg {number=3}{call=–logfile}{display=Logfile}{tooltip=A file for log messages}{type=fileselect}{mustexist=false}
    SELECTOR, RADIO, MULTICHECK 選項字段,用戶可以從中選擇一個或多個選項。如果為值項提供了PARENT,則MULTICHECK和SELECTOR的選項字段將以樹狀結構顯示。SELECTOR和RADIO值必須提供一個默認值,該默認值將是為此參數提供給extcap二進制文件的值。 arg {number=3}{call=–remote}{display=Remote Channel}{tooltip=Remote Channel Selector}{type=selector}value {arg=3}{value=if1}{display=Remote1}{default=true}value {arg=3}{value=if2}{display=Remote2}{default=false}

    重新加載選擇器

    可以從Wireshark中的extcap應用程序的配置對話框中重新加載選擇器。使用reload參數(默認為false),可以將該條目標記為可重載。

    arg {number=3}{call=–remote}{display=Remote Channel}{tooltip=Remote Channel Selector}{type=selector}{reload=true}{placeholder=Load interfaces…}

    定義之后,用戶將在此extcap應用程序的配置對話框中顯示一個按鈕,在這種情況下為文本加載接口...'',如果未提供任何文本,則為通用的重新加載’’文本。

    然后,使用所有填寫的參數和附加參數再次調用extcap實用程序--extcap-reload-option <option_name>。希望此選項返回一個值部分,就像在正常配置期間那樣。然后將提供的選項列表顯示為選擇項,如果適用,將重新選擇先前選擇的選項。

    論證驗證

    可以設置參數,{required=true}以強制使用提供的值,然后才能使用extcap選項對話框開始捕獲。如果通過簡單的雙擊啟動extcap,則不會進行檢查。為客戶標記了必填字段,以確保最終客戶可以看到所需參數。

    此外,還可以使用正則表達式來檢查文本和數字參數,該正則表達式是使用validation屬性提供的(請參見上面的示例)。這種檢查的語法與Qt RegExp類的語法相同。此功能僅在Wireshark的Qt版本中有效。

    論證驗證

    可以設置參數,{required=true}以強制使用提供的值,然后才能使用extcap選項對話框開始捕獲。如果通過簡單的雙擊啟動extcap,則不會進行檢查。為客戶標記了必填字段,以確保最終客戶可以看到所需參數。

    此外,還可以使用正則表達式來檢查文本和數字參數,該正則表達式是使用validation屬性提供的(請參見上面的示例)。這種檢查的語法與Qt RegExp類的語法相同。此功能僅在Wireshark的Qt版本中有效。

    $ extcap_example.py –extcap-interfaces
    extcap {version=1.0}{display=Example extcap interface}
    interface {value=example1}{display=Example interface 1 for extcap}
    interface {value=example2}{display=Example interface 2 for extcap}
    control {number=0}{type=string}{display=Message}{tooltip=Package message content. Must start with a capital letter.}{validation=[A-Z]+}{required=true}
    control {number=1}{type=selector}{display=Time delay}{tooltip=Time delay between packages}
    control {number=2}{type=boolean}{display=Verify}{default=true}{tooltip=Verify package content}
    control {number=3}{type=button}{display=Turn on}{tooltip=Turn on or off}
    control {number=4}{type=button}{role=logger}{display=Log}{tooltip=Show capture log}
    value {control=1}{value=1}{display=1 sec}
    value {control=1}{value=2}{display=2 sec}{default=true}

    控制項

    控件類似于ARGUMENTS,但沒有CALL元素。extcap和用戶都可以在啟動時為所有控件提供默認值,并且大多數控件都可以在捕獲過程中進行更改(取決于控件的類型)。

    所有控件都必須提供一個NUMBER,以標識它們。不能提供兩次NUMBER。同樣,所有選項都必須顯示元素TYPE和DISPLAY,其中TYPE提供要添加到工具欄的控件的類型,并在GUI中顯示名稱。

    另外,可以提供TOOLTIP和PLACEHOLDER,這將在GUI中為用戶提供解釋。

    捕獲期間,extcap可能會在GUI中禁用(啟用)除記錄器,幫助和還原按鈕之外的所有控件。這可能是因為一次設置操作或需要一些時間才能完成的操作。

    用戶更改的所有控制值(不等于默認值)將在開始捕獲時發送到extcap實用程序。取決于實現,extcap實用程序可以選擇放棄初始值并設置新值。

    這些類型定義為控件:

    BOOLEAN 這提供了一個復選框,可以設置真/假值。extcap實用程序可以在啟動時設置默認值,并且可以在捕獲時更改(設置)并接收值更改。如果開始捕獲,則GUI將發送與默認值不同的值。有效載荷是一個字節,二進制值為0或1。有效命令:設置值,啟用,禁用。
    BUTTON 這提供了一個具有不同角色的按鈕:控制按下此按鈕將發送信號。如果未配置任何角色,則為默認設置。僅在捕獲時啟用該按鈕。extcap實用程序可以在啟動時設置按鈕文本,并且可以在捕獲時更改(設置)按鈕文本并接收按鈕按下信號。不捕獲時,該按鈕被禁用,并且按鈕文本恢復為默認文本。有效載荷可以是按鈕文本,也可以是空的(信號)。有效命令:設置值,啟用,禁用。記錄儀這提供了一種記錄器機制,其中extcap實用程序可以發送要在日志窗口中顯示的日志條目。這種通信是單向的。有效負載是日志條目,應以換行符結尾。最大長度為65535字節。有效命令:設置日志條目,添加日志條目。Set命令將在添加條目之前清除日志。救命如果已配置,此按鈕將打開幫助頁面。該角色沒有控制權,將不會在通信中使用。有效命令:無。恢復此按鈕會將所有控制值恢復為默認值。該角色沒有控制權,將不會在通信中使用。僅當不捕獲時才啟用該按鈕。有效命令:無。
    SELECTOR 這提供了一個帶有固定值的組合框,可以選擇。extcap實用程序可以在啟動時設置默認值,并可以在捕獲時添加和刪除值以及接收值選擇的更改。如果開始捕獲,則GUI將發送與默認值不同的值。有效負載是帶有值的字符串,如果此值不同于顯示值,則可選地是具有顯示值的字符串。這兩個字符串值由空字符分隔。有效命令:設置所選值,添加值,刪除值,啟用,禁用。如果value為空,那么Remove命令將刪除所有條目。
    STRING 這為文本編輯行提供了設置字符串或可以用字符串表示的任何值(整數,浮點數,日期等)的可能性。extcap實用程序可以在啟動時設置默認字符串值,并且可以在捕獲時更改(設置)并接收值更改。如果開始捕獲,則GUI將發送與默認值不同的值。有效負載是帶有值的字符串。最大長度為32767字節。用于控制的有效命令:設置值,啟用,禁用。元素VALIDATION允許提供一個正則表達式字符串,該字符串用于檢查用戶輸入是否超出正常數據類型或范圍檢查的有效性。反斜杠必須轉義(如\ b中的\ b)。

    留言內容

    除了控件之外,還可以從extcap實用程序向用戶發送一條消息。該消息可以放在狀態欄中,也可以顯示在用戶必須接受的信息,警告或錯誤對話框中。該消息不使用NUMBER參數,因此可以具有任何值。

    控制協議

    通過控制管道進行通信的協議具有6字節的固定大小報頭和0-65535字節的有效負載。

    控制包:

    Sync Pipe Indication (1 byte)
    Message Length (3 bytes network order)
    Control Number (1 byte)
    Command (1 byte)
    Payload (0 - 65535 bytes)

    同步管道指示:

    common sync pipe 指示。該協議使用值“T”。

    Message長度:

    Payload 長度+ 2個字節,用于控制號和命令。

    控制序列號:

    標識控件的唯一編號。該數字還給出了界面工具欄中控件的順序。
    命令和控件應用程序:

    Command Byte Command Name Control type
    0 Initialized none
    1 Set boolean / button / logger / selector / string
    2 Add logger / selector
    3 Remove selector
    4 Enable boolean / button / selector / string
    5 Disable boolean / button / selector / string
    6 Statusbar message none
    7 Information message none
    8 Warning message none
    9 Error message none

    Initialized在開始捕獲后發送所有用戶更改的控制值時,該命令將從GUI發送到extcap實用程序。這表明GUI已準備好接收控制值。

    GUI將僅發送InitializedSet命令。extcap實用程序不應發送Initialized命令。

    具有未知控制編號或命令的消息將被靜默忽略。

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类