netfilter hook 함수에서 죽는데 이유를 모르겠네요.
책에 있는 예제를 그냥 실해시켜 보았는데요 (kernel 2.6.24)
strstr 쪽에서 이유없이 죽네요. strstr 이 죽을 만한 이유가 없을 것 같은데,
왜 죽는지 이해가 안 갑니다. 고수님들의 조언 부탁드립니다.
소스코드를 첨부했습니다.
unsigned int hook_simple( unsigned int hook_no,
struct sk_buff *pskb,
const struct net_device *dev_in,
const struct net_device *dev_out,
int (*handler)( struct sk_buff * ) )
{
struct iphdr *iph = ip_hdr(pskb);
struct tcphdr *th = (struct tcphdr*)skb_transport_header(pskb);
char *data = NULL;
int length = 0;
length = (pskb)->len - iph->ihl * 4 - th->doff * 4;
data = kmalloc( length, GFP_KERNEL );
memset( data, 0, length );
memcpy( data, (unsigned char *)th + th->doff * 4, length );
if( strstr( data, "MSNP" ) != NULL )
{
printk( "MSN(MSNP) Detected\n" );
kfree( data );
return NF_DROP;
}
if( strstr( data, "MSN" ) != NULL )
{
printk( "MSN(MSG) Detected\n" );
kfree( data );
return NF_DROP;
}
kfree( data );
return NF_ACCEPT;
}
static struct nf_hook_ops nfilter = {
.hook = hook_simple,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_IP_LOCAL_OUT,
.priority = NF_IP_PRI_FIRST
};
data에 '\0' 이 없어서
data에 '\0' 이 없어서 넘어가버리는 생각해 볼 수 있겠네요.
PS. 코드는 코드블럭으로 싸주세요
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
죄송..-.-
제가 헤더 길이 잘못 계산했습니다. -,.-
댓글 달기