• Как программно отфильтровать пакеты по pid/имени процесса?

    Nipheris
    @Nipheris Куратор тега C++
    Если pcap действительно не предоставляет никакой инфы о процессе, который забрал пакет (вполне вероятная и нормальная ситуация, т.к. работает он в режиме ядра), то попробуйте проставить соответствие по номеру порта, раз уж вам TCP нужен. С точки зрения сетевого протокола, именно порт уникально идентифицирует процесс-получатель и процесс-отправитель (например, вы ведь никак не повесите два независимых веб-сервера на одном порту. Также и при исходящем TCP подключении ОС выделяет для каждого подключения отдельный случайный порт). Т.к. информацию о портах и TCP-соединениях (в т.ч. в listening статусе) вы по идее сможете получить (ведь существует и как-то работает TcpView из пакета Sysinternals), то и по порту пакеты сможете привязать.
    Само собой, один процесс может открывать много портов на прослушку и устаналивать множество соединений, как входящих так и исходящих. Если вам нужно еще и отдельные TCP-стримы сохранять (например, к 80-му порту веб-сервера подключилось много клиентов), то тогда уникально идентифицируйте каждый коннект с помощью четверки: (source_ip, source_port, destination_ip, destination_port).
    Ответ написан
    3 комментария