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


7

Ich versuche, Multicast-Verkehr über Wireshark (eigentlich TShark) zu erfassen, aber der Switch hat IGMP-Snooping aktiviert und sendet Multicast-Verkehr nur an den Ports, die ein aktives IGMP-Abonnement haben.

Ich komme derzeit darum herum, indem eine separate Anwendung die Gruppen, die ich aufzeichnen möchte, offen hält. Ich versuche jedoch, ein System einzurichten, mit dem die dynamische Aufzeichnung von Daten gestartet / gestoppt werden kann, und diese zusätzliche Komplexität ist schmerzhaft.

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

Antworten:


1

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


ip maddr addscheint für IP-Layer-Abonnements nicht zu funktionieren. Die Socat-Lösung in dieser Frage: superuser.com/questions/324824/… sollte im Allgemeinen funktionieren.
NeilenMarais

1

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

Wireshark verfügt über keinen Mechanismus, mit dem IGMP-Abonnements basierend auf dem Erfassungsfilter gesendet werden. Es wird davon ausgegangen, dass Sie irgendwie vereinbart haben, dass alle relevanten Pakete an den Port gesendet werden, an dem sie erfasst werden, z. B. durch Portspiegelung / SPAN / wie auch immer Ihr Switch-Anbieter dies an diesem Port nennt , sodass der Switch alle Pakete an diesen Port sendet . Wenn Sie die Portspiegelung nicht einrichten können oder wenn dadurch zu viele Pakete an den Port gesendet werden, an dem Sie erfassen, müssen Sie diesen Port bei der entsprechenden Multicast-Gruppe abonnieren (wie Sie es anscheinend bereits tun). .


1

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

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)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.