netfilter 후킹 콜백함수에서 패킷 보내기

pjh0347의 이미지

넷필터 후킹 함수를 등록하고

그 함수에서 특정 패킷이 들어오는경우에 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 함수 심볼을 찾을수 없다고 하네여. 답답해 주겠어여. 도와주세여.

익명 사용자의 이미지

모듈에서 함수를 못 찾는 경우는
특정 함수가 kernel에서 export되어 있지 않기 때문입니다.

모듈 프로그래밍할때 제일 난감한 부분이죠, 경우에 따라서는 해당함수를 만들거나 함수내용을 코드에 복사해서 사용하기도 하는데, 계속 unexport된 함수들이 나오면 좀 난감합니다...
레드햇과 같은 배포판 커널에 맞는 모듈을 개발해야 한다면 반드시 해결해야 하는 부분이기도 하고요...

하지만, 꼭 그런게 아니라면 커널 살짝 손보시면 됩니다.

kernel_source/net/netsyms.c 에
EXPORT_SYMBOL(ndisc_dst_alloc);
를 추가하셔서 해당 함수를 export하도록 한 다음,
kernel을 다시컴파일 해서 사용하면 해당 함수를 사용하실 수 있습니다....

그리고 export는 꼭 netsyms.c에 하실 필요는 없고요....
대부분 거기에 들어있으니까 거기에 추가하라고 알려드린거니 참고하시길 바랍니다.

ipv6쪽은 제가 경험이 없어서 잘 모르겠으나, 관련 모듈이 적어서 아무래도 export된 함수들이 적을 듯 하네요... ^^
암튼 성공하시길~

hie의 이미지

제 기억으로 커널 코드내에.. ICMP 패킷을 생성하는 코드가
있는 것으로 기억납니다.. 구석에 숨어있는 코드는 아니었구요..
쉽게 찾을 수 있을 것입니다..

즐프~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.