Назад | Перейти на главную страницу

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

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

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

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

Создайте собственный слушатель lua и вызовите его из wirehark.

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

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

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

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

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

Ты можешь использовать Остинато строить, крафтить и отправлять пакеты.