음... 갑자기 네트워크 패킷을 캡쳐해서 작업할 일이 생겨서 진행하게 되었습니다.
작업은 PC의 네트워크 카드를 스캔하여 특정 포트로 데이터 통신하는 packet을 capture 할 예정입니다.
작업 결과는 다음과 같습니다 .
작업순서
1. microsoft visual studio 2019 설치
2. 프로젝트 생성
3. winpcap 설치
4. 환경 설정
5. 테스트
6. 배포
7. 배포된 파일 실행 까지 입니다
winpcap을 사용하여 해당 PC ( window 10 ) 에서 특정 port로 통신하는 데이터를 캡쳐할 예정입니다 ( 구글링하여 예제소스 사용 )
1.microsoft visual studio 2019 설치 ( 다른 idle 로는 못하겟더라고요 )
설치 완료
2. 프로젝트 생성
여기까지가 microsoft visual studio 설치하고 c++ 프로젝트 생성입니다
Ctrl + F5 를 눌르면 hello world 가 콘솔에 나올꺼에요
3. winpcap 설치
다운로드받은 파일을 설치해주세요
그리고 아래 경로로 이동해서 wpdpack을 다운로드 해주세요
다운받은 wpdpack 의 압축을 풀고 wdppack만 c드라이브 밑으로 옮길게요
이제 준비는 다됫고
4. 환경 설정 microsoft visual studio 에서 winpcap을 셋팅해주겟습니다.
프로젝트 선택후 오른쪽 클릭 -> 속성
VC++ 디렉토리 에서
포함 디렉토리와 라이브러리 디렉토리를 수정해야합니다
포함디렉터리 에다가는 아까 c드라이브로 옮긴 wdppack의 include를 추가해주고
라이브러리 디렉터리에는 wdppack의 lib를 추가해주세요 구분자는 " ; " 입니다
그다음은 c/c++ 의 전처리기 로 이동한 후 전처리 정의를 수정해야 합니다
HAVE_REMOTE 와 WPCAP 추가합니다
마지막으로 링커 - 입력으로 가서 추가 종속성에 wpcap.lib 를 추가하고 적용 !
여기까지가 환경 설정 끝입니다.
예제 코드를 가져와서 테스트 돌려볼게요.
저는 아래 페이지 소스코드를 가져왓습니다
Winpcap 프로그래밍 - 패킷 스니핑 (감청/분석) 하기
/* written by kaspy (kaspyx@gmail.com) */ Winpcap 라이브러리 중에 pcap_open_live, pcap_compile , pcap_setfilter, pcap_next_ex 함수가 있다. 각각의 함수를 활용하면 패킷을 로우레벨에서 분석할수..
kaspyx.tistory.com
맨 윗부분만 수정할게요
#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include "pcap.h"
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "wpcap.lib")
#pragma comment (lib, "ws2_32.lib" )
//#define FILTER_RULE "host 165.246.12.215 and port 7778"
#define FILTER_RULE "port 80"
이 밑부분은 똑같습니다
코드는 간략하게보면 네트워크 디바이스를 전체 리스트를 불러온 후
리스트중 디바이스를 선택하여 해당 선택한 디바이스에서 80포트와 통신하는 packet 을 읽어오는 구조입니다
5. 테스트 - 실행 결과
저는 무선을 쓰고있는데 2번 이더라고요.
2번은 누른후 http://naver.com 을 브라우저에 입력하면 아래와같이 데이터가 보일 것입니다
지금 보시면 DATA 쪽이 꺠지는 걸 볼 수 있는데 이건 나중에 수정해봐야할거같아요
일단 데이터를 캡쳐하는 부분까지 확인이 됫습니다.
6. 배포 - 배포 툴을 통해서 배포를 진행해보겟습니다.
확장 - 확장 관리
다운로드가 되면 프로그램을 종료해주시면 설치가됩니다
Modify 를 누르고 좀 시간이 지나면 설치가됩니다 .
그리고 다시 micro visual studio 를 실행해서 아까 프로젝트로 들어갑니다.
파일 - 추가 - 새프로젝트 선택해주세요
리스트에 보시면 setup project 가 있을거에요
여기까지 하면 이런 화면이 나옴니다.
위에 클릭을 하면 파일이 하나 생기는데 User's Programs Menu에 드래그앤 드랍으로 넣어주세요
그리고 deploy 프로젝트 오른쪽 클릭 -> 속성으로 이동해주세요
이제 해당 폴더로 이동하면
빌드가 된 것을 볼 수 있습니다.
저도 c++ 로 빌드를 처음해봐서 생각보다 오래걸렸어요...
exe 파일은 deploy 속성 페이지에서 installaction URL 에서 입력한 경로에 데이터를 가져와서 실행시켜주는 구조이고 , 저는 경로를 넣지않았기 떄문에 msi 파일로 배포할 예정입니다.
7. 배포된 파일 실행
배포된 msi 를 다른 PC로 옮겨서 실행해 보았습니다.
실행하니까 3가지 에러가 발생하더라고요
첫번쨰는 배포된 PC에 winpcap이 설치되지않아서 발생한 문제였습니다. 그래서 winpcap을 설치 하니까 해결되더라고요
두번쨰 , 세번쨰는 ucrtbased.dll 과 vcruntime140.dll 에러였는데 이 두가지는 아래 파일 다운로드받아서 압축풀어서
c드라이브 -> windows->SysWOW64에 넣어주세요
x32, x64 차이 같아 보이더라고요.
이제 테스트까지 완료 햇으니
다음부터는 원하는 포트의 data를 가져와 파싱한후 서버로 전송하는 부분을 진행해야할 것같습니다.