C++로 pcap 파일 분석하기

a2000rsh의 이미지

안녕하세요 좋은 정보 잘 보고있습니다.. 저는 리눅스와 C언어 완전 초보인데 pcap파일을 분석하는 프로그램을 코딩하라는 과제를 받았습니다. Wireshark로 mycapture.pcap라는 파일을 생성했고, 이제 C++로 이를 분석하는 프로그램을 짜야하는데 전혀 모르겠습니다. 과제는 libpcap version과 data-link가 무엇인지, snap length가 무엇인지, 그리고 snapshot length의 signification를 확인하라는 것입니다.
지금 리눅스 페도라에서 C++을 사용중입니다. 프로그래밍 전공이 아닌데 이런 과목을 듣게되어서 너무 난감한 상황입니다.
고수님들 꼭 설명과 소스 부탁드립니다

라스코니의 이미지

fopen, fread, fscanf, sscanf 로 충분히 할 수 있는 것으로 보입니다.

a2000rsh의 이미지

제가 c++ 정말 초보라 시작을 못하고 있습니다.
생성된 mycapture.pcap 파일을 위에 말씀하신 명령어를 이용해서 분석하라는 말씀이신지???
최송하지만 소스를 써주시거나 보내주시면 정말 감사드리겠습니다.
제가 프로그래밍을 전혀 몰라 지금 너무 큰 어려움을 겪고 있습니다. ㅠㅠ
전 전공이 정보통신쪽인데 cyber security를 하자고 하니 이런 과제를 받고 있습니다.
미국에서 영어도 못해서 교수한테 질문도 못하고 너무 막막합니다. 꼭 부탁드립니다.

nss

klyx의 이미지

전혀 모르시면 포기하세요.

익명 사용자의 이미지

그럼 앞으로 평생 포기하고 사세요.
예의를 모르니 포기하신듯 하네요 님은

klyx의 이미지

Quote:
제가 프로그래밍을 전혀 몰라 지금 너무 큰 어려움을 겪고 있습니다. ㅠㅠ

Quote:
제출시간이 임박해서 소스코드 같은 것을 부탁드립니다.

이걸 보고 할 수 있는 최선의 조언은 포기하라는거 아닌가요?
설마 소스코드를 대필해주는게 최선의 조언이라고 생각하는건 아니죠?
노력하면 된다고 착각하시나 본데, 무기한 노력하면 뭐든지 가능하겠지만 과제라는건 기한이 있는겁니다.
알파벳도 모르는 사람한테 이번주안에 텝스 800점 넘겨오라고 하면 포기하는게 정상이지, 대리시험 쳐줄 사람 구하는게 정상인가요?

chanik의 이미지

줄발점이 될 만한 간단한 샘플이 아래 페이지에 있네요.
캡처된 각 패킷의 크기와 타임스탬프를 보여주고 패킷데이터 덤프도 해 주는 c++ 샘플인데,
파일을 열어 데이터를 직접 읽어내어 해석하는 식이 아니고
libpcap 라이브러리가 제공하는 캡처파일 읽기기능을 이용하고 있습니다.

http://www.rhyous.com/2011/11/13/how-to-read-a-pcap-file-from-wireshark-with-c/

소스에 캡처파일명이 하드코딩되어있으니 적당히 수정하고 아래와 같은 식으로 빌드하시면 됩니다.

$ g++ sample.cpp -o sample -lpcap

헤더파일과 라이브러리가 없으면 빌드가 안 되므로 빌드전에 아래 명령이 필요할지도 모릅니다.

$ sudo yum install libpcap-devel

그리고, 소스의 pcap_open_offline() 밑에 아래의 코드를 추가하시면
libpcap version, datalink, snapshot length가 나올 것입니다.
snapshot length의 signification은 무엇인지 저도 모르겠네요.

    printf("libpcap version : %d.%d\n", pcap_major_version(pcap), pcap_minor_version(pcap));
    int datalink = pcap_datalink(pcap);
    printf("datalink : %s (%s)\n", pcap_datalink_val_to_name(datalink), pcap_datalink_val_to_description(datalink));
    printf("snapshot length : %d\n", pcap_snapshot(pcap));

간단한 문제때문에 코너에 몰리신 것 같은데,
우선 잘 해결하시고 찬찬히 살펴보시기 바랍니다..

a2000rsh의 이미지

정말 감사드립니다. 해당 사이트에 나온데로 코딩을하고 수정을 했습니다.
컴파일을 하니깐 아래와 같은 에러가 발생했습니다.
혹시 이유를 아시면 설명 부탁드립니다.

/tmp/ccjAFLep.o: In function `main':
lab6.cpp:(.text+0x18): undefined reference to `std::allocator::allocator()'
lab6.cpp:(.text+0x3a): undefined reference to `std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&)'
lab6.cpp:(.text+0x49): undefined reference to `std::allocator::~allocator()'
lab6.cpp:(.text+0x58): undefined reference to `std::basic_string, std::allocator >::c_str() const'
lab6.cpp:(.text+0x273): undefined reference to `std::basic_string, std::allocator >::~basic_string()'
lab6.cpp:(.text+0x294): undefined reference to `std::allocator::~allocator()'
lab6.cpp:(.text+0x2af): undefined reference to `std::basic_string, std::allocator >::~basic_string()'
/tmp/ccjAFLep.o: In function `__static_initialization_and_destruction_0(int, int)':
lab6.cpp:(.text+0x2da): undefined reference to `std::ios_base::Init::Init()'
lab6.cpp:(.text+0x2df): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccjAFLep.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

nss

chanik의 이미지

gcc 말고 g++로 빌드하세요

$ g++ lab6.cpp -o lab6 -lpcap

a2000rsh의 이미지

정말 큰 도움이 됐습니다.
프로그래밍을 잘 몰라 혼자서 시작했는데 기초가 부족하니 많이 어렵내요.
하나하나 확인하면서 해보겠습니다. 감사합니다.

nss

gilgil의 이미지

http://www.winpcap.org/docs/docs_412/html/main.html

http://www.winpcap.org > WinPcap > Documentation > The WinPcap manual and tutorial for WinPcap 4.1.2 > WinPcap tutorial: a step by step guide to using WinPcap

아래에 있는 예제들 직접 컴파일하고 실행해 보세요. pcap 처음 배울때 제일 기본적인 예제들입니다.

ps : 질문하는 내용으로 보아 하니 packet capture 지식보다가는 C언어 기초부터 해야 할 듯 하네요.

a2000rsh의 이미지

정말 c언어는 처음이라 기초부터 하고 있습니다. 많이 어렵내요..
말씀하신데로 예제를 해보겠습니다.
감사합니다.

nss

mirheekl의 이미지

프로그래밍을 배우지도 않은 사람에게 저런 것을 시키는 상황 자체가 비상식적입니다.

위에 보니 미국에서 수강중이신 듯 한데, 다짜고짜 저런 걸 시킬 정도면 선수과목에 프로그래밍이 있거나, 강의계획서에 프로그래밍 스킬을 지닌 사람만 수업을 듣게 권장되어 있거나, 수업시간에 학생들의 프로그래밍 숙련도가 어느정도 되는지 확인하는 작업이 분명히 있었을 겁니다. 과목명을 감안하면 학기 내내 이런 일이 반복될텐데 한학기만에 프로그래밍 무경력자가 보안 관련 프로그래밍을 자유자재로 다룰 수 있게 되기는 힘들어 보입니다. 어찌어찌 버틴다 하더라도 거의 점수를 받기가 힘드실텐데.. 수강을 조금 미루고 조금이라도 프로그래밍을 먼저 배운 뒤에 다시 시도해보심이 어떨까요? 정보통신 전공이라 해도 프로그래밍은 어차피 해야 될테니까요. 한 학기 버틴다고 끝나는 게 아니라면 제대로 준비해서 재도전하는 게 낫겠다는 생각이 듭니다. 그리고 영어가 부담이 돼서 질문이 어려우면 수업시간에 질문을 하지 마시고 따로 교수님을 찾아가세요. 맨투맨으로 천천히 의사소통을 하면 됩니다.

그리고 썩 좋은 방법은 아니지만 지금 상황에서 도움될만한 팁이 있기는 한데..
프로그래밍 관련 숙제 알바를 하는 사람이 많이 있는 걸로 알고 있습니다. (보통 전공자들의 용돈벌이 혹은 IT 구직자들의 시간때우기용.) 그게 뭔가 궁금하실텐데, 딱 지금 본인의 상황에서 돈을 주고 숙제를 해줄 사람을 고용해서 처리하는 것이죠. (아예 이런 수요만 처리해주는 영어권 웹사이트도 존재합니다. 역경매 사이트마냥 원하는 과제를 올려놓고 개발자들이 돈 불러서 마음에 들면 작업..) 물론 돈주고 결과만 받으면 본인에게 아무런 도움이 되지 않으니, 근처에 거주하는 사람을 고용해서 옆에서 기초부터 자세하게 설명을 들으셔야 되겠죠. 영어가 문제라면 한국 사람을 찾는 것도 어렵지 않을 겁니다. 절대 권장할만한 방법은 아니나 정 시간이 없고 꼭 숙제는 해야 되겠다면 이런 방법도 있다는 얘기..

--

익명 사용자의 이미지

이렇게 하시고서 미국에서 학위 받은 cyber security 전문가라고 하실 거 아니예요?

댓글 달기

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