[재질문] incomming 패킷만 잡는 방법 없을까요?????

ecstasy5001의 이미지

...
...
sock_fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP);
 
sll.sll_family = AF_PACKET;
sll.sll_ifindex = 0;
sll.sll_protocol = htons(ETH_P_IP);
 
bind(sock_fd, (struct sockaddr *)&sll, sizeof(sll));
 
while(1)
{
       packet_len = recvfrom(
                        sock_fd, packet, sizeof(packet), MSG_TRUNC,
                        (struct sockaddr *)&from, &fromlen);
 
       if ( ( from.sll_pkttype == PACKET_LOOPBACK) || 
                               ( from.sll_pkttype == PACKET_OUTGOING))
             continue;
 
       // 들어온 패킷을 처리
}

답변이 없어서... 다시 재질문 드립니다.

한 프로그램에서 2개의 스레드를 생성하게 됩니다.

A스레드는 위에 보시는 코드와 같이 패킷을 캡쳐해서 어떠한 처리를 하고

B스레드는 외부로 패킷을 보내는 일을 합니다.

헌데 이상하게도 A스레드에서 B스레드의 패킷이 잡혔습니다..( 이게 정상 맞나요? )

A스레드에서 B스레드가 쏘는 패킷(OUTGOING PACKET)을 잡지 않기 위해서 외부로 나가는 패킷을 위에

코드를 보시는데로 다음과 같이 처리했습니다.

       if ( ( from.sll_pkttype == PACKET_LOOPBACK) || 
                               ( from.sll_pkttype == PACKET_OUTGOING))

헌데 계속 A스레드에서 B스레드가 보내는 패킷을 잡고 있습니다...

질문을 요약하면 다음 두가지 입니다.

1. 위와 같은 상황에서 A스레드에서 B스레드가 쏘는 패킷을 잡히는게 정상적인가요??
2. 위의 문제를 해결하기 위해서 (A스레드에서 INCOMMING 패킷만 캡쳐하고 싶을 경우)
어떤 식으로 해결해야 할까요...?

답변 부탁드리겠습니다.

monovision의 이미지

저는 유사한 기능을 netfilter 의 nf_queue 를 통해서 해결했습니다.
netfilter 를 이용하면 패킷 드랍등도 가능하니 한 번 참고해 보세요.

fractal0의 이미지

질문의 직접적인 답변은 아니지만
패킷을 잡아 어떤 일을 하고 싶을때는
위의 분이 제시한 netfilter 부분을 사용하는 것과
pcap Library를 사용하는 것이 일반적입니다.

저는 범용적인 pcap을 강력하게 추천합니다.
사용법도 socket 수준으로 간단하며 아주 강력합니다.
unix의 tcpdump도 위의 라이브러리를 사용합니다.
자세한 것은 여기로 www.tcpdump.org 입니다.

댓글 달기

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