メイン 他の Wireshark で Lua Dissector を使用する方法

Wireshark で Lua Dissector を使用する方法



世界最高のネットワーク パケット キャプチャ ツールの 1 つである Wireshark を使用すると、特定のデータ パケットを取得して、オフラインとリアルタイムの両方で分析できます。このアプリは、ネットワークを流れるデータを詳しく調べて、問題や異常を発見できるようにする手段であると考えてください。

  Wireshark で Lua Dissector を使用する方法

パケットのデータの特定の部分を分析したい場合は、ディセクタを使用できます。名前が示すように、このプロセスはコードを「分析」し、注意が必要な特定の側面を切り取ることができます。このチュートリアルでは、Lua スクリプト言語を使用して Wireshark でディセクタを作成および使用する方法を説明します。

始める前に – ディセクターについて知っておくべきこと

ディセクタは Wireshark でデータ パケットの一部を分析する簡単な方法を提供しますが、効果的に機能するにはいくつかのプロトコルに従う必要があります。これらのプロトコルには次のものが含まれます。

  • 作成するすべてのディセクターは、異なるプロトコルからの設定されたタイプのペイロードを処理するために登録する必要があります。この登録を完了するには、以下に示すように、「Proto」オブジェクトをディセクターに割り当てる必要があります。
  • Wireshark 経由で dissector を呼び出すと、アプリから 3 つの情報を受け取ります。
    • TVB オブジェクト – データ パケットからの TVB バッファー。
    • TreeItem オブジェクト – データ ツリー内の単一ノードを表すツリー ルート。
    • Pinfo オブジェクト – パケット情報レコード。
  • データ パケットが「Proto」オブジェクトに設定した DissectorTable と一致する場合にのみ、ディセクターを呼び出すことができます。
    • 「Decode As」機能を使用してディセクターの使用を強制することで、この要件を回避できます。ただし、それでも、「Proto」オブジェクトに設定した DissectorTable が正しいタイプである場合にのみ、ディセクターを強制できます。

LUA を使用したディセクターのセットアップ

Wireshark は C プログラミング言語で書かれており、それを使用しているため、ほとんどのディセクターも同様に C で書かれています。ただし、Lua を使用することもできます。このスクリプト言語は C よりも単純であるため、コーディングの初心者や、より軽量な言語を使用してディセクターを作成したいだけの人にとってもアクセスしやすい言語です。

コードは単純になりますが、Lua を使用すると得られるディセクタは、通常、C を使用して作成するものよりも遅くなります。それでも、Lua を使用して Wireshark ディセクタを作成する場合は、次の手順に従う必要があります。

ステップ 1 – Wireshark で Lua をセットアップする

これまで Wireshark で Lua を使用したことがない場合は、Lua をセットアップする必要があります。

スナップスコアはどのように上がりますか
  1. 「ヘルプ」をクリックし、「Wireshark について」をクリックします。
  2. 「フォルダ」をクリックします。
  3. 次のいずれかを選択して、アクティブな Lua スクリプトを作成します。
    • グローバル Lua プラグイン
    • 個人用 Lua プラグイン
    • 個人的

アクティブ化すると、Wireshark を起動するたびにスクリプトが準備完了になります。スクリプトに変更を加えるたびに、Wireshark を再起動して変更を登録するか、「Ctrl + Shift + L」を押してすべての Lua スクリプトをリロードして変更を有効にする必要があります。

ステップ 2 – ディセクターを作成するための基本的な手順

すでに Lua に精通している場合は、次の手順を使用して、Wireshark で動作する独自のディセクター スクリプトを作成できます。

  • ディセクタのプロトコルを宣言します。これには、プロトコル ツリーで使用する長い名前と、ディセクタの表示フィルタ名として機能する短い名前の両方を設定する必要があります。
    • 次の 3 つのフィールドを適切なタイプで作成します。
    • 質問 - 質問の種類を表示します。
    • 回答 – 回答のタイプを表示します。
  • MessageType – パケットが質問または回答を要求しているかどうかを示します。
  • Wireshark がフィールドを表示する方法を認識できるようにフィールドを登録します。フィールドが登録されていない場合、「Lua エラー」メッセージが表示され、通常はツリー アイテムの ProtoField が無効であることが示されます。
  • 前述の Pinfo (パケットに関するデータを含む) と Tree Items (サブツリーに追加するツリーの作成) を含む分析関数を作成します。 TCP の上に置かれる「バッファ」も作成する必要があります。
  • Wireshark がディセクタを使用する必要があるプロトコルとポートの両方を指定します。たとえば、プロトコルを「TCP」に設定し、ポート番号を使用したいものに設定できます。

ステップ 3 – ディセクターを Wireshark に追加する

現時点では、あなたの解剖器は電気のない電球のようなものです。それは存在しますが、それに何らかの電力を供給できるまでは役に立ちません。つまり、ディセクターはまだ Wireshark に追加されていないため、次の手順に従って手動で追加して実行する必要があります。

フォルダオプションウィンドウズ10にアクセスする方法
  1. 「ヘルプ」をクリックし、「Wireshark について」メニューに進みます。
  2. 「フォルダー」タブを選択して、Lua ファイルのパスのリストを見つけます。
  3. 「個人用 Lua プラグイン」を選択します。必要に応じてディレクトリを作成します。
  4. 作成した Lua ファイルをコピーし、「Personal Lua Plugins」ディレクトリに貼り付けます。 Wireshark をリロードしてディセクターをオンにします。

キャプチャしたパケットの一部を開いて、新しいディセクターでテストを実行することをお勧めします。 Wireshark は、メッセージ タイプ (質問または回答) およびチェックの結果に関する情報とともに、ディセクタに選択した長い名前を示すメッセージを配信する必要があります。

サンプルコード

これまでにディセクターを作成したことがない場合 (または Lua を初めて使用する場合)、 ワイヤーシャーク 試してみる便利なサンプル ディセクターが提供されています。

local p_multi = Proto("multi", "MultiProto");
local vs_protos = {
    [2] = "mtp2",
    [3] = "mtp3",
    [4] = "alcap",
    [5] = "h248",
    [6] = "ranap",
    [7] = "rnsap",
    [8] = "nbap"
}
local f_proto = ProtoField.uint8("multi.protocol", "Protocol", base.DEC, vs_protos)
local f_dir = ProtoField.uint8("multi.direction", "Direction", base.DEC, { [1] = "incoming", [0] = "outgoing"})
local f_text = ProtoField.string("multi.text", "Text")
p_multi.fields = { f_proto, f_dir, f_text }
local data_dis = Dissector.get("data")
local protos = {
    [2] = Dissector.get("mtp2"),
    [3] = Dissector.get("mtp3"),
    [4] = Dissector.get("alcap"),
    [5] = Dissector.get("h248"),
    [6] = Dissector.get("ranap"),
    [7] = Dissector.get("rnsap"),
    [8] = Dissector.get("nbap"),
    [9] = Dissector.get("rrc"),
    [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
    [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function p_multi.dissector(buf, pkt, tree)
    local subtree = tree:add(p_multi, buf(0,2))
    subtree:add(f_proto, buf(0,1))
    subtree:add(f_dir, buf(1,1))
    local proto_id = buf(0,1):uint()
    local dissector = protos[proto_id]
    if dissector ~= nil then
        -- Dissector was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two bytes).
        dissector:call(buf(2):tvb(), pkt, tree)
    elseif proto_id < 2 then
        subtree:add(f_text, buf(2))
        -- pkt.cols.info:set(buf(2, buf:len() - 3):string())
    else
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

ポストディセクターと連鎖ディセクター

Lua でのディセクターの作成をマスターしたら、ディセクターの使用法をもう少し詳しく調べてみることをお勧めします。 Wireshark は、より多くの機能を提供する 2 つの追加タイプのディセクター (ポストディセクターとチェーン ディセクター) を提供します。

ポストディセクターは、パケットに対して実行したすべてのディセクターの最終チェックによく似ています。これを登録すると、Wireshark が使用する他のすべてのディセクターを呼び出したときに通知を受け取ることができ、これを使用して「プロトコル」列と「情報」列をフィルタリングできます。この機能は、データセット間に長いギャップがあり、それぞれを個別に呼び出すことができないセッションで複数のパケットをフィルタリングして除外する場合に特に便利です。

ディセクターをチェーンすると、単一のディセクターのデータにアクセスできるようになり、(少なくとも以前に使用したディセクターによるフィルター処理という点では) 同様の機能が提供されます。ここでの主な利点は、チェーンされたディセクターがすべてのパケットを再度実行する必要がなく、元のディセクターが再度実行されるのを待たなくても結果が得られることです。

Lua での分析

Wireshark がすでに C (自然言語) でディセクターを作成する機能を提供していることを考えると、Lua でディセクターを作成する必要性は感じられないかもしれません。それでも、C に慣れていない人や、すでに Lua をマスターしている人は、Lua の軽量スクリプトによりディセクタの作成が簡単になることに気づくかもしれません。確かに、C ベースのディセクターと比較してプロセスを実行するときの読み込み時間は長くなりますが、それとは関係なくオプションがあると便利です。

それでは、皆様のご意見を伺いたいと思います。 Wireshark でディセクターをどのくらいの頻度で使用しますか?以前に C でディセクタを作成してみたことがありますか? Lua でディセクタを作成することでどのようなメリットがあると思いますか?以下のコメントセクションでお知らせください。

興味深い記事

エディターズチョイス

Venmoで誰かのブロックを解除する方法
Venmoで誰かのブロックを解除する方法
誰もが目に見える送金のアイデアにワクワクしているわけではありませんが、Venmoが成長しており、近い将来さらに多くのトランザクションを処理する軌道に乗っていることは否定できません。 PayPalは、彼らが約4000万ドルを持っていると報告しました
Android から USB フラッシュ ドライブに写真を転送する方法
Android から USB フラッシュ ドライブに写真を転送する方法
Android フォンから PC に写真を転送したい場合があります。または、安全なストレージを使用してイメージをバックアップすることにした場合もあります。どちらの方法でも、USB フラッシュ ドライブを使用してプロセスを完了することができます。
Microsoft Edge Enterpriseオフラインインストーラーがリリースされました(MSI)
Microsoft Edge Enterpriseオフラインインストーラーがリリースされました(MSI)
Microsoftによると、ChromiumベースのEdgeブラウザはエンタープライズテストの準備ができています。同社は本日、グループポリシー用に更新されたADMXファイルとともにオフラインインストーラーをリリースしました。最新の変更により、Microsoft Edge Devは、企業のお客様に次の機能を提供できます。広告完全に機能するIEモード。グループポリシーテンプレートとMDM。適切なドキュメントとサポートチャネル。ザ・
エッジアドレスバーの提案のサイトファビコンを有効または無効にする
エッジアドレスバーの提案のサイトファビコンを有効または無効にする
Microsoft EdgeChromiumでアドレスバーのOmniboxファビコンを有効または無効にする方法MicrosoftEdge Chromiumのアドレスバーに何かを入力すると、URL候補のリストに、サイト名の横にWebサイトのファビコンが表示されます。この機能はデフォルトで有効になっており、有効または無効にできます。いつ
ファイルにアイコンを追加する方法
ファイルにアイコンを追加する方法
カスタマイズは、ファイルを整理する際のゲームチェンジャーになる可能性があります。 PC ファイルには、通常、オペレーティング システムによって選択されるアイコンがあります。ほとんどの場合、それらはすべて同じように見え、混乱しやすいです。あなたがしたい場合は
タグアーカイブ:Windows10割り当てアクセス
タグアーカイブ:Windows10割り当てアクセス
Windows 10、8、7用のCaribbeanShoresテーマをダウンロードする
Windows 10、8、7用のCaribbeanShoresテーマをダウンロードする
雲に満ちた空、美しい景色、ひまわり畑が、Windows10のこの素晴らしい壮大な空のテーマに含まれています。