netfilter 후킹 콜백함수에서 패킷 보내기
글쓴이: pjh0347 / 작성시간: 금, 2005/10/07 - 12:21오후
넷필터 후킹 함수를 등록하고
그 함수에서 특정 패킷이 들어오는경우에 icmp패킷을 만들어
보내려고하는데 어떤 방법이 있을까여?
일단 제가 코드를 막 갖다 붙여서 다음과 같은 모양이 됐는데여.--;
len = sizeof(struct nd_router_advert); dst = ndisc_dst_alloc(dev, NULL, &mc_addr, ip6_output); skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), 1, &err); skb_reserve(skb, LL_RESERVED_SPACE(dev)); hdr = (struct nd_router_advert *)skb_put(skb, len); skb->h.raw = (unsigned char*)hdr; ... hdr 내용 채우기.. ip6_nd_hdr(sk, skb, dev, &gw_addr, &mc_addr, IPPROTO_ICMPV6, len); hdr->nd_ra_hdr.icmp6_cksum = csum_ipv6_magic(&gw_addr, &mc_addr, len, IPPROTO_ICMPV6, csum_partial((__u8 *) hdr, len, 0)); skb->dst = dst; idev = in6_dev_get(dst->dev); NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); if (likely(idev != NULL)) in6_dev_put(idev);
막상 저렇게 하니깐 현재 모듈 프로그래밍 환경이라서
ndisc_dst_alloc 함수 심볼을 찾을수 없다고 하네여. 답답해 주겠어여. 도와주세여.
Forums:
모듈에서 함수를 못 찾을 경우....
모듈에서 함수를 못 찾는 경우는
특정 함수가 kernel에서 export되어 있지 않기 때문입니다.
모듈 프로그래밍할때 제일 난감한 부분이죠, 경우에 따라서는 해당함수를 만들거나 함수내용을 코드에 복사해서 사용하기도 하는데, 계속 unexport된 함수들이 나오면 좀 난감합니다...
레드햇과 같은 배포판 커널에 맞는 모듈을 개발해야 한다면 반드시 해결해야 하는 부분이기도 하고요...
하지만, 꼭 그런게 아니라면 커널 살짝 손보시면 됩니다.
kernel_source/net/netsyms.c 에
EXPORT_SYMBOL(ndisc_dst_alloc);
를 추가하셔서 해당 함수를 export하도록 한 다음,
kernel을 다시컴파일 해서 사용하면 해당 함수를 사용하실 수 있습니다....
그리고 export는 꼭 netsyms.c에 하실 필요는 없고요....
대부분 거기에 들어있으니까 거기에 추가하라고 알려드린거니 참고하시길 바랍니다.
ipv6쪽은 제가 경험이 없어서 잘 모르겠으나, 관련 모듈이 적어서 아무래도 export된 함수들이 적을 듯 하네요... ^^
암튼 성공하시길~
제 기억으로 커널 코드내에.. ICMP 패킷을 생성하는 코드가 있는
제 기억으로 커널 코드내에.. ICMP 패킷을 생성하는 코드가
있는 것으로 기억납니다.. 구석에 숨어있는 코드는 아니었구요..
쉽게 찾을 수 있을 것입니다..
즐프~~
댓글 달기