아 진짜 힘드네요.. 커널 함수 한번 써보려고 하는데...
글쓴이: minimax / 작성시간: 토, 2004/05/08 - 2:49오후
커널에 netfilter.c에 있는 nf_dump_skb()함수와 nf_debug_ip_finish_output2() 를 한번 써보려고 합니다.
디버깅을 위해서요... 커널 버전은 2.4.20입니다.
여기저기 뒤져서.
netsyms.c에
#ifdef CONFIG_NETFILTER_DEBUG #include <net/ip.h> #include <net/route.h> #include <net/tcp.h> #include <linux/netfilter_ipv4.h> EXPORT_SIMBOL(nf_dump_skb) EXPORT_SIMBOL(nf_debug_ip_finish_output2) #endif
이렇게 등록하고.
컴파일 옵션에서 CONFIG_NETFILTER_DEBUG=y
시키고
커널 컴파일해서 ksyms를 확인 해봤더니 보이더군요.
그후 이 코드에 적용시켜 보았습니다.
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netfilter.h>
#include <linux/ip.h>
#include <linux/icmp.h>
#include <linux/netdevice.h>
#include <linux/netfilter_ipv4.h>
static struct nf_hook_ops netfilter_ops_in; /* NF_IP_PRE_ROUTING */
static struct nf_hook_ops netfilter_ops_out; /* NF_IP_POST_ROUTING */
/* Function prototype in <linux/netfilter> */
unsigned int main_out_hook(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff*))
{
struct sk_buff *sb;
struct iphdr *ip;
struct icmphdr *icmp;
sb = *skb;
icmp = (struct icmphdr*) (sb->data+(sb->nh.iph->ihl*4));
if(!sb) return NF_DROP;
// 이 부분입니다.
nf_dump_skb(PF_INET,sb);
return NF_ACCEPT;
}
unsigned int main_in_hook(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff*))
{
struct sk_buff *sb;
struct icmphdr *icmp;
struct iphdr *ip;
sb = *skb;
icmp = (struct icmphdr*) (sb->data+(sb->nh.iph->ihl*4));
if(!sb) return NF_DROP;
// 이 부분입니다.
nf_dump_skb(PF_INET,sb);
return NF_ACCEPT;
}
int init_module()
{
netfilter_ops_in.hook = main_in_hook;
netfilter_ops_in.pf = PF_INET;
netfilter_ops_in.hooknum = NF_IP_LOCAL_IN;
netfilter_ops_in.priority = NF_IP_PRI_FIRST;
netfilter_ops_out.hook = main_out_hook;
netfilter_ops_out.pf = PF_INET;
netfilter_ops_out.hooknum = NF_IP_POST_ROUTING;
netfilter_ops_out.priority = NF_IP_PRI_FIRST;
nf_register_hook(&netfilter_ops_in); /* register NF_IP_PRE_ROUTING hook */
nf_register_hook(&netfilter_ops_out); /* register NF_IP_POST_ROUTING hook */
return 0;
}
void cleanup_module()
{
nf_unregister_hook(&netfilter_ops_in); /*unregister NF_IP_PRE_ROUTING hook*/
nf_unregister_hook(&netfilter_ops_out); /*unregister NF_IP_POST_ROUTING hook*/
}
오류 없이 컴파일 하고, 모듈을 올리면
얄짤 없이 unresolved symbol 이 나타납니다.
도대체 뭘 더 해야만 하나요?
아... 넘 어렵고 힘들고 해서.. 참...
잘 해나가시는 분들 정말 존경스럽습니다.
부디 답변 부탁드려요.
질문을 도배를 하는 거 같아 정말 또 죄송스럽습니다.
Forums:


자체 해결 했어요.
익스포트를 잘못했더군요.
printk 함수 참조해서 했더니.. ㅋ
되네요.
읽어주신 분들께 감사입니다.
그럴 땐 바다를 생각해
바다...
봉우리란 그저 넘어가는 고갯마루일 뿐이라구...
댓글 달기