fragen stichworte

Erfassen von Multicast-Daten mit Wireshark mit aktiviertem IGMP-Snooping am Switch

Ich versuche, Multicast-Datenverkehr über Wireshark (eigentlich TShark) zu erfassen. Der Switch hat jedoch IGMP-Snooping aktiviert und sendet Multicast-Datenverkehr nur an den Ports, an denen ein IGMP-Abonnement aktiv ist.

Ich komme derzeit damit um, indem ich die Gruppen, die ich aufnehmen möchte, in einer separaten Anwendung aufhält. Ich versuche jedoch, ein System einzurichten, das die dynamische Aufzeichnung von Daten startet/stoppt, und diese zusätzliche Komplexität ist schmerzhaft.

Gibt es eine Möglichkeit, Wireshark zu zwingen, IGMP-Abonnements für Multicast-Gruppen zu versenden, die es aufzeichnet?

antworten

Sie können "ip maddr add" verwenden, um weitere Gruppen zu abonnieren. Dies sollte dazu führen, dass der Kernel auf IGMP-Abfragen reagiert und Datenverkehr für sie empfängt.

Vermutlich unter "Multicast-Gruppen, die aufgezeichnet werden" meinen Sie, dass Sie einen Capture-Filter angegeben haben, der nach bestimmten Multicast-Zieladressen in einem "Host" -Schlüsselwort fragt; Nur so konnte Wireshark seine Paketerfassung auf bestimmte Multicast-Gruppen beschränken.

Wireshark hat keinen Mechanismus, mit dem er IGMP-Abonnements basierend auf dem Capture-Filter aussendet. Sie gehen davon aus, dass Sie alle relevanten Pakete so konfiguriert haben, dass sie an den Port gesendet werden, an dem sie erfasst werden, z. B. Port Mirroring/SPAN/was auch immer Ihr Switch-Anbieter an diesem Port nennt alle Pakete zu diesem Port. Wenn Sie die Port-Spiegelung nicht einrichten können oder wenn zu viele Pakete an den Port gesendet werden, auf dem Sie erfassen, müssen Sie diesen Port für die entsprechende Multicast-Gruppe (wie Sie es bereits tun) abonnieren. .

Erstellen Sie einen benutzerdefinierten Lua-Listener, und rufen Sie ihn von Wireshark aus an.

Hier ist ein gut dokumentiertes Beispiel:

-- This program will register a menu that will open a window with a count of occurrences
-- of every address in the capture

local function menuable_tap()
    -- Declare the window we will use
    local tw = TextWindow.new("Address Counter")

    -- This will contain a hash of counters of appearances of a certain address
    local ips = {}

    -- this is our tap
    local tap = Listener.new();

    local function remove()
        -- this way we remove the listener that otherwise will remain running indefinitely
        tap:remove();
    end

    -- we tell the window to call the remove() function when closed
    tw:set_atclose(remove)

    -- this function will be called once for each packet
    function tap.packet(pinfo,tvb)
        local src = ips[tostring(pinfo.src)] or 0
        local dst = ips[tostring(pinfo.dst)] or 0

        ips[tostring(pinfo.src)] = src + 1
        ips[tostring(pinfo.dst)] = dst + 1
    end

    -- this function will be called once every few seconds to update our window
    function tap.draw(t)
        tw:clear()
        for ip,num in pairs(ips) do
            tw:append(ip .. "\t" .. num .. "\n");
        end
    end

    -- this function will be called whenever a reset is needed
    -- e.g. when reloading the capture file
    function tap.reset()
        tw:clear()
        ips = {}
    end

    -- Ensure that all existing packets are processed.
    retap_packets()
end

-- using this function we register our function
-- to be called when the user selects the Tools->Test->Packets menu
register_menu("Test/Packets", menuable_tap, MENU_TOOLS_UNSORTED)

Mit Ostinato können Sie -Pakete erstellen, basteln und senden.