PROTOCOL
전체소스 보기
소스분석하기
네트워크 디바이스 열기
man pcap의 내용
pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf) |
pcap_t *stpNIC pcap_open_live(cpNIC_name,1500,1,0,errbuf); |
인자값 설명
1)char * device : cpNIC_name
– device 인자에 디바이스 이름(예, eth0, hme())을 지정
2)int snaplen : 1500세팅
- snaplen은 캡쳐할 크기
TCP 헤더를 캡쳐할 경우 : 이더넷 헤더 +IP헤더+TCP헤더
3)int promisc : 1세팅
– promisc
0 : 목적지가 자신인 패킷, 브로드캐스트 패킷, 멀티캐스트 패킷을 캡쳐
1 : promiscous 1 : promiscous 모드로 설정되어 전송되는 모든 패킷((모든 이더넷 프레임))
을 캡쳐
4)int to_ms : 0세팅
– to_ms는 ms 단위의 시간인데 네트워크 디바이스에 패킷이 도착했을
때 커널이 이를 즉시 읽지 않고 잠시 기다리는 타임아웃 시간을 지정
커널이 한번의 읽기로 많은 패킷을 가져오게 한다
0이면 충분한 패킷이 도착할 때까지 대기한다.
5)char *ebuf : errbuf
– ebb fuf는는 에러발생시 에러 원인을 저장
– 성공하면 디바이스 디스크립터를 리턴하고, 실패하면 NULL을 리턴
네트워크 디바이스 닫기
pcap_close(stpNIC) |
열었던 장치 eth0을 닫습니다
네트워크 정보 읽어오기
ucpData = pcap_next(stpNIC, &stInfo); |
pcap_next() 함수는 자동으로 콜백 함수를 호출하지않고 캡쳐한 패킷 자체를 u_char 타입의 포인터로 리턴한다
이제 컴파일을 하겠습니다
gcc –o test test.c MSDFunction.o –lpcap
참고>>
-lpcap의 의미는
-l : 라이브러리를 추가시켜라 그건 pcap이야~~라는 의미입니다
BUT warning이 발생하였습니다!!!
헤더파일에 type이 일치하지 않는 것을 확인하기 위해
vi /usr/include/pcap/pcap.h를 해서 해더파일을 열었습니다
const가 있는 것을 확인 할 수 있습니다
다시 수정하고 실행하니 정상적으로 출력하였습니다
SUCCESS!!
자 이제 수업시간에 좀 해매었던 부분입니다
루트계정에서의 컨트롤
cd /home/ 계정확인
uec를 확인 하였습니다 이제 uec로 복사를 합니다
LINUX 명령어 복습 cp 대상파일 대상디렉토리 cp test / (test를 루트에 복사하라) |
복사를 하고 루트로 이동후
su – uec합니다 그럼 $표시가 보이는 것을 확인 할 수 있습니다
sudo와 su의 차이
sudo를 사용하면 패스워드 노출을 막을수 있습니다. sudo root 권한을 필요로 하는 프로그램을 실행하였을 때, sudo 는 여러분의 일반 사용자 패스워드를 입력할 수 있도록 물어볼 것입니다. 이 것은 악의적인 프로그램이 시스템을 손상시킬 수 없도록 확인하고, 여러분이 주의가 필요한 관리적인 동작을수행하는 것에 대하여 상기하도록 도와 줍니다. 명령어 줄을 사용할 때 sudo 를 사용하려면, 실행할 명령어 앞에 "sudo" 라고 간단히 입력하십시오. sudo 는 여러분의 패스워드를 묻게 될 것입니다. |
많은 사람들이 su가 ‘super user'를 의미하는 말로 생각하지만, 사실 ’substitute user'를 의미합니다
계정을 전환한다는 의미에 가깝습니다 uec계정으로 전환하면서 $로 전환된것을 확인 할 수 있습니다
ls –al
-rwx------일 경우 chmod 777 test로 속성값을 변경하여 줍니다
chmod 그것이 알고싶다!!!! 사용방법 chmod [옵션] 파일이름 |
실행결과
장비를 함부러 열수 없다 아뉘 에러~~!!!!우웩~~
$을 해제하고 싶을때는 ?
su – root
-lpcap없이 컴파일
의미 설명
gcc컴파일러가 컴파일시 tmp에 ccduVPov.o파일을 생성하면 컴파일을 하는데
해당.o파일에 pcap라이브러리가 정의되어 있지 않아서 나타나는 에러입니다
pcap자체가 기본적인 내장 라이브러리가 아닌 추가 라이브러리이기 때문에 lpcap로 알려주어야 합니다
ccduVPov.o임임의 파일이 이름이 각자 다른이름을 가지는 것은 멀티유저가 동시 컴파일시
구분을 할 수 없기 때문에 tmp에 임의적으로 파일을 생성하는 것입니다
password capture
ftp접속 => id : test / pass : ********()아직모름 => ./test 실행후 pass입력
결과확인
pass가 1234578로 확인 되었습니다
연속으로 실행해 보았습니다
수만이가 잡혔습니다 ㅡ..ㅡ+ 오호 우리모두 피시방으로~~~ㅋㅋ 헤킹 ㄱㄱ
위의 헥사뷰를 살펴 보겠습니다 제일윗줄을 보시면
HWaddr = machine address = mac address입니다
분석을 하면 아래 그림과 같습니다
위의 그림의 오늘 수업의 내용의 대부분을 설명 해주고 있습니다 데이터에 헤더정보를 얻어서 목적지로 보내는 일련의 과정을 확인하시면 됩니다
보너스 layer 7계층 위의 그림을 조금 더 이해하기 쉽게 인터넷에서 그림을 가져왔습니다
API 대화상자
응용프로그램과 사용자간의 대화 수단에는 여러가지 있습니다 버튼 에디트등 앞에서 다루어 보았습니다
하지만 이러한 간단한 컨트롤은 사용자로부터 복잡한 정보를 입력받기
어려운데 많은 양의 정보를 효율적으로 입력받기 위해 주로 대화상자를 사용합니다
대화상자는 프로그램과 사용자간의 대화 곧 명령 및 정보 전달을 위한 특별한 윈도우 입니다
대화상자에는 버튼 에디트등의 컨트롤이 배치되는데 그래서 대화상자를 컨트롤의 컨테이너라고도 합니다
사용자는 대화상자를 호출한 후 컨트롤을 통해 자신의 의사를 표시하고
명령을 내리며 대화상자에 배치된 컨트롤을 통해 현대 상태를 보여줍니다
모달형 : 대화상자를 닫기전에 다른 윈도우로 전환 할 수 없다 ok/취소를 눌러야 한다
모델리스형 : 대화상자를 닫기전에 다른 윈도우로 전환 할 수 있습니다 위의 그림은 ctrl F를
눌려 나오는 찾기 대화상자인데 대화상자가 있는 상태에서도 문서작성이 가능하므로 모델리스 형입니다
ABOUT
대화상자 템플릿 : 대화상자의 모양과 대화상자 내의 컨트롤 배치 상태가 저장되는 이진 정보이며 리소스로 작성 됩니다
대화상자 프로시저 : 윈도우 프로시저가 윈도우에서 발생하는 메시지를 처리하는 것과
마찬가지로 대화상자 프로시저는 대화상자에서 발생하는 메시지를 처리한다
그럼 대화상자를 만들어봅시다
NEW에서 about.rc를 추가해줍니다
Dialog를 더블클릭합니다
클릭을 하면 아래와 같이 나옵니다
오른쪽 상단에 Aa를 눌러 static을 추가합니다
static을 추가하였습니다
이제 이름(caption)을 바꿔보겠습니다 static을 더블클릭합니다
그럼 이제 소스코드를 수정하겠습니다 소스코드가 길어서 추가되는 내용들에 대하여만 하겠습니다
main.cpp |
HWND hDIgMain; BOOL CALLBACK MainDIgProc(HWND,UINT,WPARAM,LPARAM); LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; //프로그램의 인스턴스 핸들 LPCTSTR lpszClass = TEXT("myAbout"); |
typedef struct DMESSAGEMAP{ UINT iMessage; BOOL (*lpfnMsgProc)(HWND,WPARAM,LPARAM); }DMESSAGEMAP; |
BOOL CALLBACK MainDIgProc(HWND hDIg,UINT iMessage,WPARAM wParam,LPARAM lParam) { int i; static DMESSAGEMAP DMessageMaps[] = { {WM_INITDIALOG,OnInitdiag}, {WM_COMMAND,OnCommand}, }; for(i=0; i<sizeof(DMessageMaps)/sizeof(DMessageMaps[0]); i++) { if(DMessageMaps[i].iMessage == iMessage) return(*DMessageMaps[i].lpfnMsgProc)(hDIg,wParam,lParam); } return FALSE; } |
MsgProc.cpp |
BOOL OnInitdiag(HWND hDIg,WPARAM wParam, LPARAM lParam) { |
BOOL OnCommand(HWND hDIg,WPARAM wParam, LPARAM lParam) { switch(LOWORD(wParam)) { case IDOK: EndDialog(hDIg,IDOK); case IDCANCEL: EndDialog(hDIg,IDCANCEL); return TRUE; } return FALSE; } |
MsgProc.h |
#include "resource.h" BOOL OnInitdiag(HWND,WPARAM, LPARAM); BOOL OnCommand(HWND,WPARAM, LPARAM); BOOL CALLBACK AboutDlgProc(HWND,UINT,WPARAM,LPARAM); |
Dialogbox : 대화상자를 호출할때 사용합니다 이 함수는 대화상자의 출력 운영 및 종료까지 대화상자에 관한 모든 처리를 책임집니다
int Dialog(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc); |
DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1),hWnd,AboutDlgProc); |
첫번째 인수는 인스턴스의 핸들이며
두번째 인수는 대화상자 템플릿의 리소스 ID입니다
세번째 인수는 대화상자를 소유할 부모윈도우 이며 네번째 인수는 대화상자 프로시저의 이름입니다
DialogBox는 함수는 hInstane의 리소스중 lpTemplate가 지정하는 템플릿을 읽어와 대화상자를 만들어 화면에 출력합니다
결과확인
마우스 왼쪽버튼을 클릭하면 대화상자가 출력합니다
대화상자 프로시저와 윈도우 프로시저의 차이점
첫번째 : 두프로시저의 리턴값이 다릅니다 윈도우 프로시저는 LRESULT지만 대화상자의 경우는 BOOL형의 값을 리턴합니다
두번째 : 대화상자는 WM_CREATE 대시 WM_INITDIALOG메시지를 받아들이며 이 메시지를 받은 시점에서
대화상자에 필요한 초기화를 하면 됩니다 위 예제에서는 특별히 초기화할 필요가 없으므로 TRUE를 하면됩니다
대화상자 프로시저에서는 WM_COMMAND를 사용하는데 컨트롤이나 매뉴항목이 선택될 경우
컨트롤들이 부모윈도우인 대화상자로 보내는 통지메세지 입니다
LOWORD HIWORD
보낸 컨트롤 ID |
통지코드 |
OK / CANCEL을 눌릴경우 EndDiag가 호출되어 대화상자가 닫히게 됩니다
대화상자 프로젝트
앞에서 구현한 소스는 모달대화상자였습니다
처음에 찾기 대화상자처럼 대화상자만으로 프로그램을 구성 할 수 있습니다
책에서는 계산기가 좋은예라고 설명하고 있습니다
실행시 대화상자만 출력되는 프로그램을 작성...소스생략
*개인적으로 보고서()가 있어서 호출만하면 보고서를 리턴했으면 좋겠다 ㅋㅋ
결과확인>>대화상자만 출력 됩니다
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
[내장형]김동화_2011년10월5일 일일보고서 (12) | 2011.10.05 |
---|---|
[내장형]최남식_2011년10월4일 일일보고서 (19) | 2011.10.04 |
[내장형]이성재_20110929 일일보고서 (17) | 2011.09.29 |
[내장형]김수만_110928 (16) | 2011.09.29 |
잠깐 내려 놓는 시간.. (7) | 2011.09.27 |
[내장형]윤병도_20110926일일보고서 (18) | 2011.09.26 |
[내장형]공정우_2011.9.23 윈 API 보고서 (정우) (15) | 2011.09.24 |
[내장형]이영진_2011년 9월 22일 일일보고서 (11) | 2011.09.22 |