본문 바로가기

개발

c++ , winpcap 환경설정 및 배포

음... 갑자기 네트워크 패킷을 캡쳐해서 작업할 일이 생겨서 진행하게 되었습니다.

 

작업은 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 를  추가하고 적용 !

 

여기까지가 환경 설정 끝입니다.

 

 

예제 코드를 가져와서 테스트 돌려볼게요.

 

저는 아래 페이지 소스코드를 가져왓습니다

 

https://kaspyx.tistory.com/14

 

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 차이 같아 보이더라고요.

64bit.dll.zip
4.20MB
32bit.dll.zip
4.45MB

 

 

이제 테스트까지 완료 햇으니

다음부터는 원하는 포트의 data를 가져와 파싱한후 서버로 전송하는 부분을 진행해야할 것같습니다.