LINUX.ORG.RU

Сообщения Dennis7

 

Почему sk_buff равен NULL?

Форум — Development

Здравствуйте все!
Разбираюсь с сетевой подсистемой ядра Linux. Решил попрактиковаться. Порылся в инете, нашел простенький модуль, который с помощью netfilter хуков перехватывает пакеты. Взял его за пример.

Но никак не могу заставить его работать. Что бы я ни делал, указатель на структуру sk_buff в хук-функции всегда равен NULL.

В интернете есть примеры для ядер 2.6.12 - 2.6.18. У меня 2.6.26, в котором сама струтура sk_buff имеет отличные от предыдущих версий поля. Может подскажите как в ядре 2.6.26 перехватить пакет на уровне ядра? Куда копать? Что "курить"? Можно наверно покапаться в исходниках того же iptables, но надо чем быстрее, тем лучше.

Заранее спасибо!

Вот код тестого модуля:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/signal.h>
//#include <linux/signalfd.h>
#include <asm/unistd.h>
#include <asm/siginfo.h>
#include <asm/uaccess.h> /* for copy_from_user */
#include <linux/syscalls.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/fcntl.h>
#include <linux/time.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <net/sock.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netdevice.h>

MODULE_LICENSE("GPL");

struct nf_hook_ops nf_outgoing;
struct sk_buff *skbf;

//============================================================================= ========================
unsigned int main_hook(unsigned int hooknum, struct sk_buff **skb, const struct net_device *in, const struct net_device *out,
int (*okfn)(struct sk_buff*))
{
skbf = *skb;
//printk("In hook\n");
if (skbf == NULL) printk("skbf = NULL\n"); //Почему???
return NF_ACCEPT;
}
//============================================================================= ========================
static int net_mod_init(void)
{
printk(KERN_INFO "net_mod init\n");
nf_outgoing.hook = main_hook;
nf_outgoing.pf = PF_INET;
nf_outgoing.hooknum = 4;//NF_IP_PRE_ROUTING;
nf_outgoing.priority = NF_IP_PRI_FIRST;
//Registration
nf_register_hook(&nf_outgoing);

return 0;
}
//============================================================================= ========================
static void net_mod_exit(void)
{
nf_unregister_hook(&nf_outgoing);
printk(KERN_INFO "net_mod exit\n");
}
//============================================================================= ========================
module_init(net_mod_init);
module_exit(net_mod_exit);

Dennis7
()

Можно ли с помощью РАМ сделать аутентификацию рута в приложении?

Форум — Development

Здравствуйте, многоуважаемые!
Можно ли с помощью РАМ сделать аутентификацию рута в приложении?
Сейчас поясню "на пальцах". Есть программа с GUI, она что-то умеет делать, но ее надо запускать от root'а. Было бы очень хорошо, если б пользователь запускал ее, ему всплывало окошко "Введите пароль root", он вводит, если пароль совпадает то все ОК, если нет, то нет...
Можно ли такое сделать с помощью РАМ? Все что нашел в инете к сожалению не дало мне ответ на этот вопрос. Или быть может есть какое-нибудь другое решение?

Заранее спасибо

Dennis7
()

RSS подписка на новые темы