Обычно я использую tcpflow
для отладки сетевого ввода-вывода, но, похоже, нет никакого способа фильтрации по процессам, поэтому мне нужно вручную выяснить, какие файлы поступают из отлаживаемой программы, а какиесовершенно не связанный трафик.Обычно оба являются http, поэтому фильтрация портов исключена, а фильтрация по удаленному имени хоста возможна только иногда.
Теоретически это должно работать.Идентификаторы процессов могут быть связаны с сокетами, по крайней мере в Linux - /proc/net/tcp
связывает пары адресов сокетов с inode, а fstat
ing /proc/*/fd/*
показывает все inode сокетов по процессу (это то, что netstat -p
использует), но это необходимосделано в режиме реального времени с помощью программы захвата трафика, в противном случае все эти данные пропали - поэтому я не могу просто найти нужные файлы позже.(ооо, я не уверен, возможно ли это даже в OSX)
Или другой возможностью будет использование какого-либо низкоуровневого внедрения библиотеки, например LD_PRELOAD
, когда программа запускается вместо внешнего монитора.
Альтернатива нахождения каждой отдельной сети для чтения и записи в программе и добавления кода регистрации там просто ужасна для размышления - тем более, что многие фактические операции ввода-вывода могут быть скрыты глубоко внутри сторонних библиотек.
Есть рекомендации?Что-то кроссплатформенное было бы идеально, но если оно работает с OSX или Linux, этого достаточно.