알맞은 검색알고리즘과 데이터 구조 질문 2

dorado2의 이미지

먼저 여기를 검색하다 비슷한 주제를 발견했는데요.

http://bbs.kldp.org/viewtopic.php?t=59298&highlight=%C7%D8%BD%AC+%C6%AE%B8%AE

저도 마찬가지로 패킷 캡쳐하는 프로그램을 제작중입니다.
기존의 TCP나 IP 등은 아니구요, 시리얼을 통해서 들어오는 특정 프로토콜의 패킷을 캡쳐해서 나타내는 프로그램입니다.

그래픽적으로 캡쳐된 패킷을 표시하도록 제작중인데요. 필터링 부분에서 약간 막히네요.

먼저 필터링은 다음과 같이 여러가지 경우가 있습니다.

1. 네트웍 계층 (NPDU), 트랜스포트 계층 (TPDU), 응용 계층(APDU) 별로 구분

: 시리얼 포트로 들어오는 것은 원래 NPDU 인데, 사용자의 요구에 따라 NPDU 다 보여 줄수도 있고, APDU 만 표시해 줄 수 도 있어야 합니다.

이건 사용자가 체크하는 옵션에 따라서 들어오는 패킷에서 잘라서 보여주면 되니까 어렵진 않을 것 같구요.

2. ethereal 처럼 소스 주소, 대상 주소 등 패킷의 특정 필드 값을 만족하는 패킷만 필터링

: 이 부분이 고민인데요.

위 URL에서의 글은 field가 4개 밖에 없는 것 같던데, 저는 더 많을 것 같습니다. 예컨대 송/수신주소에 따라 filtering하던지, 아니면 routing packet인 경우 filtering하던지, application layer에서 특정 타입 메시지만 filtering할 수도 있구요. filtering 조건은 1개일 수도 있고, 5-6개일 수도 있겠는데요.

현재는 packet class를 만들어서 vector에 그냥 쭉 저장하고 있습니다. 새 패킷이 들어오면 해당 객체를 새로 만들고, vector에 저장합니다.

filtering부분을 구현하려면, 새 패킷이 들어올 때, filtering 조건을 체크해보고 해당 packet을 accept/drop해야 할텐데요...

앞 글에서 해쉬나 바이너리 트리를 어떻게 사용한다는 이야기인지 잘 모르겠네요.
(자료구조 및 알고리즘 수업도 들었는데... :cry: )

앞 글 표현대로 하면 field는 많은데, record는 뭐 많아도 10개를 안 넘을 것 같거든요.

하나의 packet 구조에 대해서, 각 packet field(ex.송신 주소, 수신 주소 등등)마다 hash 값을 table로 구해놓고 새 패킷과 비교를 하는 것인가요?

아니면 그냥 filtering 조건과 1:1 비교를 해도 괜찮은 상황인가요?

(이 프로토콜의 트래픽은 그리 많지 않습니다. 최악의 상황에서도 1초에 10 ~ 20개 정도의 패킷)

익명 사용자의 이미지

그정도면 걍 DLL 혹은 SLL로 구현해도 무난할 듯..

댓글 달기

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