Ek probeer om multicast-verkeer via Wireshark (eintlik TShark) vas te vang, maar die skakelaar het IGMP-snuffel geaktiveer en sal slegs Multicast-verkeer stuur op die poorte wat 'n aktiewe IGMP-intekening het.

Ek kom tans om dit deur 'n aparte toepassing te hê wat die groepe oophou wat ek wil opneem, maar ek probeer 'n stelsel opstel om data dinamies te begin/stop en hierdie ekstra kompleksiteit is pynlik.

Is daar 'n manier om Wireshark te dwing om IGMP-intekeninge uit te stuur vir multicast-groepe wat dit opneem?

answer

Jy kan "ip maddr add" gebruik om op bykomende groepe in te teken. Dit moet veroorsaak dat die kern op IGMP-navrae reageer en verkeer daarvoor ontvang.

Vermoedelik met "multicast-groepe wat dit opneem" bedoel jy dat jy 'n opnamefilter gespesifiseer het wat vir spesifieke multicast-bestemmingsadresse in 'n "gasheer"-sleutelwoord vra; dit is die enigste manier waarop Wireshark sy pakketopname tot spesifieke multicast-groepe kan beperk.

Wireshark het geen meganisme waardeur dit IGMP-intekeninge uitstuur gebaseer op die vangfilter nie; dit neem aan dat jy op een of ander manier gereël het om alle relevante pakkies te laat stuur na die poort waarop dit vang, byvoorbeeld deur poortspieëling/SPAN/wat ook al jou skakelverkoper dit op daardie poort noem, sodat die skakelaar alle pakkies na daardie poort stuur. As jy nie poortspieëling kan opstel nie, of as dit te veel pakkies sal stuur na die poort waarop jy vang, sal jy daardie poort moet inteken by die toepaslike multicast-groep (soos jy blykbaar reeds doen) .

Skep 'n pasgemaakte lua-luisteraar en bel dit vanaf wireshark.

Hier is 'n goed gedokumenteerde voorbeeld:

-- 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)

Jy kan Ostinato gebruik om pakkies te bou, te maak en te stuur .