2016-11-13 4 views
0

Я работаю над проектом, который обнаруживает вредоносное ПО на основе методов машинного обучения. Моими основными целями являются Linux-устройства. Мой первый вопрос:Как извлечь функции из ядра Linux?

  1. Как я могу извлечь данные о процессах из ядра Linux с помощью драйвера ядра? Я хотел бы сначала получить данные о запущенных процессах в первый раз только для доказательства концепции. Позже я хотел бы написать драйвер ядра, чтобы сделать это автоматически и в режиме реального времени.
  2. Есть ли другие способы извлечения данных для запуска процессов, таких как ProcessName, PID, UID, IS_ROOT и т. Д.?
+2

Ваш вопрос слишком широк и неясен. «извлечь данные»? Какие данные? Извлечь кого (человеческая, программа на С, веб-страница ...)? Во втором случае вы можете получить эту информацию даже на уровне пользователя через файловую систему [/ proc] (http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html) – kaylum

+0

Спасибо за исправление , Я редактировал сообщение. Для файловой системы proc можно экспортировать результаты в файл csv или любого типа. Я думаю, что я могу написать скрипт python для этого, но мне интересно, есть ли в нем ярлык. @kaylum – mburakergenc

+0

Извините, но stackOverflow помогает людям исправить свой существующий код, а не исследовать, специфицировать (k) его, разрабатывать и тестировать. Учитывая ваши вопросы, вы должны потратить больше времени на определение своей конечной цели и написание кода, который пытается достичь этого. Когда вы застрянете после этого, отправьте Q следующие ориентиры для [MCVE] (http://stackoverflow.com/help/mcve). Удачи. – shellter

ответ

3

Чтобы сделать это из пользовательского пространства:

ps -U <username/UID> | tr -s ' '| tr ' ' ','| cut -d ',' -f2,5 > out.csv 

из пространства ядра, как модуль:

#include <linux/init.h> 
#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/sched.h> 

static int uid=0; 

static int procx_init(void){ 
    struct task_struct *task; 
    for_each_process(task) 
      printk ("uid=%d, pid=%d, command=%s\n", task->cred->uid, task->pid, task->comm); 
    return 0; 
} 
static void procx_exit(void) 
{ 
    printk("procx destructor\n"); 
} 
module_init(procx_init); 
module_exit(procx_exit); 
module_param(uid, int, 0); 

MODULE_AUTHOR ("[email protected]"); 
MODULE_DESCRIPTION ("Print process Info"); 
MODULE_LICENSE("GPL"); 

Я не проверял на UID, но вы можете передать его в качестве параметр модуля или прогон времени выполнения для запуска kthread

+0

Я думаю, что это тот ответ, который я ищу. Я пытаюсь получить lstart, cmd, pid, ppid, uid, pgrp, pcpu,% mem, vsize, share, cmin_flt, время, размер, ruser из пользовательского пространства. Однако, поскольку я новичок в этом, не могли бы вы объяснить первый способ, о котором вы говорили. Например, как вы печатаете PID и cmd? это -s и -d? – mburakergenc

+0

Думаю, я сделал это. Вот как :) ps -eo cmd, pid, ppid, uid, pgrp, pcpu,% mem, vsize, share, cmin_flt, size, ruser | tr -s '' | tr '' ','> cleandata.csv – mburakergenc

+0

Разве это уже не доступно через 'procfs'? – 0andriy

Смежные вопросы