웹캠을이용한노트북도난경보시스템 (S.I.L.C) 팀명 :It's Real 담당교수님 : 이병천교수님 조장 : 최용현 (07) 조원 : 최철원 (07) 신준섭 (07) 김명진 (08) 정보보호학과 - 1 -

Similar documents
Programming hwp

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B

Microsoft PowerPoint - IP11.pptx

PowerPoint 프레젠테이션

K&R2 Reference Manual 번역본

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

목차 목차포트스캔코드포트스캔결과포트스캔탐지코드포트스캔탐지결과 참조

2009년 상반기 사업계획

BMP 파일 처리

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다.

The Pocket Guide to TCP/IP Sockets: C Version

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

The Pocket Guide to TCP/IP Sockets: C Version

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

13주-14주proc.PDF

歯Lecture2.PDF

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

C 언어 프로그래밊 과제 풀이

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

untitled

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

윈도우시스템프로그래밍

03장.스택.key

일반적인 네트워크의 구성은 다음과 같다

본 강의에 들어가기 전

歯9장.PDF

bn2019_2

슬라이드 1

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

untitled

untitled

chap10.PDF

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

11장 포인터

vi 사용법

Chapter #01 Subject

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint 프레젠테이션

chap7.key

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

C++ Programming

untitled

PowerPoint 프레젠테이션

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap12-고급기능.pptx


커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

C프로-3장c03逞풚

6주차.key

[제1강] 텍스트를 입력하세요

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

untitled

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

PowerPoint 프레젠테이션

졸업논문 되어자전거의현재정보를알려주게된다 시스템의동작절차그림 3-1 리더에서의자전거정보조회동작절차위에동작절차에서알수있듯이리더에서하는동작절차에서는크게 부분으로나눌수있다 리더에서에너지를보내 로부터데이터가전송되면자전거의정보를확인한다 여기서도난당한자전거인

PowerPoint 프레젠테이션

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제1장 Unix란 무엇인가?

Lab 3. 실습문제 (Single linked list)_해답.hwp

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - CSharp-10-예외처리

C++-¿Ïº®Çؼ³10Àå

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

5.스택(강의자료).key


버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>


MPLAB C18 C

UI TASK & KEY EVENT

02 C h a p t e r Java

untitled

Microsoft Word - hci07-final-answer.doc

Microsoft PowerPoint - Java7.pptx

untitled

API 매뉴얼

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Transcription:

웹캠을이용한노트북도난경보시스템 (S.I.L.C) 팀명 :It's Real 담당교수님 : 이병천교수님 조장 : 최용현 (07) 조원 : 최철원 (07) 신준섭 (07) 김명진 (08) 2013. 5. 정보보호학과 - 1 -

Ⅰ. 서론 목 차 Ⅰ- 1. 개발목적 Ⅰ- 2. 관련연구 1) OpenCV 라이브러리 2) DVR 시스템 3) Winpcap 소켓프로그램 Ⅱ. 본론 Ⅱ-1. 개발환경 Ⅱ-2. 개발일정 Ⅱ-3. 프로그램구성 1-1) Capture 프로그램 1-2) Send 프로그램 1-3) Receive 프로그램 2) 프로그램실행구성 Ⅲ. 결론 Ⅲ-1. 참고문헌 Ⅲ-2. 발표 PPT 자료 - 2 -

Ⅰ. 서론 Ⅰ-1 개발목적 Notebook(Labtop), TabletPC 등의발전으로이전자장비를휴대하는사람들이많습니다. 앞으로도꾸준한발전이계속돼서많은이용자가계속생길것입니다. 하지만이에반에이휴대용전자장비등은도난에있어서는매우취약한점을가지고있습니다. 그래서저희조는이런일의사후처리와예방에도움을줄수있는도난방지프로그램을개발하기로하였습니다. * 관련뉴스 etnews.com 박현선기사뉴스인용 출처사이트 : http://www.etnews.com/news/computing/security/2677970_1477.html - 3 -

Ⅰ-2 관련연구 1) OpenCV 라이브러리 Open Computer Vision 의약자로오픈소스컴퓨터비전 C 라이브러리이다. 원래는인텔에서개발하였으며, Window, Linux 등의여러플랫폼에서사용할수있다. 실시간이미지프로세싱에중점을둔라이브러리이다. 인텔 CPU에서사용하게되면속도의향상을볼수있는 Intel Performance Primitives(IPP) 를지원한다. 응용분야로는인간과컴퓨터상호작용 (HCI), 물체인식, 안면인식, 모바일로보틱스, 제스처인식등여러방면으로사용된다. 2) DVR 시스템아날로그영상감시장비인 CCTV를대체하는디지털방식의영상감시장비. CCTV에비해화질이뛰어난점외에도컴퓨터의하드디스크를저장매체로사용하기때문에녹화테이프를교체할필요가없고인터넷을통한실시간영상전송및원격지감시기능이있어네트워크로통합화하고있는정부및기관, 기업체들에게가장적절한영상감시시스템으로평가받고있다. DVR은전세계적으로연간 3조5000억원규모에달하는 CCTV 시장을향후 5년내에대체할것으로전망되고있으며장기적으로는 Home Security 등에응용돼개인시장으로도확대될가능성이높아성장잠재력이매우높은분야다. 3) winpcap 소켓프로그램 winpcap이란리눅스 / 유닉스에서이미유명한 Libpcap을윈도우개발환경에맞게포팅 ( 반도체디바이스에플라스틱수지를씌워서패키지하는수법의하나 ) 한것이다. win32 플랫폼에서네트워크패킷캡쳐를위한아키텍쳐이다. 커널레벨에서동작하는저수준의동적라이브러리인패킷필터와유저레벨에서동작하는고수준의시스템종속적인라이브러리를포함한다. 라이브러리라는말을대신하여아키텍쳐라부르는이유는패킷캡쳐는네트워크어댑터와 OS사이에서엄격한규칙이적용하는저수준의매커니즘이다. 특별히이러한네트워크작업은단순한라이브러리로충분하지않다. 처음으로캡쳐시스템은네트워크상에서전송되는저수준의데이터를읽기위해서 OS의시스템프로토콜을스택을우회하는방법이필요하다. 이것은 OS의커널레벨에서네트워크인터페이스드라이버에서직접적으로동작하는부분이요구된다. 이러한부분은시스템에종속이며 winpcap은 NPF라는디바이스드라이버를통해구현되었다. winpcap은윈도우버전별로다른드라이버버전을제공한다. 이드라이버는두가지중요한기능을제공하는데패킷캡쳐와패킷인젝션이다. 또한보다발전된필터시스템과모니터링엔진을제공한다. - 4 -

Ⅱ. 본론 Ⅱ-1. 개발환경 운영체제 : Microsoft Windows 7 32bit, 64bit 개발도구 : Microsoft Visual studio 2010 프로그래밍언어 : C/C++, MFC 라이브러리 : cv ( 기본컴퓨터비전, 영상처리주요알고리즘관련라이브러리 ) highgui ( 영상읽기, 윈도우관련, 카메라 / 동영상제어 ) cvcore ( 영상행렬을포함한다양한데이터구조지원라이브러리 ) Ⅱ-2. 개발일정월별내용조원역할분담및월별계획편성자료수집및각자취약한점연구중간점검및오류수정수정완료및마무리작업 9 월 10 월 11 월 12 월 1 월 2 월 3 월 4 월 5 월 최종보고서작성 Ⅱ-3. 시스템구상도 - 5 -

Ⅱ-3. 프로그램구성도 1-1) Capture 프로그램 #include "stdafx.h" #include "MFCtest.h" #include "MFCtestDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif class CAboutDlg : public CDialogEx public: CAboutDlg(); enum IDD = IDD_ABOUTBOX ; protected: virtual void DoDataExchange(CDataExchange* pdx); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() ; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) void CAboutDlg::DoDataExchange(CDataExchange* pdx) CDialogEx::DoDataExchange(pDX); BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() - 6 -

CMFCtestDlg::CMFCtestDlg(CWnd* pparent /*=NULL*/) : CDialogEx(CMFCtestDlg::IDD, pparent) m_hicon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pimage = NULL; void CMFCtestDlg::DoDataExchange(CDataExchange* pdx) CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_OPENCV_PIG, m_pic); BEGIN_MESSAGE_MAP(CMFCtestDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_WM_DESTROY() ON_WM_WINDOWPOSCHANGING() END_MESSAGE_MAP() // CMFCtestDlg message handlers BOOL CMFCtestDlg::OnInitDialog() CDialogEx::OnInitDialog(); ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* psysmenu = GetSystemMenu(FALSE); if (psysmenu!= NULL) BOOL bnamevalid; CString straboutmenu; bnamevalid = straboutmenu.loadstring(ids_aboutbox); ASSERT(bNameValid); - 7 -

if (!straboutmenu.isempty()) psysmenu->appendmenu(mf_separator); psysmenu->appendmenu(mf_string, IDM_ABOUTBOX, straboutmenu); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); // Set big icon // Set small icon // TODO: Add extra initialization here capture = cvcreatecameracapture(1); //1 번캠으로부터캡쳐를실행 m_timer = FALSE; i = 0; CMFCtestDlg::start(); // 스타트정의를실행 AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);// 다이얼로그를백그라운드로실행 return true; // return TRUE unless you set the focus to a control void CMFCtestDlg::OnSysCommand(UINT nid, LPARAM lparam) if ((nid & 0xFFF0) == IDM_ABOUTBOX) CAboutDlg dlgabout; dlgabout.domodal(); else CDialogEx::OnSysCommand(nID, lparam); // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CMFCtestDlg::OnPaint() - 8 -

if (IsIconic()) CPaintDC dc(this); // device context for painting S e n d M e s s a g e ( W M _ I C O N E R A S E B K G N D, reinterpret_cast<wparam>(dc.getsafehdc()), 0); // Center icon in client rectangle int cxicon = GetSystemMetrics(SM_CXICON); int cyicon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.width() - cxicon + 1) / 2; int y = (rect.height() - cyicon + 1) / 2; else // Draw the icon dc.drawicon(x, y, m_hicon); CDialogEx::OnPaint(); HCURSOR CMFCtestDlg::OnQueryDragIcon() return static_cast<hcursor>(m_hicon); void CMFCtestDlg::start() IplImage* image = 0; // 매프레임당영상처리를한다. CvCapture* capture = cvcapturefromcam(1); //1번캠을불러온다. cvnamedwindow( "Camera", 1 ); // 그려줄윈도우이름을정의한다. cvresizewindow( "Camera", 320, 240 ); // 그려줄윈도우사이즈를정의한다. CTime time; // 파일저장위한시간변수 - 9 -

CString filename; // 파일명 를재정의한다. CvFont* font = new CvFont; // OpenCV 영상에그려줄폰트를초기화한다. cvinitfont( font,cv_font_hershey_simplex, 1, 1, 0, 2, 8); // 영상에그릴폰트 ); WSADATA wsadata; CString str; // 이변수에 IP주소가저장된다. HOSTENT *p_host_info; // 로컴컴퓨터의호스트네임을불러온다. IN_ADDR in; char host_name[128]=0, ; if(!wsastartup( DESIRED_WINSOCK_VERSION, &wsadata ) ) if( wsadata.wversion >= MINIMUM_WINSOCK_VERSION ) gethostname(host_name, 128); p_host_info = gethostbyname( host_name ); if( p_host_info!= NULL ) for( int i = 0; p_host_info->h_addr_list[i]; i++ ) memcpy( &in, p_host_info->h_addr_list[i], 4 str = inet_ntoa( in ); WSACleanup(); 정 for(int i=0 ;i<10 ;i++ ) // 이미지를저장할때파일번호를 0 번부터 10 번설 time = CTime::GetCurrentTime(); // 현재시간가져오는함수 다. cvgrabframe( capture ); image = cvretrieveframe( capture ); // 동영상파일을 image 에저장한 - 10 -

한다. cvshowimage( "Camera", image ); // 이미지를 Camera 윈도우에출력 // 영상에폰트를삽입한다. cvputtext( image, str, cvpoint(50, 50), font, cvscalar(0, 0, 255)); // 문자열변수를시간으로만듬 filename.format("%d_%d_%d_%d_%d",time.getmonth(),time.getday(),time.gethour(),time.ge tminute(),time.getsecond()); sprintf(savefile, "%s.jpg", filename); cvsaveimage(savefile, image); // image를파일로저장한다. waitkey(1000); // 1000ms의딜레이를발생시킨다. 즉, 1초에 1장의이미지를저장하게된다. cvreleasecapture( &capture ); cvdestroywindow( "Camera" ); //Camera윈도우를종료한다. void CMFCtestDlg::OnTimer(UINT_PTR nidevent) // TODO: Add your message handler code here and/or call default if(nidevent == 1000) m_pimage = cvqueryframe(capture); CDC* pdc; CRect rect; pdc = m_pic.getdc(); m_pic.getclientrect(&rect); m_cimage.copyof(m_pimage); m_cimage.drawtohdc(pdc->m_hdc, rect); ReleaseDC(pDC); CDialogEx::OnTimer(nIDEvent); - 11 -

void CMFCtestDlg::OnDestroy() CDialogEx::OnDestroy(); // TODO: Add your message handler code here KillTimer(1000); void CMFCtestDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos) CDialogEx::OnWindowPosChanging(lpwndpos); // TODO: 여기에메시지처리기코드를추가합니다. //#if!defined(_debug) // 다이얼로그박스를보이지않게설정한다. lpwndpos->flags &= ~SWP_SHOWWINDOW; //#endif // Not _DEBUG - 12 -

1-2) Send 프로그램 #include<stdio.h> #include<stdlib.h> #definehave_remote #include"pcap.h" #include"remote-ext.h" #defineimagesize256// 이미지파일레코드사이즈 #definepktsize272// 송수신패킷사이즈 u_charpkt_data[pktsize+1], buff[imagesize]; u_charmac[]=0xe8, 0x03, 0x9A, 0xB9, 0xD8, 0xB5,// 서버측MAC 주소 0x00, 0x90, 0xF5, 0xD8, 0x5F, 0x98,// 클라이언트MAC 주소 'Z', 'Q', 'Z', 'Q' ;// 패킷확인문자열 void main() pcap_if_t*alldevs;// pcap 장치정보변수구조체 pcap_if_t*d;// pcap 장치인터페이스구조체 pcap_t*adhandle;// 장치설정값구조체 u_charc; charerrbuf[pcap_errbuf_size]; inti, inum, no_interface=0, rec=0, size; charread_fname[100]; FILE*fpr; //size_tsize; if(pcap_findalldevs_ex(pcap_src_if_string, NULL, &alldevs, errbuf) == -1) // pcap_open() 으로열수있는장치list 생성함수 // 검사할장치위치, null, 장치정보변수, 에러메세지저장변수 fprintf(stderr,"error in pcap_findalldevs: %s\n", errbuf); goto error; printf("\n>> 네트워크인터페이스카드 \n"); for(d=alldevs; d; d=d->next)// 생성된장치list 출력 printf("\n %d) %s",++no_interface, d->name); - 13 -

if(d->description) printf("\n (%s)\n",d->description); else printf("(no description available)\n"); if(no_interface==0) printf("\n>> 인터페이스가확인되지않습니다! WinPcap 설치여부를점검하세요!\n"); goto error; printf("\7\7\n.. 해당인터페이스번호를선택하세요 (1-%d)? ",no_interface); scanf("%d",&inum); if(inum < 1 inum > no_interface) printf("\n>> 인터페이스번호를잘못입력하였습니다.\n"); pcap_freealldevs(alldevs); // 동적할당한공간을해제 goto error; // 네트워크어댑터open for(d=alldevs, i=0; i<inum-1; d=d->next, i++); if( (adhandle = pcap_open(d->name, 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf)) == NULL)// 장치이름, 캡쳐가능한크기, 모드, timeout, 원격장치권한, 에러버퍼크기 fprintf(stderr,"\n>> adapter open 오류! %s가winpcap에서지원되지않습니다!\n",d->name); pcap_freealldevs(alldevs); goto error; printf("\nlistening on %s\n",d->description); pcap_freealldevs(alldevs); // 동적할당한공간을해제 // 서버 MAC 주소세팅 for (i=0; i<16; i++) pkt_data[i]=mac[i]; printf("\n>> 서버측 MAC 주소 : "); for (i=0; i<6; i++) printf(" %2x", pkt_data[i]); printf("\n>> 클라이언트 MAC 주소 : "); for (i=6; i<12; i++) printf(" %2x", pkt_data[i]); - 14 -

printf("\n"); again: printf("\7\7\n.. 서버와클라이언트MAC 주소가일치합니까 ( 예 = 1, 아니오 = 2 )? "); scanf("%d", &i); if (i<1 i>2) goto again; if (i==2) printf("\n>> MAC 주소를수정하세요.\n"); goto error; // 읽을파일지정 printf("\7\7\n\n.. 서버로전송할파일명을입력하시오 : ");// 파일경로및파일명입력 scanf("%s", read_fname); if((fpr=fopen(read_fname, "rb"))==null) printf("\n.. 파일을열수없습니다.\n"); goto error; printf("\7\7\n\n>> 파일 (%s) 을읽어서버로전송합니다.\n", read_fname); // 패킷구성및송신 while(1) size=fread(buff, sizeof(char), IMAGESIZE, fpr);// 이미지파일읽기 for (i=0; i<size; i++) pkt_data[i+16]=buff[i];// MAC 주소뒤에이미지수록 ++rec; pkt_data[size+16]=0;// 패킷번호, 종료문자삽입 // 패킷전송 if (pcap_sendpacket(adhandle, pkt_data, size+16)!= 0) fprintf(stderr,"\nerror sending the packet: %s\n", pcap_geterr(adhandle)); goto error; if (size!=imagesize) printf("\n>> 마지막패킷번호 : %4d, 패킷크기 : %3d바이트\n", ++rec, size+16); for(i=0;i<size+16; i++) c = pkt_data[i]; if((' ' > c) ('~' < c)) c = '.' printf("%c",c); printf("\n\n>> 파일전송이완료되었습니다.\n"); fclose(fpr); - 15 -

goto end; end: printf("\7\7\7\7\7\n\n>> 작업이정상적으로종료되었습니다.\n\n"); exit(0); error:// 패킷전송오류발생 printf("\7\7\n\n>> 작업이비정상적으로종료되었습니다 \n\n"); exit(-1); - 16 -

1-3) Receive 파일 #include<stdio.h> #include<stdlib.h> #definehave_remote #include"pcap.h" #include"remote-ext.h" #defineimagesize256// 이미지파일레코드사이즈 #definepktsize272// 송수신패킷사이즈 charwrite_fname[100]; charfname[100], buff[imagesize]; FILE*fpw; u_charmac[16]=0xe8, 0x03, 0x9A, 0xB9, 0xD8, 0xB5,// 서버측MAC 주소 0x00, 0x90, 0xF5, 0xD8, 0x5F, 0x98,// 클라이언트MAC 주소 'Z', 'Q', 'Z', 'Q';// 패킷확인문자열 u_charc; intrec=0; // 패킷처리기 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) structtm *ltime; chartimestr[16]; time_ttemp = header->ts.tv_sec; inti, pkt_length; pkt_length=header->len;// 캡쳐한패킷길이 ltime=localtime(&temp);// 패킷을캡쳐한시간 strftime(timestr, sizeof(timestr),"%h:%m:%s",ltime); for (i=0; i<16; i++)// MAC 주소및패킷확인문자열확인 if (pkt_data[i]!=mac[i]) goto skip; ++rec; for (i=0; i<pkt_length; i++) buff[i]=pkt_data[i+16]; buff[pkt_length-16]=0;// 버퍼종료문자삽입 - 17 -

fwrite(buff, sizeof(char), pkt_length-16, fpw); if (pkt_length!= PKTSIZE) printf("\n>> 마지막패킷번호 : %4d, 패킷크기 : %3d바이트\n", ++rec, pkt_length); for(i=0; i<pkt_length; i++) c = pkt_data[i]; if((' ' > c) ('~' < c)) c = '.' printf("%c",c); printf("\7\7\n\n>> 파일수신을완료했습니다 \n\n"); printf("\n>> 수신한파일은 %s입니다.\n", fname); again: printf("\7\7\n\n.. 이미지파일내용을확인하시겠습니까 ( 예 = 1 )?"); scanf("%d", &i); if (i!=1) goto again; fclose(fpw); system("cls"); system("dir"); printf("\7\7\n>> 수신한파일은 %s입니다.\n\n", fname); system("mspaint.exe"); exit(0); skip:; void main() pcap_if_t*alldevs;// pcap 장치정보변수구조체 pcap_if_t*d;// pcap 장치인터페이스구조체 pcap_t*adhandle;// 장치설정값구조체 char errbuf[pcap_errbuf_size]; int i, inum, no_interface=0; // 패킷을읽어쓰기할파일지정및오픈 printf("\7\7>> 시스템을기동합니다.\n\n"); // 인터페이스카드점검및지정 - 18 -

if(pcap_findalldevs_ex(pcap_src_if_string, NULL, &alldevs, errbuf) == -1) // pcap_open() 으로열수있는장치list 생성함수 // 검사할장치위치, null, 장치정보변수, 에러메세지저장변수 printf("\n>> Error in pcap_findalldevs: %s\n",errbuf); exit(-1); printf("\n>> 네트워크인터페이스카드 \n"); for(d=alldevs; d; d=d->next)// 생성된장치list 출력 printf("\n %d) %s",++no_interface, d->name); if(d->description) printf("\n (%s)\n",d->description); else printf("(no description available)\n"); if(no_interface==0) printf("\n>> 인터페이스가확인되지않습니다! WinPcap 설치여부를점검하세요!\n"); exit(-1); printf("\7\7\n.. 해당인터페이스번호를선택하세요 (1-%d)? ",no_interface); scanf("%d",&inum); if(inum < 1 inum > no_interface) printf("\n>> 인터페이스번호오류가발생했습니다.\n"); pcap_freealldevs(alldevs); // 동적할당한공간을free exit(-1); for(d=alldevs, i=0; i<inum-1; d=d->next,i++); if( (adhandle = pcap_open(d->name,65536,pcap_openflag_promiscuous,1000,null,errbuf)) == NULL)// 장치이름, 캡쳐가능한크기, 모드, timeout, 원격장치권한, 에러버퍼크기 printf("\n>> adapter open 오류! %s가winpcap에서지원되지않습니다!\n",d->name); pcap_freealldevs(alldevs); exit(-1); printf("\nlistening on %s\n",d->description); pcap_freealldevs(alldevs);// 동적할당한공간을해제 - 19 -

printf("\7\7\n\n.. 수신한이미지를저장할파일명을입력하시오 : ");// 파일경로및파일명입력 scanf("%s", write_fname); if((fpw=fopen(write_fname, "wb"))==null) printf("\n.. 파일을열수없습니다.\n"); exit(-1); // 비정상적인종료 for (i=0; i<strlen(write_fname); i++) fname[i]=write_fname[i]; printf("\n>> 지정한파일명은 %s 입니다.\n\n", fname); printf("\7\7\n>> 클라이언트에서전송하는신호를수신대기중입니다.\n"); // 패킷캡쳐시작 if((fpw=fopen(write_fname, "wb"))==null) printf("\n.. 파일을열수없습니다.\n"); exit(-1); // 비정상적인종료 pcap_loop(adhandle, 0, packet_handler, NULL);// 패킷처리기호출 exit(0); - 20 -

기간 내용 조별주간활동보고서 진행내용 1 주차조원전체팀원각자아이디어및주제생각해보고검토 2 주차조원전체각자공부과목정하여계획서작성 약 2 개월 최용현 최철원 리눅스서버, C++(openCV Library), 웹프로그래밍공부 11 주차 약 1 개월 최용현신준섭최철원김명진 웹캠실행을위한 opencv 환경설정및자료수집 리눅스서버 (FTP, web hard) 구축및검토 16주차 17 ~ 19 주차 20 ~ 23 주차 24 ~ 27 주차 28 ~ 31 주차 32 ~ 35 주차 36 ~ 40 주차 최철원김명진최용현최철원최용현신준섭최철원김명진최용현최철원최용현최철원김명진신준섭 서버구축및 php프로그래밍을이용한웹페이지완성미비한점을수정 ( 웹페이지폐쇄 & web hard 구축 ) OpenCV 프로그램개발완료 web hard 서버최종구축완료파일전송프로그래밍 (winpcap) 자료조사웹캠실행및파일전송최종검토최종보고서작성및완성 - 21 -

Ⅲ. 결론 프로그램의원래의목적은프로그램실행후백그라운드상태에서자동적으로클라이언트가서버로파일을전송하여사용자가 Webhard나 FTP 서버등을이용하여사용자인증후사용자가보낸이미지파일을언제든지전송을받을수있도록하는것이목표이었지만개발을하면서여러난관에부족하여 Capture 프로그램및 Send&Receive 프로그램만완성. 지금현재는 Capture 프로그램을실행하여 Send&Receive 프로그램을수동적으로실행하여이미지파일을보낼수만있도록구현이되어있습니다. 본래의목적에도달하지않았지만조원들이서로열심히한계획한프로그램을제작하여여러모로색다른경험을할수있었고앞으로이프로그램의문제점을보안하는것으로노력을해보겠습니다. Ⅲ-1. 참고문헌컴퓨터비전커뮤니티카페 OpenCVKorea http://cafe.naver.com/opencv OpenCV 2 computer vision application programming cookbook (OpenCV 2를활용한컴퓨터비전프로그래밍 ) - 로버트나가니에 WinPcap 홉페이지 http://www.winpcap.org/ - 22 -

Ⅲ-2. 발표 PPT 자료 - 23 -

- 24 -

- 25 -

- 26 -

- 27 -

- 28 -

- 29 -

- 30 -

- 31 -

- 32 -

- 33 -