Аудит Linux может помочь. Он будет по крайней мере определять местонахождение пользователей и процессов, осуществляющих сетевые подключения дейтаграмм. UDP-пакеты - это дейтаграммы.
Сначала установите auditdфреймворк на свою платформу и убедитесь, что он auditctl -lчто- то возвращает, даже если он говорит, что правила не определены.
Затем добавьте правило для наблюдения за системным вызовом socket()и отметьте его для более легкого поиска позже ( -k). Я должен предположить, что вы используете 64-битную архитектуру, но вы можете заменить b32ее, b64если нет.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Вы должны выбрать man-страницы и заголовочные файлы, чтобы построить это, но то, что он захватывает, по сути, это системный вызов: socket(PF_INET, SOCK_DGRAM|X, Y)где третий параметр не указан, но часто равен нулю. PF_INETравно 2 и SOCK_DGRAMравно 2. TCP-соединения будут использовать, SOCK_STREAMкоторый будет установлен a1=1. ( SOCK_DGRAMво втором параметре может быть ORed с помощью SOCK_NONBLOCKили SOCK_CLOEXEC, следовательно, &=сравнения.) Это -k SOCKETнаше ключевое слово, которое мы хотим использовать при последующем поиске журналов аудита. Это может быть что угодно, но мне нравится, чтобы все было просто.
Пусть пройдет несколько минут и просмотрите контрольные записи. При желании вы можете форсировать пару пакетов, выполняя команду ping для хоста в сети, что приведет к поиску DNS, который использует UDP, что должно отключить наше предупреждение аудита.
ausearch -i -ts today -k SOCKET
И вывод, похожий на раздел ниже, появится. Я сокращаю это, чтобы выделить важные части
type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET
В приведенном выше выводе мы видим, что pingкоманда вызвала открытие сокета. Я мог бы тогда запустить strace -p 14510процесс, если он все еще работал. ppid(Идентификатор родительского процесса) также перечислен в случае это сценарий , который нерестится проблема ребенок много.
Теперь, если у вас много UDP-трафика, этого будет недостаточно, и вам придется прибегнуть к OProfile или SystemTap , которые в настоящее время находятся за пределами моего опыта.
Это должно помочь сузить положение в общем случае.
Когда вы закончите, удалите правило аудита, используя ту же строку, которую вы использовали для его создания, только замените -aна -d.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET