[[TableOfContents]] = 새싹êµì‹¤ = * 임시명 세싹반입니다. * 수업시간: 매주 í™” 15:00~16:00 금 12:00~13:00 ì´ ì™¸ì— ì›í• 때 ì–¸ì œë“ ì°¾ì•„ì˜¤ë©´ ë©ë‹ˆë‹¤. * 수업과목: everything you want = 구성ì¸ì› = || ì„ ìƒë‹˜ || [ì •ì˜ì •] || ||<|2> 새싹 || [ê¶Œì˜ê¸°] || || [ê¹€í¬ì„±] || * ë©”ì¼ : pkccr1@gmail.com * 네ì´íŠ¸ì˜¨ : pkccr@nate.com = feedback = * 새싹êµì‹¤ì´ ZeroPageì—서 시행ë˜ëŠ”ë§Œí¼ 4F([ThreeFs] + Future Action Plan)ì— ë§žê²Œ feedbackì„ ìž‘ì„±í•©ë‹ˆë‹¤. * Facts, Feelings, Findings, Future Action Plan. 즉, 사실, ëŠë‚€ ì , ê¹¨ë‹¬ì€ ì , ì•žìœ¼ë¡œì˜ ê³„íš. * 예를 들어 ì§€ë‚œì£¼ì— ëˆê°€ìŠ¤ë¥¼ ë¨¹ì€ ê²ƒì— ëŒ€í•´ 후기를 쓴다면 : "ì§€ë‚œì£¼ì— ê°•ë‚¨ì— ê°€ì„œ í•˜ë‚˜ì— 5ë§Œì›í•˜ëŠ” ëˆê°€ìŠ¤ë¥¼ 먹었다.(사실) 기대를 잔뜩 í–ˆëŠ”ë° ë³„ë¡œ ë§›ì´ ì—†ì—ˆë‹¤.(ëŠë‚Œ) ê°•ë‚¨ì€ ë•…ê°’ì´ ë¹„ì‹¸ì„œ ê°’ë§Œ ë³´ê³ ì—„ì² ë§›ìžˆì„ê±°ë¼ ê¸°ëŒ€í•˜ë©´ 안ëœë‹¤ëŠ” ê²ƒì„ ì•Œì•˜ë‹¤.(깨달ì€ì ) 다ìŒì—는 미리 ì¸í„°ë„·ì—서 í‰ì„ ì°¾ì•„ë³´ê³ ë³„ì ì´ ë†’ì€ ëˆê°€ìŠ¤ì§‘ì„ ì°¾ì•„ì„œ ê°€ë´ì•¼ê² 다.(ì•žìœ¼ë¡œì˜ ê³„íš)" * 설마 ì´ê²ƒë³´ë‹¤ ë” ì§§ê²Œ ì“°ì§„ ì•Šê² ì£ ? 믿ì„게요 * feedbackì€ ìµœëŒ€í•œ 성ì˜ìžˆê²Œ ì¨ì£¼ì„¸ìš”. * 반드시 ZeroWikiì— ìž‘ì„±í•´ì£¼ì„¸ìš”. 하위 페ì´ì§€ë¥¼ 만드는 ê²ƒë„ í—ˆìš©í•©ë‹ˆë‹¤. * ì—¬ëŸ¬ë¶„ë“¤ì´ ë°°ìš´ ë‚´ìš©ì„ ì •ë¦¬í•´ì£¼ì„¸ìš”. 학습효과가 ë” ì»¤ì§‘ë‹ˆë‹¤. * ì°¸ê³ ë¡œ ZeroWiki는 MoniWiki Engineì„ ì‚¬ìš©í•˜ë©° Google Chromeì´ë‚˜ Mozila Firefox, Safari보다는 Internet Explorerì—서 가장 잘 ëŒì•„가는 것 같습니다. = 수업 = == 1회차(2012ë…„ 3ì›” 16ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] ||O|| ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] ||O|| || [ê¹€í¬ì„±] ||O|| === 수업내용 === * wiki를 왜 쓰는지, 어떻게 ì‚¬ìš©í•˜ëŠ”ì§€ì— ëŒ€í•´ ë°°ì› ìŠµë‹ˆë‹¤. * gcc ê°œë°œí™˜ê²½ì„ êµ¬ì¶•í•˜ëŠ” ë²•ì„ ì•Œì•„ë³´ì•˜ìŠµë‹ˆë‹¤. 1) https://www.virtualbox.org ì—서 ìžì‹ ì˜ ìš´ì˜ ì²´ì œì— ë§žëŠ” VirtualBux를 설치 2) http://ftp.daum.net -> Ubuntu-releases -> 11.10 -> ubuntu-11.10-deskto-amd64.iso 다운 3) Virtualbox실행 -> 새로 만들기 -> ìš´ì˜ì²´ì œ : Linux ë²„ì „ : Ubuntu -> 메모리1024MB로 ì„¤ì •í•˜ê³ ë‚˜ë¨¸ì§€ ë””í´íЏ 설치 4) 만들어진 ubuntu 실행 -> 설치 미디어로 ISOíŒŒì¼ ë§ˆìš´íŠ¸ -> 설치 (설치 ë„ì¤‘ì— ì„¤ì •í•´ì¤˜ì•¼ë˜ëŠ” 것 : 글ìžíŒ 배치를 한êµì–´(101/104키 호환)으로 해야ë¨!) * gcc로 hello world를 ì»´íŒŒì¼ í•´ë³´ì•˜ìŠµë‹ˆë‹¤. 1) 우분투 소프트웨어 센터ì—서 gcc 검색 & 설치 2) ì›í•˜ëŠ” ê²½ë¡œì— ë¹ˆ 문서 만들기 (확장ìžëŠ” .c로 해주세요) 3) 해당 ë¬¸ì„œì— ì½”ë“œ 작성 4) terminal 실행 -> .c 파ì¼ì´ 있는 경로로 ì´ë™ (ls와 cd를 ì´ìš©í•©ë‹ˆë‹¤.) 5) gcc로 컴파ì¼ì„ 합니다. (gcc 파ì¼ëª….c -o ì›í•˜ëŠ”íŒŒì¼ëª… -std=c99) 해당 ì˜ˆì œì™¸ì— ì¶”ê°€ë¡œ 여러 ì˜µì…˜ì„ ì¤„ìˆ˜ 있습니다. 6) 컴파ì¼ëœ 파ì¼ì„ 실행합니다. (./파ì¼ëª…) * w3schools를 소개했습니다. (www.w3schools.com) * í˜‘ì—…ì˜ ì¤‘ìš”ì„±ì— ëŒ€í•´ ì´ì•¼ê¸°í–ˆìŠµë‹ˆë‹¤. * 문서작성, ë²„ì „ê´€ë¦¬, 주ì„처리 등 ì•„ì§ì€ 실ê°ì´ ì•ˆë‚˜ê² ì§€ë§Œ 처ìŒë¶€í„° ìŠµê´€ì„ ë“¤ì´ëŠ”ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. === ìˆ™ì œ === * wiki 사용법 ìµížˆê¸° 1) ìžê¸° 페ì´ì§€ 만들기 - 로그ì¸í›„ ìžì‹ ì˜ ì´ë¦„으로 검색하여 페ì´ì§€ë¥¼ 작성하시면 ë©ë‹ˆë‹¤. 기본ì ì¸ í”„ë¡œí•„ê³¼ í•˜ê³ ì‹¶ì€ë§ì„ ì 어주세요. 2) 후기 작성 - 아래 íšŒê³ ëž€ì— íŽ¸ì§‘ì„ ëˆŒëŸ¬ 후기를 남겨주시면ë©ë‹ˆë‹¤. ìœ„ì˜ feedback í•ëª©ì„ ì°¸ê³ í•˜ì„¸ìš”. * gcc 개발환경 구축하기 1) virtual box로 linux 설치 후 hello world ìž‘ì„±í•˜ê³ ì»´íŒŒì¼í•˜ì—¬ 스í¬ë¦°ìƒ·ì„ 강사 ë©”ì¼ë¡œ 보내주세요. === ê¶Œìž¥ì‚¬í• === * ìˆ™ì œëŠ” 아니지만 해봤으면 합니다:D 1) w3schoolsì—서 html파트 ì½ê³ 실습해보기 2) linuxì˜ ë‹¤ì–‘í•œ ëª…ë ¹ì–´ 검색해보기 3) gccì˜ ì˜µì…˜ 검색해보기 === 후기 === * 새싹 ì²«ì‹œê°„ì„ ê°€ì¡ŒìŠµë‹ˆë‹¤. 다른 새싹반들과는 다른 커리í˜ëŸ¼ìœ¼ë¡œ ì§„í–‰ì„ í•´ì•¼í•´ì„œ, ë¬´ì—‡ì„ ìˆ˜ì—…í•´ì•¼í• ì§€ ê³ ë¯¼ì´ ë§ŽìŠµë‹ˆë‹¤(멘붕 ì¼ë³´ì§ì „). í•™êµìˆ˜ì—… 듣는것처럼 하지ë§ê³ ìžìœ 로운 분위기ì—서 ì§„í–‰ë˜ë©´ ì¢‹ê² ìŠµë‹ˆë‹¤. - [ì •ì˜ì •] * 새싹 ì²«ì‹œê°„ì„ ê°€ì¡ŒìŠµë‹ˆë‹¤. ìº¡ìŠ¤í†¤ì‹¤ë„ ì²˜ìŒ ë“¤ì–´ê°€ë´ì„œ ë§Žì´ ì‹ ê¸°í–ˆìŠµë‹ˆë‹¤. ì²˜ìŒ ë“£ëŠ” 용어, ì²˜ìŒ ë³´ëŠ” 화면들 ìƒì†Œí•œê²Œ 많지만 ìž¬ë¯¸ìžˆì„ ê²ƒ 같아서 기대가 ë©ë‹ˆë‹¤. ìˆ™ì œë„ ê¶Œìž¥ì‚¬í•ë„ ì—´ì‹¬ížˆ í•´ë³´ê² ìŠµë‹ˆë‹¤. 앞으로 잘 ë¶€íƒë“œë¦½ë‹ˆë‹¤. - [ê¶Œì˜ê¸°] * 새싹 ì²«ì‹œê°„ì„ ê°€ì¡ŒìŠµë‹ˆë‹¤. ì´ê³³ Wikiê°€ 매우 í¥ë¯¸ë¡œì› ê³ , ìº¡ìŠ¤í†¤ì‹¤ì— ëŒ€í•´ì„œë„ ê¶ê¸ˆì ì„ í•´ì†Œí•˜ì—¬ 좋았습니다. ì´ë¦„ë§Œ ë“¤ì–´ë³´ê³ ì¢€ì²˜ëŸ¼ ë³¼ ì¼ì´ ì—†ë˜ ê²ƒë“¤ì„ ë³´ê²Œë˜ì–´ 좋았습니다. 앞으로 잘 ë¶€íƒë“œë¦½ë‹ˆë‹¤. - [ê¹€í¬ì„±] * ìˆ™ì œë¥¼ 수행하기 위해 버추얼 박스를 설치하였습니다. 설치파ì¼ì´ ì •ìƒì 으로 실행 않는 ë¬¸ì œê°€ ìžˆì—ˆëŠ”ë° ì¸í„°ë„·ìœ¼ë¡œ ê°•ì œ ì••ì¶•í•´ì œí•˜ëŠ” ë°©ë²•ì„ ë“£ê³ 7z으로 ì••ì¶•ì„ í•´ì œí•˜ëŠ” 방법으로 해결하였습니다. ë°ëª¬ì´ 없어 iso파ì¼ë„ 7z으로 풀었습니다. - [ê¹€í¬ì„±] * ì–´... iso파ì¼ì„ í’€í•„ìš”ì—†ì´ ë²„ì¶”ì–¼ë°•ìŠ¤ì—서 바로 마운트시키는건ë°.. ì œëŒ€ë¡œ 설치ë¬ì–´? - [ì •ì˜ì •] * ê·¸ë¦¬ê³ ì‹¤íŒ¨í•˜ì˜€ìŠµë‹ˆë‹¤. 7z ì 장... 여러단계를 í•œë²ˆì— í’€ì–´ì£¼ëŠ”ê±° 같군요. ë©”ë‰´ì–¼ì„ ì½ì–´ë³´ë‹ˆ cmd로 í’€ë¼ê³ 합니다. 시키는ë°ë¡œ 하니 msi 파ì¼ì´ 나오는군요. -[ê¹€í¬ì„±]- * amd64ë²„ì „ì„ ì“°ë ¤ê³ í–ˆë”니 cpuë¬¸ì œë¡œ ê°€ìƒë¨¸ì‹ ì—서 설치ë˜ì§€ 않는군요. i386ë²„ì „ìœ¼ë¡œ 깔았습니다. -[ê¹€í¬ì„±] ---- == 2회차(2012ë…„ 3ì›” 20ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] ||O|| ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] ||O|| || [ê¹€í¬ì„±] ||O|| === 수업내용 === * ìˆ™ì œì— ëŒ€í•´ì„œ ì´ì•¼ê¸° 나누었습니다. 1) gcc ì»´íŒŒì¼ ì˜µì…˜ì´ ì–´ë ¤ì› ìŠµë‹ˆë‹¤. - gcc ì»´íŒŒì¼ ì˜µì…˜ì˜ ëŒ€ë¶€ë¶„ì€ ì»´íŒŒì¼ì— í¬ë¦¬í‹°ì»¬í•œ ê²ƒì´ ì•„ë‹ˆë¼ ì‚¬ìš©ìžì—게 ì •ë³´ë¥¼ ì œê³µí•˜ëŠ” ê²ƒì´ ëª©ì 입니다. 그냥 안ì¨ë„ ë˜ìš” :D * 네트워í¬ì— 대하여 간단히 알아보았습니다. 1) 우리가 사용하는 ì¸í„°ë„·ì€ 패킷 스위치 ë°©ì‹ìœ¼ë¡œ 소í¬ì— 주소를 ì¨ì„œ 목ì ì§€ì— ë³´ë‚´ëŠ” 것 처럼 ìž‘ë™í•˜ëŠ” ë„¤íŠ¸ì›Œí¬ ìž…ë‹ˆë‹¤. 2) ì¸í„°ë„· í”„ë¡œí† ì½œì˜ ê³„ì¸µë„ì— ëŒ€í•´ 알아보았습니다. - app : 우리가 ì‹¤ì œë¡œ 사용하는 서비스를 ì œê³µí•˜ëŠ” 계층입니다. http, smtp, ftpë“±ì´ ìžˆìŠµë‹ˆë‹¤. - transport : ë°ì´í„°ë¥¼ 어떻게 보낼지 ê²°ì •í•˜ëŠ” 계층입니다. ë°ì´í„°ë¥¼ 어떻게 묶어서 보낼지, 오류처리는 어떻게 í• ì§€ì— ëŒ€í•´ ê²°ì •í•©ë‹ˆë‹¤. TCP/UDPë“±ì´ ìžˆìŠµë‹ˆë‹¤. - ip : 호스트와 호스트, 즉 출발지ì—서 목ì 지까지 ë°ì´í„° 묶ìŒ(패킷)ì„ ì „ë‹¬í•˜ëŠ” ì—í• ì„ í•©ë‹ˆë‹¤. ë¼ìš°í„°ê°€ 있습니다. - link : 노드와 ë…¸ë“œê°„ì— ë°ì´í„°ë¥¼ ì£¼ê³ ë°›ëŠ” ì—í• ì„ í•©ë‹ˆë‹¤. 스위치, ë¸Œë¦¿ì§€ë“±ì´ í¬í•¨ë©ë‹ˆë‹¤. - physical : ë¹„íŠ¸ë“¤ì„ ë¬¼ë¦¬ì 으로 ì´ë™ì‹œí‚¤ëŠ” ì—í• ì„ í•©ë‹ˆë‹¤. ìœ ì„ ì˜ ê²½ìš° 다양한 ì¼€ì´ë¸”, ë¬´ì„ ì¼ ê²½ìš° 공기가 매체가 ë˜ê² 네요. 3) 하지만 우리가 ì´ ëª¨ë“ ê²ƒì„ ë°˜ë“œì‹œ 알아야 í†µì‹ í”„ë¡œê·¸ëž¨ì„ í• ìˆ˜ ìžˆëŠ”ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. - ì´ëŸ° ê¸°ëŠ¥ë“¤ì„ ë‹¨ê³„ë³„ë¡œ 나눈 ì´ìœ 는, ìžì‹ ì˜ í•˜ìœ„ ê³„ì¸µì˜ êµ¬í˜„ë‚´ìš©ì´ ì–´ë–¤ì§€ 잘 몰ë¼ë„ ê·¸ ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ í•˜ê¸° 위해서입니다. - 즉, 소켓 프로그래ë°ë„ 해당 함수와 하위 í•¨ìˆ˜ë“¤ì˜ ìž‘ë™ì›ë¦¬ë¥¼ 잘 모르ë”ë¼ë„ ì–´ë–¤ ê¸°ëŠ¥ì„ í•˜ëŠ”ì§€ë§Œ 알면 쉽게 í†µì‹ í”„ë¡œê·¸ëž˜ë°ì„ í• ìˆ˜ 있습니다. 4) 그럼 ì†Œì¼“ì€ ë¬´ì—‡ì¸ê°€ìš”? - ì¸í„°ë„· 소켓(Internet socket, socket' í˜¹ì€ network socket ë¼ê³ ë¶€ë¥´ê¸°ë„ í•œë‹¤)ì€ ë„¤íŠ¸ì›Œí¬ë¡œ ì—°ê²°ë˜ì–´ 있는 ì»´í“¨í„°ì˜ í†µì‹ ì˜ ì ‘ì ì— ìœ„ì¹˜í•œ í†µì‹ ê°ì²´ë‹¤. ë„¤íŠ¸ì›Œí¬ í†µì‹ ì„ ìœ„í•œ í”„ë¡œê·¸ëž¨ë“¤ì€ ì†Œì¼“ì„ ìƒì„±í•˜ê³ , ì´ ì†Œì¼“ì„ í†µí•´ì„œ 서로 ë°ì´í„°ë¥¼ êµí™˜í•œë‹¤. - wikipedia - 는 훼ì´í¬ê³ :P 간단히 설명하면 서버와 í´ë¼ì´ì–¸íŠ¸ê°€ byte streamì„ ì£¼ê³ ë°›ëŠ” ê²ƒì„ ë§ˆì¹˜ íŒŒì¼ ìž…ì¶œë ¥ì„ í•˜ë“¯ 해주는 것입니다. || 파ì¼ìž…ì¶œë ¥ || 소켓 || || 파ì¼êµ¬ì¡°ì²´ìƒì„± || 소켓 ìƒì„± || || fopen() || connect() || || read()/write() || read()/write() || || close() || close() || 5) ìžì„¸í•œ 사í•ì€ http://forum.falinux.com/zbxe/?document_srl=441104 를 ì°¸ê³ í•˜ì„¸ìš”. === ìˆ™ì œ === * c로 소켓짜기 1) 위 참조 페ì´ì§€ì˜ 소스를 ì°¸ê³ í•˜ì—¬ 서버와 í´ë¼ì´ì–¸íЏ 코드를 ì§ì ‘ 짜봅시다. 2) 요구사í•ì€ í´ë¼ì´ì–¸íЏì—서 보내온 메시지를 서버측ì—서 대문ìžë¡œ 바꿔서 다시 í´ë¼ì´ì–¸íЏì—게 보내주는 것입니다. 3) 난ì´ë„ê°€ 다소 ë†’ì„ ìˆ˜ 있으므로 ì™„ì„±ì„ ìš”êµ¬í•˜ì§€ 않습니다. 한번 í•´ë³´ê³ ê¸ˆìš”ì¼ë‚ 다시 ì´ì•¼ê¸° ë‚˜ëˆ ë³´ê² ìŠµë‹ˆë‹¤. 4) 리눅스 환경ì—서 gcc를 사용해 봅시다. 5) ì–´ë ¤ìš´ ì ì€ ì¹´í†¡ì´ë‚˜ 위키 ëŒ“ê¸€ì„ ì´ìš©í•´ 주세요. === ê¶Œìž¥ì‚¬í• === * ìˆ™ì œëŠ” 아니지만 해봤으면 합니다:D 1) w3schools는 ê³„ì† ì¡°ê¸ˆì”© 해보길 ë°”ëžë‹ˆë‹¤. === 후기 === * ì´ ë°˜ì˜ ìˆ˜ì—…ë‚´ìš©ì„ ë³´ë‹ˆ ì €ë„ ì°¸ì—¬í•˜ê³ ì‹¶ì–´ì§€ëŠ”êµ°ìš” =_=ã…‹ ìž¬ë°Œê² ë„¤ìš” ã…‹ã…‹ - [김태진] * 소켓 프로그래ë°ì„ 시작하였습니다. 네트워í¬ì— 대해 ì „í˜€ ì§€ì‹ì´ 없는 친구들ì—게 ì§§ì€ ì‹œê°„ì•ˆì— ì–´ë–»ê²Œ ê°œë…ì„ ì•Œë ¤ì£¼ë‚˜ ë§Žì´ ê³ ë¯¼í–ˆê³ ê²°ê³¼ëŠ” ì—시 failì´ì—ˆë˜ 것 같습니다. ì§§ì€ ì‹œê°„ì— ì´ë¡ ì ì¸ ë¶€ë¶„ì„ í•˜ëŠ”ê±´ 강사나 새싹ì´ë‚˜ ë©˜íƒˆì´ ì°¢ì–´ì§€ëŠ” ì¼ì¸ 것 같습니다..... ê·¸ë¦¬ê³ í™”ìš”ì¼ ì‹œê°„ì„ ì¡°ì •í•´ì•¼ë 것 같네요.. 새싹 ìˆ˜ì—…ì´ ì„ ëŒ€ ëë‚˜ê³ ë°”ë¡œ 있어서 í¬ì„±ì´ê°€ 꾸벅꾸벅 졸았습니다. ì„ ëŒ€ë¥¼ 안들ì€ìžë§Œì´ ëŒì„ ë˜ì§€ë¼. - [ì •ì˜ì •] * 오 C로 소켓 프로그래ë°ì€ ì²˜ìŒ ë³´ë„¤ìš” 재미있ì„듯ㅋㅋ - [ì‹ ê¸°í˜¸] * ì´ ë°˜ 빡세네요 ã…‹ã…‹ã…‹ã…‹ ë„¤íŠ¸ì›Œí¬ ê°€ë¥´ì¹˜ê¸° íž˜ë“¤ê² ë‹¤â€¦ 난ê°í• ë• ë§¨ë•…ì— í—¤ë”©í•˜ëŠ” 것 ê·¸ê²ƒì´ ì§„ì •í•œ ê³µëŒì´ì˜ 길ì´ë¼ê³ 둘러대는 게 좋ì„듯… - [김수경] * 졸면서 ë“¤ì–´ë„ ì´í•´ê°€ ê°€ëŠ¥í• ì •ë„로 ìš”ì ì´ ìž˜ ì •ë¦¬ëœ ìˆ˜ì—…ì´ì—ˆìŠµë‹ˆë‹¤. - [ê¹€í¬ì„±] * í¬ì„±ì•„...솔ì§í•´ì ¸ë„ ë˜... - [ì •ì˜ì •] * ì°¸ê³ ì‚¬ì´íЏ ì ‘ì† 2ì‹œê°„ë§Œì— ê³¼ì œ 완료를 í• ì •ë„로 ì¢‹ì€ ì„¤ëª…ì´ì—ˆìŠµë‹ˆë‹¤.(ìŒ?) - [ê¹€í¬ì„±] * 소켓 프로그래ë°ì— 대해서 ë°°ì› ìŠµë‹ˆë‹¤. 수업 ë‚´ìš©ì„ ìž˜ ë”°ë¼ê°€ì§€ ëª»í• ê²ƒì´ ë‘ë ¤ì›Œ ê±±ì •ì„ ë§Žì´ í–ˆëŠ”ë° ì„ ìƒë‹˜ì´ ì„¤ëª…ì„ ìž˜ 해주셔서 수업 ë‚´ìš©ì„ ì´í•´ í• ìˆ˜ 있었습니다. ì˜›ë‚ ì— ìžê²©ì¦ 딸 때 ë³´ì•˜ë˜ ë‹¨ì–´ë“¤ì´ ë§‰ 나오니까 ì‹ ê¸°í–ˆìŠµë‹ˆë‹¤. ë‹¤ìŒ ìˆ˜ì—…ê¹Œì§€ ë³µìŠµì„ ì—´ì‹¬ížˆ 해야ë 것 같습니다. '''ì•„ ê·¸ë¦¬ê³ ì„ ìƒë‹˜ì˜ ê°•ì˜ ë…¸íŠ¸ê°€ 굉장히 íƒì´ 났습니다'''. - [ê¶Œì˜ê¸°] * ê³µê°... - [ê¹€í¬ì„±] * 오피ì—서 ìˆ™ì œë¥¼ 했습니다. VS로 í•˜ë ¤ë‹ˆê¹Œ ë”ê°€ 막 오류가 ë‚˜ëŠ”ë° ê³ ì¹˜ì§€ëŠ” ëª»í•˜ê² ê³ ê·¸ëž˜ì„œ 우분투를 깔아서 시ë„를 했네요. 용어가 ìµìˆ™í•˜ì§€ 않아서 그런지 함수 ì„¤ëª…ì„ ë´ë„ í•œë²ˆì— ì™€ë‹¿ì§€ 않아서 힘들었습니다. ì•„ ê·¸ë¦¬ê³ ìˆ™ì œë¥¼ 하다가 ìƒê¸´ ë¬¸ì œì¸ë°ìš”. 서버 í”„ë¡œê·¸ëž¨ì„ ì²˜ìŒ ì‹¤í–‰í–ˆì„ ë•ŒëŠ” 괜찮ì€ë° ë‘ ë²ˆì§¸ë¡œ ì‹¤í–‰í–ˆì„ ë•ŒëŠ” Bindì—러가 나네요. 그래서 매번 ì‹¤í–‰í• ë•Œë§ˆë‹¤ í¬íŠ¸ê°’ì„ ìˆ˜ì •í•´ì•¼í–ˆìŠµë‹ˆë‹¤. 왜 ì´ëŸ° ë¬¸ì œê°€ ìƒê¸´ê±¸ê¹Œìš”? - [ê¶Œì˜ê¸°] * [ê¶Œì˜ê¸°] í•™ìƒì´ 맞닥트린 bind 오류는, 해당 í¬íŠ¸ì— ë‚´ê°€ 가서 ëˆŒëŸ¬ì•‰ìœ¼ë ¤ê³ (bindí•˜ë ¤ê³ ) ê°€ 보니까 다른 ë†ˆì´ ì´ë¯¸ ì°¨ì§€í•˜ê³ ìžˆì–´ì„œ bind하지 못했다는 오류입니다. 프로그램ì—서 bind한 후 다 ì“°ê³ ë‚˜ì„œ bind를 í•´ì œí•˜ì§€ 않으면 ì´ëŸ° ì¼ì´ ë°œìƒí•©ë‹ˆë‹¤. bind í•´ì œ 코드를 ê¼ ë„£ë„ë¡ í•˜ì„¸ìš”. - [황현] * ìž ê¹ ì‚¬ì´ì— ë‹µê¸€ì´ ì˜¬ë¼ì˜¤ë‹¤ë‹ˆ! ê°ì‚¬í•©ë‹ˆë‹¤. :) - [ê¶Œì˜ê¸°] * ìžì„¸í•œ í•´ê²° 방법입니다. ì†Œì¼“ì„ ìƒì„±í•˜ê³ 나서 바로 setsockopt(mySocket, SOL_SOCKET, SO_REUSEADDR, &anyIntegerVariableThatContainsNonZero, sizeof(anyIntegerVariableThatContainsNonZero)); 함수를 호출하면 ì´ ì†Œì¼“ì˜ ìƒëª…ì´ ë‹¤í•˜ëŠ” 순간 해당 í¬íŠ¸ì— ìžë¦¬ê°€ 나게 ë©ë‹ˆë‹¤. - [황현] ---- == 3회차(2012ë…„ 3ì›” 23ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] || O || ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] || O || || [ê¹€í¬ì„±] || O || === 수업내용 === * 지난 ì‹œê°„ì— ìˆ˜ì—…í•œ ë‚´ìš©ì— ëŒ€í•´ ì´ì•¼ê¸° 했습니다. 1) í¬íŠ¸ì˜ ì¤‘ë³µì„ ì–´ë–»ê²Œ 해결하나요? - ì„œë²„ì†Œì¼“ì˜ ê²½ìš° ì°½êµ¬ì˜ ì—í• ì„ í•˜ê¸°ë•Œë¬¸ì— í´ë¼ì´ì–¸íЏì—서 서버로 ìš”ì²ì´ 올 경우 별ë„ì˜ í¬íŠ¸ë¥¼ ì—´ì–´ í†µì‹ ì„œë¹„ìŠ¤ë¥¼ ì œê³µí•©ë‹ˆë‹¤. - 위와 ê°™ì´í•˜ë©´ í•˜ë‚˜ì˜ ì„œë²„ì— ë‹¤ìˆ˜ì˜ í´ë¼ì´ì–¸íŠ¸ê°€ 연결하는 ìƒí™©ì— 충분히 ëŒ€ì²˜í• ìˆ˜ 있습니다. 2) í•˜ë‚˜ì˜ í´ë¼ì´ì–¸íŠ¸ê°€ ë‹¤ìˆ˜ì˜ ì„œë²„ì— ì—°ê²°ì„ ìš”ì²í•˜ëŠ” 경우ì—는 어떻게 ë 까요? - ìˆ™ì œìž…ë‹ˆë‹¤. 실험해보세요 :D 3) 서버와 í´ë¼ì´ì–¸íŠ¸ë¥¼ 따로ë‘니 너무 불편합니다. 어떻게 ë°©ë²•ì´ ì—†ì„까요? - thread를 ì´ìš©í•˜ì—¬ 서버와 í´ë¼ì´ì–¸íŠ¸ë¥¼ 한 어플리케ì´ì…˜ 안ì—서 사용하는 concurrent 프로그래ë°ì„ 다ìŒì‹œê°„부터 í•˜ê² ìŠµë‹ˆë‹¤. 4) 서버나 í´ë¼ì´ì–¸íЏ 양쪽 다 ì—°ê²°ë˜ìžˆê¸°ì—는 ì œì•½ì‚¬í•ì´ ë„ˆë¬´ í½ë‹ˆë‹¤. - ì–‘ë°©í–¥ í†µì‹ ì¤‘ í•œìª½ì´ off-lineìƒíƒœì¸ 경우ì—ë„ ë©”ì‹œì§€ì˜ ì „ì†¡ê³¼ ìˆ˜ë ¹ì´ ê°€ëŠ¥í•˜ë„ë¡ ì„œë²„ë¥¼ ë‘ì–´ push형ì‹ìœ¼ë¡œ 메시지를 ì£¼ê³ ë°›ìŠµë‹ˆë‹¤. ì´ë¥¼ C2DMì´ë¼ê³ 합니다. * Threadì— ëŒ€í•´ì„œ 알아보았습니다. - threadê°€ ì–´ë–¤ 것ì¸ì§€ 왜사용하는지 어떻게 사용하는지 간단히 소개하였습니다. 다ìŒì‹œê°„ì— ì–´ë–»ê²Œ í”„ë¡œê·¸ëž˜ë° í• ê²ƒì¸ì§€ ê°™ì´ ì•Œì•„ë³´ê² ìŠµë‹ˆë‹¤. === ìˆ™ì œ === * ë‹¤ìˆ˜ì˜ í´ë¼ì´ì–¸íŠ¸ê°€ í•˜ë‚˜ì˜ ì„œë²„ì— ì—°ê²° ìš”ì²í•˜ëŠ” ì‹œë®¬ë ˆì´ì…˜ - terminalì„ ì—¬ëŸ¬ê°œ 실행시켜 ì‹¤í—˜ì„ ì§„í–‰í•´ 보세요. * í•˜ë‚˜ì˜ í´ë¼ì´ì–¸íŠ¸ê°€ ë‹¤ìˆ˜ì˜ ì„œë²„ì— ì—°ê²° ìš”ì²í•˜ëŠ” ê²½ìš°ë„ í•´ë´…ì‹œë‹¤. * 지난 ìˆ™ì œì—서는 í´ë¼ì´ì–¸íŠ¸ê°€ 한번만 메시지를 ì „ì†¡í•˜ê³ ë°›ì•˜ëŠ”ë°, ì§€ì†ì 으로 ì „ì†¡í•˜ë„ë¡ êµ¬í˜„í•´ë´…ì‹œë‹¤. - í´ë¼ì´ì–¸íŠ¸ì— while문만 추가하면 ê°„ë‹¨í• ê²ƒ 같습니다. === ê¶Œìž¥ì‚¬í• === === 후기 === * 컴파ì¼ì´ 안ë˜ì„œ ì¸í„°ë„·ìœ¼ë¡œ 확ì¸í•´ë³´ë‹ˆ 다중 ìŠ¤ë ˆë“œë¥¼ ì“°ë ¤ë©´ gccì— ì˜µì…˜ -lpthread를 주어야하는군요. - [ê¹€í¬ì„±] * ë°ì´í„° ì²˜ë¦¬ì— ëŒ€í•˜ì—¬ 좀 ë” ê²€ìƒ‰í•˜ì˜€ëŠ”ë° ê¸°ë³¸ì 으로 sendëœ ì •ë³´ëŠ” 버í¼ì— ê³„ì† ìŒ“ì´ë©°, recvê°€ í처럼 버í¼ë¥¼ 지우면서 ì½ëŠ”ë‹¤ê³ ë˜ì–´ìžˆì—ˆìŠµë‹ˆë‹¤. 반면 read와 ê°™ì€ íŒŒì¼í¬ì¸í„° 함수로 ì½ìœ¼ë©´ 버í¼ë¥¼ ì§€ìš°ì§€ì•Šê³ íŒŒì¼í¬ì¸í„°ë§Œ ì´ë™í•˜ëŠ” 것 ê°™ë”êµ°ìš”. recvë„ ì˜µì…˜ì„ ë³€ê²½í•˜ë©´ 버í¼ì— ê³„ì† ëˆ„ì 해서 ë³´ê´€í• ìˆ˜ 있는거 같습니다. * ì°¸ê³ ì‚¬ì´íЏ : * http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/recv * http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/read -[ê¹€í¬ì„±] * 소캣 옵션 ì°¸ê³ ì‚¬ì´íЏ (close시 bind í•´ì œ ì„¤ì •) * http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/AdvancedComm/SocketOption -[ê¹€í¬ì„±] * ì˜ˆì œê°€ ì´ë¯¸ì§€ì¸ 줄 ì•Œì•˜ëŠ”ë° ë°•ìŠ¤ì˜€êµ°ìš”. - [ê¹€í¬ì„±] * ìŠ¤ë ˆë“œ 실행 시ì ì´ ê·¸ë•Œê·¸ë•Œ 달ë¼ì„œ ê°’ì´ ë³€í•˜ëŠ” ë³€ìˆ˜ì˜ í¬ì¸í„°ë¥¼ ì¸ìžë¡œ 주면 안ë˜ëŠ”êµ°ìš”. 그것 ë•Œë¬¸ì— ê³ ìƒí–ˆìŠµë‹ˆë‹¤. - [ê¹€í¬ì„±] * ìˆ™ì œ 완료 - [ê¹€í¬ì„±] * ìˆ™ì œê°€ ì •í™•ížˆ ë였지? 좀 ì˜¬ë ¤ì¤˜ - [ê¶Œì˜ê¸°] * ë‹¤ì¤‘ì ‘ì† ê°€ëŠ¥í•œ í´ë¼ì´ì–¸íŠ¸ëž‘ 서버 (ìŠ¤ë ˆë“œë¥¼ ì´ìš©í•œ ì¼ ëŒ€ 다수 ì—°ê²° 구현)- [ê¹€í¬ì„±] * 하지만 버츄얼 박스가 너무 ëŠë ¤ì„œ ì‹œê°„ê´€ê³„ìƒ ë‹¤ì¤‘ì ‘ì†ì€ 서버만 구현했다는...<- í½ - [ê¹€í¬ì„±] * ì•„ 우리 ìˆ™ì œê°€ ì´ëŸ°ê±°ì˜€ë‚˜. ê¸ˆìš”ì¼ ê¸°ì–µì´ ì–´ì§¸ì„ ì§€ 머리 ì†ì— 없다. 아무튼 ì¼ë‹¨ì€ ì„ ëŒ€ ìˆ™ì œë¶€í„° í•˜ê³ ë‚˜ì„œ.. - [ê¶Œì˜ê¸°] * ë™ì‹œ 채팅 완성 20명까지 ëœë‹¤êµ¬!. ê·¸ë¦¬ê³ ê³¼ì œëŠ” í† ìš”ì¼ ì €ë… ìƒíƒœ 그대로... 으으아아악 ìš´ì§€! - [ê¹€í¬ì„±] * 주ë§ê°„ ë°”ë¹ ì„œ ìœ„í‚¤ì ‘ì†ì„ 못하는 ë™ì•ˆ ì—„ì²ë‚œ ì¼ì´ 벌어졌군.. ì ˆëŒ€ ì €ëŸ° ìˆ™ì œë¥¼ 내준 ê¸°ì–µì€ ì—†ëŠ”ë°.... - [ì •ì˜ì •] * ì±„íŒ…ì€ ê·¸ëƒ¥ í•´ë³¸ê±°ê¸´í•œë° ì—¬ëŸ¬ê°œì˜ í´ë¼ì´ì–¸íŠ¸ì™€ ë™ì‹œ ì ‘ì†í•˜ëŠ” 서버랑, ì—¬ëŸ¬ê°œì˜ ì„œë²„ì— ì ‘ì†í•˜ëŠ” í´ë¼ì´ì–¸íŠ¸ëŠ” ìˆ™ì œ 아니였나요? - [ê¹€í¬ì„±] p.s. 한êµì‚¬ ë ˆí¬íŠ¸ëž‘ ì„ ëŒ€ ìˆ™ì œë§Œ ì•„ë‹ˆì—ˆì–´ë„ ìŒì„± ì¸ì‹ì— 쓸 학습형 문장 ì¸ì‹ 코딩 í•˜ê³ ìžˆì—ˆì„ì§€ë„... * 그래 ê·¼ë° ìŠ¤ë ˆë“œë¥¼ ì´ìš©í•˜ëŠ” ê±´ 다ìŒì‹œê°„ì— í•˜ê¸°ë¡œ í–ˆì—ˆë‹¤ê³ ã…‹ã…‹ã…‹ã…‹ 그래서 나 멘붕하는 줄 ì•Œì•˜ìŒ ã…‹ã…‹ã…‹ - [ê¶Œì˜ê¸°] * 그럼 나 한시간치 ê³¼ì œ ì‰¬ì–´ë„ ë˜ëŠ”ê±´ê°€... ì•ˆê·¸ëž˜ë„ ì„ ëŒ€ê³¼ì œ 쌓ì¸ë°ë‹¤ê°€ 시험 í¬ë¦¬ - [ê¹€í¬ì„±] * 가만보니 ì˜ˆì œê°€ 사ë¼ì¡Œë‹¤. - [ê¹€í¬ì„±] * í• ì¤„ 아는 ê±°ë¼ê³ ìƒê°í–ˆëŠ”ë° ë§‰ìƒ í•˜ë ¤ë‹ˆê¹Œ ë˜ì§ˆ 않네요. 좀 ë” ì—´ì‹¬ížˆ 해야ë 것 같네요. - [ê¶Œì˜ê¸°] == 4회차(2012ë…„ 3ì›” 27ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] || ì§€ê° || ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] || O || || [ê¹€í¬ì„±] || O || === 수업내용 === * ìˆ™ì œì— ëŒ€í•´ ì´ì•¼ê¸° 했습니다. 1) ê¶Œì˜ê¸° í•™ìƒì´ í´ë¼ì´ì–¸íЏ 쪽ì—서 메시지가 한번만 보내지는 현ìƒë•Œë¬¸ì— 멘붕 -> 서버측ì—서 메시지를 한번만 ë°›ê³ closeí•´ë²„ë ¤ì„œ ìƒê¸´ 결과였습니다. 2) í•˜ë‚˜ì˜ í´ë¼ì´ì–¸íŠ¸ê°€ ë‹¤ìˆ˜ì˜ ì„œë²„ì— ì—°ê²°ì„ ìš”ì²í•˜ëŠ” 경우 -> ì§ì ‘ 해보는게 ìˆ™ì œì˜€ëŠ”ë° ë‹¤ë“¤ 당연히 ë 것으로 예ìƒí•˜ê³ í•´ë³´ì§€ 않았네요. :( 3) ìœ„í‚¤ì˜ ëŠ¦ì€ ì—…ë°ì´íŠ¸ë¡œ ì¸í•œ ìˆ™ì œ 착오 -> 주ë§ê°„ 강사가 너무 ë°”ë¹ ì„œ 위키 ì—…ë°ì´íŠ¸ë¥¼ 못하는ë™ì•ˆ 참사가 ë°œìƒ ìž ê¹ ì†Œê°œí–ˆë˜ thread프로그래ë°ì„ ê¹€í¬ì„± í•™ìƒì´ thread로 ì†Œì¼“ì„ ì§œëŠ” 것ì¸ì¤„ ì•Œê³ ì±„íŒ… 프로그래ë°ì„ 완성시켰네요. 강사 멘붕 * concurrent 프로그래ë°ì— 대해 ë°°ì› ìŠµë‹ˆë‹¤. 1) thread í”„ë¡œê·¸ëž˜ë° - threadì˜ ë™ìž‘ ì›ë¦¬ì™€ thread를 어떻게 ìƒì„±í•˜ëŠ”ì§€, 종료를 어떻게 ì‹œí‚¤ëŠ”ì§€ì— ëŒ€í•´ ë°°ì› ìŠµë‹ˆë‹¤. - ìžì„¸í•œ ë‚´ìš©ì€ ë§í¬ë¥¼ 참조. http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Beginning/WhatThread === ìˆ™ì œ === * socketê³¼ thread를 ì´ìš©í•˜ì—¬ 메시지를 ì£¼ê³ ë°›ì„ ìˆ˜ 있는 채팅 í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í•˜ì‹œì˜¤. === ê¶Œìž¥ì‚¬í• === === 후기 === * ì´ë²ˆì—ë„ ìœ„í‚¤ ì—…ë°ì´íŠ¸ê°€ 좀 늦었습니다. 새싹 ì‹œê°„ë„ ê¹œë¹¡í•´ì„œ ì§€ê°í•˜ê³ .. ì ì ë°”ë¹ ì§€ëŠ” 것 같네요. ì‹œê°„ì„ ì¢€ ë” ì•„ê»´ì¨ì•¼ê² 다는 ìƒê°ì´ 들었습니다. ê·¸ë¦¬ê³ ì •í•´ì§„ 커리í˜ëŸ¼ëŒ€ë¡œ 하는 ìˆ˜ì—…ì´ ì•„ë‹ˆë¼ì„œ 그냥 ì†ì— 잡히는대로 필요한 ì§€ì‹ì„ ì „ìˆ˜í•˜ê¸°ë¡œ 했습니다. ë¬¼ë¡ ì½”ë”©ì€ ì§€ì†ì 으로 í• ìˆ˜ 있게 ìˆ™ì œê°€ 나갈 ì˜ˆì •ìž…ë‹ˆë‹¤. - [ì •ì˜ì •] == 5회차(2012ë…„ 3ì›” 30ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] || O || ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] || O || || [ê¹€í¬ì„±] || O || === 수업내용 === === ìˆ™ì œ === === ê¶Œìž¥ì‚¬í• === === 후기 === * [ê¹€í¬ì„±/ë¦¬ëˆ…ìŠ¤ê³„ì •ë©€í‹°ì±„íŒ…] 완료. ì±„ë„ ì¶”ê°€ëŠ” 다ìŒì—... - [ê¹€í¬ì„±] * ìˆ™ì œ 않는다 올ë¼ì˜¤ì§€. 나는 찾는다 ì»¤ë„ ìžë£Œ. [ì´ì˜í˜¸] 만세 - [ê¹€í¬ì„±]ì´ ë©˜ë¶•í•˜ë©°... == 6회차(2012ë…„ 4ì›” 3ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] || O || ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] || O || || [ê¹€í¬ì„±] || O || === 수업내용 === * NTFSì— ëŒ€í•˜ì—¬ 간략하게 설명하였습니다. * ì½” 드 ë¶„ ì„ {{{ // í—¤ë” : ntfs.h #pragma once #define _WIN32_WINNT 0x0500 #include <windows.h> #include <winioctl.h> #include <stdio.h> typedef BOOLEAN TF; typedef UCHAR U8; typedef USHORT U16; typedef ULONG U32; typedef ULONGLONG U64; typedef struct { U32 Type; U16 UsaOffset; U16 UsaCount; U64 Usn; } NTFS_RECORD_HEADER, *PNTFS_RECORD_HEADER; typedef struct { NTFS_RECORD_HEADER Ntfs; U16 SequenceNumber; U16 LinkCount; U16 AttributeOffset; U16 Flags; // inUse 0x0001 Directory 0x0002 U32 BytesInUse; U32 BytesAllocated; U64 BaseFileRecord; U16 NextAttributeNumber; } FILE_RECORD_HEADR, *PFILE_RECORD_HEADER; // Standard Attribute typedef enum { AttributeStandardInformation = 0x10, AttributeAttributeList = 0x20, AttributeFileName = 0x30, AttributeObjectId = 0x40, AttributeSecurityDesciptor = 0x50, AttributeVolumeName = 0x60, AttributeVolumeInformation = 0x70, AttributeData = 0x80, AttributeIndexRoot = 0x90, AttributeIndexAllocation = 0xA0, AttributeBitmap = 0xB0, AttributeReparsePoint = 0xC0, AttributeEAInformation = 0xD0, AttributeEA = 0xE0, AttributePropertySet = 0xF0, AttributeLoggedUtilityStream = 0x100 } ATTRIBUTE_TYPE, *PATTRIBUTE_TYPE; typedef struct { ATTRIBUTE_TYPE AttributeType; U32 Length; TF Nonresident; U8 NameLength; U16 NameOffset; U16 Flags; U16 AttributeNumber; } ATTRIBUTE, *PATTRIBUTE; typedef struct { ATTRIBUTE Attribute; U32 ValueLength; U16 ValueOffset; U16 Flags; } RESIDENT_ATTRIBUTE,*PRESIDENT_ATTRIBUTE; #pragma pack(push, 1) typedef struct { U8 Jump[3]; U8 Format[8]; U16 BytesPerSector; //섹터당 ë°”ì´íЏ 수 U8 SectorsPerCluster; //섹터당 í´ëŸ¬ìŠ¤í„°ìˆ˜ U16 BootSectors; U8 Mbz1; U16 Mbz2; U16 Reserved1; U8 MediaType; U16 Mbz3; U16 SectorsPerTrack; U16 NumberOfHeads; U32 PartitionOffset; U32 Reserved2[2]; U64 TotalSectors; //디스í¬ì˜ ì´ ì„¹í„°ìˆ˜. U64 MftStartLcn; //MFTê°€ 시작ë˜ëŠ” 주소. U64 Mft2StartLcn; // MFT Mirror ë¶€ë¶„ì´ ì‹œìž‘ë˜ëŠ” 주소 U32 ClustersPerFileRecord; // íŒŒì¼ ë ˆì½”ë“œë‹¹ í´ëŸ¬ìŠ¤í„°ìˆ˜ U32 ClustersPerIndexBlock; // ì¸ë±ìФ 블ëŸë‹¹ í´ëŸ¬ìŠ¤í„°ìˆ˜ U64 VolumeSerialNumber; U8 Code[0x1AE]; U16 BootSignature; } BOOT_BLOCK, *PBOOT_BLOCK; #pragma pack(pop) }}} - main.cpp {{{ #include "ntfs.h" U32 BytesPerFileRecord; BOOT_BLOCK boot_block; HANDLE hVolume; U32 cnt; CHAR drive[] = "\\\\.\\C:"; PFILE_RECORD_HEADER MFT; void ReadSector(U64 sector, U32 count, void* buffer); void LoadMFT(); void main() { hVolume = CreateFile(drive, GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE, 0,OPEN_EXISTING, 0, 0); ReadFile(hVolume, &boot_block, sizeof(boot_block), &cnt, 0); printf("======My FILE SYSTEM INFO==========\n"); printf("File System : %s \n",boot_block.Format); printf("Total Sectors : %u \n",boot_block.TotalSectors); printf("Sector per Bytes : %u \n",boot_block.BytesPerSector); printf("Cluster per Sectors : %u\n",boot_block.SectorsPerCluster); printf("Clusters Per FileRecord : %u\n",boot_block.ClustersPerFileRecord); printf("Clusters Per IndexBlock : %u\n",boot_block.ClustersPerIndexBlock); } void LoadMFT() { BytesPerFileRecord = boot_block.ClustersPerFileRecord < 0x80? boot_block.ClustersPerFileRecord* boot_block.SectorsPerCluster* boot_block.BytesPerSector : 1 << (0x100 - boot_block.ClustersPerFileRecord); MFT = PFILE_RECORD_HEADER(new U8[BytesPerFileRecord]); ReadSector(boot_block.MftStartLcn * boot_block.SectorsPerCluster, BytesPerFileRecord / boot_block.BytesPerSector, MFT); printf("buffer : %s\n", MFT+0x27); } void ReadSector(U64 sector, U32 count, void* buffer) { ULARGE_INTEGER offset; OVERLAPPED overlap = {0}; U32 n; offset.QuadPart = sector * boot_block.BytesPerSector; overlap.Offset = offset.LowPart; overlap.OffsetHigh = offset.HighPart; ReadFile(hVolume, buffer, count * boot_block.BytesPerSector, &n, &overlap); } }}} === ìˆ™ì œ === * http://forensic-proof.com/ ì—서 mftì— ëŒ€í•´ ì½ì–´ë³´ì‹œì˜¤. === ê¶Œìž¥ì‚¬í• === * 채팅 코드를 보기 좋게 ìˆ˜ì •í•´ë´…ì‹œë‹¤. 힌트 - cpp ë¶„í• , 함수화 === 후기 === * 강사께서 ê³¼ì œë¡œ 멘붕한 것으로 추측ë˜ì–´ ëŒ€ì‹ íŽ˜ì´ì§€ë¥¼ 작성하였습니다. - [ê¹€í¬ì„±] * ì €ë„ ê³¼ì œ 누ì 으로 ë©˜ë¶•í• ë“¯ 합니다. 뒤는 너ì—게 맡긴다 ì˜ê¸°ì•¼. - [ê¹€í¬ì„±] == 7회차(2012ë…„ 4ì›” 6ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] || O || ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] || O || || [ê¹€í¬ì„±] || X || === 수업내용 === * NTFS ë¶„ì„하는 방법 * 소스코드 ë¶„ì„ === ìˆ™ì œ === * 소스코드 ë˜ëŠ” 기존 ë¶„ì„기를 ì´ìš©í•˜ì—¬ MFT ë¶„ì„하기 === ê¶Œìž¥ì‚¬í• === * 아래 ë§í¬ë¥¼ 참조하여 ë ˆì§€ìŠ¤íŠ¸ë¦¬ ë¶„ì„하는 방법 공부해보기 - http://www.codeproject.com/Articles/24415/How-to-read-dump-compare-registry-hives - http://technet.microsoft.com/en-us/library/cc750583.aspx#XSLTsection124121120120 === 후기 === * 새싹êµì‹¤ì´ URP프로ì 트 팀으로 넘어가게 ë˜ì—ˆìŠµë‹ˆë‹¤. [ê¹€í¬ì„±] ë‚´ê°€ ì–´ì œ 창설하ë¼ê³ í• ë•ŒëŠ” ì•ˆí•˜ê³ ì˜¤ëŠ˜ì€ ìƒˆì‹¹ì„ ì§¸ê³ ì°½ì„¤ì„ í•˜ëŠ”êµ¬ë‚˜ :D - [ì •ì˜ì •] * ê·¸ë¦¬ê³ ë°°ë•Œì§€ì— Fë¹µì„ ë§žì•˜ì£ .ã… ã…œ - [ê¹€í¬ì„±] * NTFSì— ëŒ€í•´ì„œ ë°°ì› ìŠµë‹ˆë‹¤. ìƒì†Œí•œ ìš©ì–´ë“¤ì´ ì¢€ 있어서 ê±±ì •ìž…ë‹ˆë‹¤. ê·¸ëž˜ë„ ìƒˆë¡œìš´ ê²ƒì„ ë°°ìš°ëŠ” ê²ƒì€ ì •ë§ ì¦ê±°ìš´ ì¼ì´ë„¤ìš”. 요즘 ê°‘ìžê¸° ê³¼ì œê°€ 늘어서 채팅 í”„ë¡œê·¸ëž¨ì— ì†ì„ 대지 못했습니다. ì‹œê°„ì„ í˜„ëª…í•˜ê²Œ ì¨ì•¼í• 것 같습니다. - [ê¶Œì˜ê¸°] == 8회차(2012ë…„ 4ì›” 10ì¼) == === ì¶œì„ === || ì„ ìƒë‹˜ || [ì •ì˜ì •] || O || ||<|2> í•™ìƒ || [ê¶Œì˜ê¸°] || O || || [ê¹€í¬ì„±] || O || === 수업내용 === === ìˆ™ì œ === === ê¶Œìž¥ì‚¬í• === === 후기 === * CreateFile함수를 ì²˜ìŒ ì‚¬ìš©í•˜ì—¬ë³´ì•˜ìŠµë‹ˆë‹¤. - [ê¹€í¬ì„±] ì°¸ê³ ì‚¬ì´íЏ http://www.winapi.co.kr/reference/Function/CreateFile.htm http://www.winapi.co.kr/reference/Function/ReadFile.htm * [ì •ì˜ì •]ì„ ë°°ê»˜ì„œ fopen으로 여는 것과 다를바가 ì—†ë‹¤ê³ í•˜ì…”ì„œ fopen으로 ì—´ê³ , fread로 ì½ì–´ë³´ì•˜ëŠ”ë° ê²°ê³¼ê°€ 같았습니다. - [ê¹€í¬ì„±] * fopenì˜ ê²½ìš° Standard함수ì¸ë° ê°™ì€ inputì¼ ë•Œ, 리눅스ì—서 다르게 ìž‘ë™í• ì§€ ê¶ê¸ˆí•©ë‹ˆë‹¤. - [ê¹€í¬ì„±] * ìžë£Œí˜•별 16진법 ìžë¦¿ìˆ˜ê°€ 헤깔리는군요. ;ã……; - [ê¹€í¬ì„±] * ê°’ì„ í™•ì¸í•˜ëŠ”ë° ì´ìƒí•œ ê°’ì´ ë‚˜ì™€ 검색해보니 MFTì—ì„œë„ Little Endian형ì‹ì„ 쓰는 êµ°ìš”. - [ê¹€í¬ì„±] * ReadFileì˜ overlapì¸ìž ì‚¬ìš©ë²•ì´ ë‚˜ì™€ìžˆëŠ” ê³³ì„ ì°¾ê¸° 힘ë“니다 ;ã……; ReadFileì€ íŒŒì¼í¬ì¸í„°ë¥¼ ì½ì€ ë§Œí¼ ì˜®ê¸°ë˜ë° ReadSectorì—서는 옮긴 ì§€ì 부터 섹터 단위로 세어서 ì½ëŠ” 건가요? 아니면 처ìŒë¶€í„° 다시 세어 ì½ëŠ”ê±´ê°€ìš”? - [ê¹€í¬ì„±] * 함수를 반복해서 실행해 ë³´ì•˜ëŠ”ë° ì½ëŠ” 위치가 ê°™ì€ ê±¸ ë³´ì•„, íŒŒì¼ ì²˜ìŒ ë¶€ë¶„ë¶€í„° 단위를 세는 것ì´êµ°ìš”. - [ê¹€í¬ì„±] * íŒŒì¼ ì†ì„±ë“¤ì„ ì½ëŠ”ë° ì„±ê³µí•˜ì˜€ìŠµë‹ˆë‹¤. * 기타 ì°¸ê³ ì‚¬ì´íЏ http://maj3sty.tistory.com/898 ---- [새싹êµì‹¤/2012]