tcpdump vs netfilter

swunk의 이미지

netfilter를 사용해서 외부 에서 입력된 패킷에 대해서 NF_IP_PRE_ROUTING지점에서 패킷을 후킹한후 헤더 정보를 수정합니다.

이 정보(위에서 수정한 헤더정보)는 tcpdump혹은 ethereal 같은 응용에서 확인해 보면 안 나와야 되는것 아닌가요?

tcpdump는 Network 디바이스 드라이버에서 패킷을 가로채셔 BPF 드라이버로 패킷을 가져와서 필터링하는 것으로 알고 있습니다.

반면에 netfilter를 이용해서 NF_IP_PRE_ROUTING에서 수정한 패킷은 ip_rcv() 수행 후에 즉, 드라이버를 지나서 ip 스택내에서 패킷을 수정하는 부분이기 때문에 당연히 tcpdump와 같은 도구에서 확인하면 수정되기 전의 패킷 정보들이 출력되어야 할것 같은데요...

그런데 확인해 보면 제가 수정한 값으로 출력이 되네요..

ethereal로 확인해 보고 있는데...제가 잘못 알고 있는 부분이 어딘지 갈켜주세요...

wariua의 이미지

흠... 제 생각에도 말씀하신 것처럼 변경 전의 내용이 덤프되는 게 맞는 것 같습니다.

잠깐 테스트를 해보려고 mangle table의 PREROUTING chain에서 tos 필드값을 바꾸도록 하고 들어오는 패킷을 tcpdump로 떠봤는데, 예상했던 대로 동작합니다. 즉, 변경 전의 내용이 덤프됩니다. ethereal도 libpcap 쓰는 건 마찬가지니 동작 방식은 같은 것 같고요- 뭔가... 다른 힌트가 될 만한 다른 정보 없을까요?

$PWD `date`

swunk의 이미지

다른 힌트가 될 만한 정보가 없을것 같은데요.. :(

wariua 님께서는 테스트를 어떻게 해 보셨나요?

저는 NF_IP_PREROUTING에서 후킹해서 tos값 바꿔주고 checksum계산 다시해 주는 작업을 합니다.
PREROUTING 지점에서 후킹을 한다는 얘기는 ip 스택에서 처리를 해준다는 얘기이고 pcap은 ip 스택으로 올라오기 전에 패킷을 필터링하기 때문에 전혀 영향을 미치지 않는게 맞을것 같은데...

고민좀 해보고 잘못된점 파악되면 리포팅 하겠습니다.
...

wariua의 이미지

제가 테스트 해본 방법은...

어느 리눅스 머신에서(2.4.26) 다음과 같은 명령을 날려주고서,

# iptables -t mangle -I PREROUTING -d <my_ip> -p icmp -j TOS --set-tos 16

외부에서 그 머신으로 핑을 날려주고는 tcpdump로 떠 봤습니다.
# tcpdump -i eth0 icmp -n

들어오는 ICMP request 패킷에는 분명 ToS가 0으로 표시되고, 나가는 ICMP reply 패킷에서는 ToS가 0x10으로 설정돼 있었습니다. (흠... request의 ToS를 reply에다가 그대로 써주나보군요- 그런데 어디선가 ICMP 패킷은 ToS가 설정돼 있으면 곤란하다는 얘기를 들은 기억이...;;; 아, 여기네요: http://bbs.kldp.org/viewtopic.php?t=64185&highlight=icmp+tos 앗, 같은 분이시군요;;; )

커널 코드를 살짝 들여다봐도 pcap으로 패킷이 전달되는 시점은 들어온 패킷이 ip 레이어로 올라가기 전이랑 나가는 패킷이 ip 레이어에서 내려온 이후인 것 같은데, 참 아리송하네요-.-a

$PWD `date`

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.