Захват многоадресных данных с Wireshark с включенным IGMP Snooping на коммутаторе

Я пытаюсь перехватить многоадресный трафик через Wireshark (на самом деле TShark), однако на коммутаторе включен режим отслеживания IGMP, и он будет отправлять только многоадресный трафик на порты с активной подпиской IGMP.

В настоящее время я справляюсь с этим, имея отдельное приложение с открытыми группами, которые я хочу записать, но я пытаюсь настроить систему для динамического запуска / остановки записи данных, и эта дополнительная сложность является болезненной.

Есть ли способ заставить Wireshark отправлять подписки IGMP для групп многоадресной рассылки, которые он записывает?

4 ответа

Вы можете использовать "ip maddr add", чтобы подписаться на дополнительные группы. Это должно заставить ядро ​​отвечать на запросы IGMP и получать для них трафик.

Предположительно, под "многоадресными группами записывается" вы подразумеваете, что вы указали фильтр захвата, запрашивающий конкретные адреса назначения многоадресной рассылки в ключевом слове "host"; это единственный способ, которым Wireshark может ограничить захват своего пакета определенными группами многоадресной рассылки.

У Wireshark нет механизма, с помощью которого он рассылает подписки IGMP на основе фильтра захвата; он предполагает, что вы каким-то образом договорились о том, чтобы все соответствующие пакеты отправлялись на порт, на котором он захватывает, например, путем зеркалирования портов /SPAN/ независимо от того, что ваш коммутатор-поставщик вызывает его на этом порту, так что коммутатор отправляет все пакеты на этот порт. Если вы не можете настроить зеркальное отображение портов или если оно будет отправлять слишком много пакетов на порт, который вы захватываете, вам придется подписать этот порт на соответствующую группу многоадресной рассылки (как вы, похоже, уже делаете),

Создайте пользовательский слушатель lua и вызовите его из wireshark.

Вот хорошо документированный пример:

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

Вы можете использовать Ostinato для создания, создания и отправки пакетов.

Другие вопросы по тегам