[yummyKit] 3 day
※주의사항※
연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다. 악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.
1...10일만에... 쿨럭... 죄송해여ㅜㅠ 슬럼프인가바여.. 요즘 라즈베리파이에 [vpn server] - [ddns server] - ['AngularJS + Firebase' Web Server] 하다보니 정신이없네여ㅜㅠ 웹은 정녕 재밌으면서도 하기싫숩니다...헿헤 우리 전공은 역시 취존아닌가여!? 전 시스템/네트워크가 좋다구여!!
넵... 그래도 반성해야져 ㅜㅠ공부 더 열씸히 하고!! 밥도 묵고!! 다해야져!!
크 갓민식.. 연기를 어쩜 이렇게 실제처럼 할 수 있을까여 넘나 멋찐것~
최근에 yummyKit을 대폭 수정해써여!! 사실 제가 저번에 yummyKit을 오랜만에 보니까 막 strncmp() 함수와 strncpy() 함수, sprintf() 함수를 사용해도 되는 부분인데 함수를 직접 만들어서 무슨 flag_check() 라는 함수와 filter() 라는 함수를 만들었더라구여... 그래서 싹다 없애고 고치려고 했더니!!
뚜둔!! QT에서 u_char * 자료형과 const char * 자료형이 변환될 수 없다능 ㅜㅠㅜ GCC에선 되던 것인데 슬프네영... 그래서 다시 살려두고 변수 명만 축약하면서 코드 간결화를 수행해써여!!
두 번째로 중간 중간 오류가 있더라구여ㅜㅠ 같이 카페에서 밤새준 친구가 발견해주어서 그 부분들 싹다 고쳤더니 이쁘게 잘 돌아가여!!
이렇게 말씀드려도 아직 제 코드 리뷰를 안했으니 모르시겠져?! 늉늉.. 나중에 다시 읽어주신다면 아하! 그말이구나! 하고 아시리라 믿어여!
오늘은 먼저 이 전 포스팅에서 설명드린 HTTP GET 헤더를 갖고있는 pcap 파일을 이용해서 패킷 분석하는 코드를 구현해보려고 해요.
넵? pcap 파일이 뭐냐구여?
PCAP
Packet CAPture 의 줄임말이예요! Wireshark와 같은 패킷 분석 프로그램을 이용해서 캡쳐된 패킷을 저장할 때 저장되는 확장자로 .cap / .pcap / .pcapng가 있어요. cap은 capture일테고.. pcap은 packet capture일텐데... ng는 머징?!
Next Generation이라고 하네용! 이제 차세대에서는 pcap 확장자보다 pcapng 확장자를 사용하겠다는 것 같아여!
먼저 테스팅용 HTTP_GET pcap 파일을 드릴게여! 이 파일을 이용해서 이제 코드를 구현해 볼 거예요!
이 파일을 와이어샤크로 보시면 어랏!!? 이 전 포스팅에서 설명드린 HTTP_GET 헤더와 같은 패킷인 것을 확인하실 쑤 있어여!!
사실 저 패킷을 마구 뿌리는 이유는 현재 폐기된 노트북이자.. 사설 IP임을 인지 하셨다면 어딘가의 NAT일테니깐여 ㅎ핳하하.. 아마 괜찮겠져? 소심.. ☞☜
그리고 코드를 구현하기 위해선(여러분의 대다수가 윈도우 사용자라고 생각할게여! 그 외 야미가튼 맥뿍유저나 리눅스 유저는 헤더, 라이브러리, 컴파일 방법(gcc에서 옵션이 붙어요!), 함수 명 등이 다르기 때문에 정말 필요한 부분은 알려드릴게여!
먼저 Visual Studio(저는 Visual C++ Express 2010 버전을 너무나 사랑한답니닿ㅎㅎ제일 편하더라구여)에서 pcap 라이브러리를 포함하기 위해 winpcap 사이트로 가서 다운로드를 받아야해요. 절대 위험한 것이 아니니 절 믿고 다운로드 받으셔두 된답니당 ㅜㅠ 저 그렇게 못미더운 사람 아니겠져..?
https://www.winpcap.org/devel.htm
download
위 URL로 이동하시면 아래 그림같은 페이지로 이동하는데, 여기서 첫 번째로 있는 Developer Pack Download를 진행해주시면 됩니당!
그냥 무작정 winpcap 홈페이지에 들어가 눈 앞에 보이는 download를 클릭하시면 와이어샤크용 pcap 라이브러리밖에 되지 않아여ㅜㅠ 개발자 라이브러리가 있어야 한다구욧!!
path setting
이제 다운로드 후 압축을 풀어주시면 WpdPack이라는 폴더가 튀어나오는데, 이 폴더를 편하신 경로에 넣어주세요! 어차피 어느 경로든 그 경로 적어야하니까 그냥 편하신 곳에 두시는 게 낫지 않나~ 싶어요!
만약 '나는 Visual Studio 라이브러리와 헤더파일이 있는 곳에 같이 두고 싶다!' 하시는 저같은 변태분들이 계시다면...
"C:\Program Files(x86)\Microsoft Visual Studio 버전\VC" 디렉토리 안에 두시면 됩니당!
여기서 버전은 2010 → 10.0 / 2012 & 2013 → 12.0 / 2015 → 14.0 / 2017은 16.0인가여? 못찾겠네여 ㅜㅠ
자! 이제 개발자용 winpcap을 받았으니, Visual Studio에서 설정해봐야겠져!? 그 전에 먼저 http_get_test와 같이 알아볼 수 있는 프로젝트명으로 프로젝트를 생성해봅씨다!!(앞으로 할 코딩에서도 계속 winpcap 라이브러리 종속성이 필요하기 때문에 차라리 pcap_test와 같이 프로젝트 명을 만들고 소스파일만 추가해서 실행하는 방법으로 하는게 더 나을 것 같아요!)
프로젝트를 만드셨따면!! 자 이제 프로젝트 환경설정을 해봅씨다!!
header setting
pcap.h 헤더파일을 include 하는 방법으로는 두 가지가 있어요. 첫 번째로는 절대경로를 이용하는 방법이 있지요!
#include "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Include\pcap.h"
크... 뭐 pcap.h 헤더 하나 추가하려고 저렇게 길게 써야하나여... 절대경로가 있다면 상대경로방법도 있지 않을까여!?
상대경로는 현재 소스파일이 위치한 곳부터생각하셔야해요! 기본적으로 "C:\Users\사용자명\Documents\Visual Studio 버전" 디렉토리 안에 프로젝트 폴더가 위치할텐데, 만약 변경하셨다면 그 위치로 가셔서... 못찾으시겠다구여? ㅜㅜ 어쩔 수 없이 C:\에서 Ctrl + F를 살포~시 눌러 프로젝트 이름을 검색해보세영...
자 그럼 상대경로를 이용하면 어떻게 헤더파일을 추가할 수 있을까여?
#include "..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Include\pcap.h"
더 길어진 것 같은 느낌... 만약 WpdPack 폴더를 프로젝트 안에 넣으셨다면 "..\..\WpdPack\Include\pcap.h" 로도 가능하실 것 같네여!
사용할 때마다 이렇게 길고 긴 경로를 적어주긴 싫지 않나여?! 아님 말구영... 쭈굴...
메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → VC++ 디렉터리 → '포함 디렉터리' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → 위치한 WpdPack\Include 폴더까지 기재(예를 들어 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Include 처럼 기재하시면 돼요!) → 확인 클릭
이로케 야미의 사용자명과 WpdPack 폴더 경로가 들통나다닛... 여러분을 위해 이 한몸 바쳐..
자 드디어 pcap.h 헤더파일은 이 프로젝트 내에서 언제 어디서든 사용할 수 있게 되었답니다!! 다른 헤더파일 속성 추가하실 때에도 위와 같이 해주시면 되니 참고하세여!!
이제 드디어 pcap 개발자 모드를 사용 할 수 있는 거신가..!! 했더니 라이브러리가 필요하대여 늉늉...
개발자의 고생은 환경설정부터인가 봅니다 T^T
라이브러리 추가하는 것은 헤더파일 폴더 추가하는 것과 또오오옥 같아여!! 단지 Include 폴더가 아닌 Lib 폴더일 뿐이구, 추가해야 하는 부분이 '포함 디렉터리'가 아닌 '라이브러리 디렉터리'라는 것이 다를 뿐이져!!
library setting
메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → VC++ 디렉터리 → '라이브러리 디렉터리' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → 위치한 WpdPack\Lib 폴더까지 기재(예를 들어 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Lib 처럼 기재하시면 돼요!) → 확인 클릭
이제 pcap 개발자모드가 완성!! 된 것 같지만 정말정말 마지막으로 두 개 남았어여!! 포기하지 마세여!!(하나라고 할 줄 알았져? 꺌꺌.. 죄송해여 미쳤나바여 헿)
너무 귀츈하져? ㅜㅠ 이거 한 번만 해두면 이제 남은 포스팅동안 하실 필요 없으니 걱정마세여!!(물론 프로젝트를 새로 생성하거나, 프로그램을 새로 설치하거나.. 그럴 때엔 다시 설정해주셔야 할 것입니다 핳하)
오늘은 너무 딱딱한 것 같나여? 쵸큼 더 스무쓰하게.. 라고 하기보단 아직 프로젝트 속성만 설정중이고 코딩은 시작도 못했네여!? 끄아아 이러다 스압이 되면 사람들이 싫어할텐데 말이예여!! 최대한 스압을 아끼고자.. 재미가 없더라도 빨리빨리 속성부터 마무리 해보아여!
pre-define setting
메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → C/C++ → 전처리기 → '전처리기 정의' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → HAVE_REMOTE 와 WPCAP 기재→ 확인 클릭
뭔가 보다보니 위 세 개의 사진 크기가 제각각인 것 같지 않나여? 넵.. 저는 크기를 고려하지 않고 이정도면 되겠지~ 하고 줄여버려서 이런 불상사가 일어나게 된 것입니당 ㅜㅠ 막 사는 야미네영 늉늉
전처리기란 무엇이게~~요!
#define 하면서 먼저 정의해 주는 것들, 프로그램이 시작되기 전 미리 컴파일되는 것들을 전처리기라고 불러여! 종류로는 #include, #ifndef, #define, #endif, #pragma, ... 등등 많습니당! 한 번 찾아보세여!
그리고 이제 딱 하나남았네여!! 링커에 추가 종속성을 넣어주는 것인데, 이 방법으로는 두 가지 방법이 있어여! 아까 절대경로, 상대경로, 포함 디렉터리로 #include 하는 방법이 있듯이 이 방법도 2가지가 있지용!
linker setting
먼저, 메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → 링커→ 입력→ '추가 종속성' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → wpcap.lib 기재 → 확인 클릭
요로케 넣어주시는 방법이 있구여!! 다른 하나는 전처리기를 이용하는 방법인데, 이것은 pcap 라이브러리를 이용해야 하는 소스파일마다 넣어줘야하는 단점이 있어여 ㅜㅠ
#pragma comment(lib, "wpcap.lib")
매 소스파일 상단부에 적어주시면 됩니다!(저는 #include 다음으로 적는데, 첫 번째 라인부터 #pragma 사용하시는 분들도 많더라구여... 저는 완벽한 개발자가 아니기 때문에 정답은 모릅니당 ㅜㅜ)
자!! 드디어 환경설정이 빠밤~ 끝났어여!! 환경설정이 끝나면 뭐하냐구여? 코딩해야져 코딩코딩!!
winpcap 홈페이지에서 문서로 주어지는 예제들이 있어요. 이 예제들을 참고해서 먼저 연습해보신다면 좋을 것 같아요!!
URL로 남겨드릴게여!
example url
winpcap의 함수들 : https://www.winpcap.org/docs/docs_412/html/group__wpcapfunc.html
winpcap 함수 사용법 및 예제 : https://www.winpcap.org/docs/docs_40_2/html/group__wpcap__tut4.html
제가 네트워크를 강의할 때 여기까지 알려준 후 '다음 주까지 httpGet.pcap 파일 분석하는 프로그램 만들어서 보내라'고 하는데... 여러분께는 그럴 슈가 업네영 ㅜㅠ
이 전 포스팅에서 HTTP_GET 헤더 분석한 것처럼 출력시켜주면 됩니다! 저두 처음 시작할 때 저 사이트에서 튜토리얼 따라 다 해보고.. 바꿔보고.. 요로케하는구나! 조로케하는구나! 하면서 했었어요.
크... 이게 벌써 1년 2개월 전이라니 싱기방기하네영! 참 여기서 소스파일에 빨간색 뜨는 것은 프로젝트에서 빌드 제외하는 속성이예요!
제가 이번 포스팅에서 프로젝트 생성할 때 말씀드렸던 "차라리 pcap_test와 같이 프로젝트 명을 만들고 소스파일만 추가해서 실행하는 방법으로 하는게 더 나을 것 같아요!" 라는 구문 기억나시나영!? 아.. 넵.. 기억하실 필요 없져.. 이런 말 했었어여..
프로젝트 빌드에서 제외를 하면 컴파일 / 빌드할 때 제외된 파일은 제끼거든여!(제낀다는 말 옛날 말 같은데... 아재 하앍...)
그렇게 한 프로젝트에 여러 소스파일을 넣어서 편리하게 정리해두면서 사용할 쑤 있게 되는거져!!
솔루션 탐색기(혹시 솔루션 탐색기가 없으신 분들은 보기 탭 → 다른 창 → 솔루션 탐색기 클릭하시면 됩니당!) → 소스파일 마우스 우 클릭 → 속성(단축키 R) → 구성 속성 → 일반 → '빌드에서 제외' 부분의 옆 칸 '아니오/예' → 확인 클릭
빌드에서 제외가 '예'로 되어있으면 컴파일 및 빌드를 실행하지 않는 것이고, '아니오'로 되어있으면 컴파일 및 빌드를 하는 것이니 실행이 되는 소스파일이라는 것이죠!!
오늘 코딩을 더 나가려고 했는데 T^T 죄송해여 속성 설정만 하다가 하루가 지날 줄이야... 제가 드린 winpcap 예제를 통해 한 번 실습해보시구, 이 다음 포스팅에서 예제 리뷰와 저의 첫 HTTP_GET 헤더 분석 프로그램 소스를 보여드릴게여!! 그럼 마지막으로 열 코딩하실 여러분을 위해 코딩짤을 보여드리며 다음 포스팅에서 뵐게영!!!
Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.
댓글남기기