목차
1.소스코드분석
2.결과 화면 및 설명
3.소감
4.참고문헌
2.결과 화면 및 설명
3.소감
4.참고문헌
본문내용
id;//식별자
unsigned short fl_offset0:4;//플래그의 오프셋
unsigned char flags:3;//플래그는 3비트임
unsigned short fl_offset1:1;
unsigned short fl_offset2:8;
unsigned char ttl;//Time to Live 즉 수명시간
unsigned char protocol;//아이피의 프로토콜
unsigned short checksum;
unsigned long src_ip;//발신지 ip
unsigned long dst_ip;//수신지 ip
};
// TCP 헤더의 구조를 가지는 구조체
struct __attribute__((packed)) tcp_header_t {
//__attribute__((packed)의 의미는 컴파일러 지정어로서 컴파일러에게 각 구조체 필드에 대해서 packing 하라는 이야기이다. 이렇게 packing을 해주면 컴파일러는 구조체의 모든 멤버변수에 대해서 실제 크기만큼만 할당을 하게 된다.
unsigned short src_port;//발신지 port
unsigned short dst_port;//수신지 port
unsigned long seqnum;//sequence number
unsigned long acknum;//acknowledge number 출력
unsigned char reserved2:4;//향후 사용을 위해 예약되 있는 필드
unsigned char hlen:4;//헤더길이
unsigned char flags:6;
unsigned char reserved1:2;
unsigned short window_size;//송수신지의 버퍼의 크기를 나타내는 필드
unsigned short checksum;//데이터가 이상없이 제대로 전송되었는지 확인시 이용
unsigned short urgent_point;//긴급포인터, 수신지로부터 응답이 잘못되었거나 다른이유로 무엇인가 이상이 발견되면 긴급데이터를 실은 세그먼트를 수신지로 보낸다.
};
2.결과 화면 및 설명
위의 코드대로 실행한다면 출력이 무한반복이 된다. 이를 방지하게 위해 소스코드에는 while 문 안에 cnt라는 변수를 넣어 10번이 되면 프로그램을 중지 시켰다.
TCP Header
3.소감
소켓 프로그래밍에 익숙치 않아서 이해하는데 어려움이 있었다. 하지만 책을 읽고 코드 한줄 한 줄을 따져가며 생각하다보니 데이터통신 시간에 배웠던 패킷의 교환의 원리가 생각나면서 이해할 수 있었다. 로소켓이 모든 패킷에 대해서 받아 볼 수 있는 프로그램이다 보니 root 권한을 가져야만 사용할 수 있다는 개념이 생소하고, 더 매력적으로 느껴졌다. 이런 프로그램으로 상대방의 전송 데이터를 가로채는 원리를 알게 되었다. 컴퓨터전공 학생으로써 많은 프로그램을 짜 왔지만 이번처럼 로소켓 프로그램은 처음이었다. 앞으로 보안쪽으로도 공부를 해 보고 싶기 때문에 이런 여러 소켓 프로그램들을 더 배워서 활용해 보고 싶다.
4.참고문헌
TCP/IP 소켓 프로그래밍 /한빛미디어
unsigned short fl_offset0:4;//플래그의 오프셋
unsigned char flags:3;//플래그는 3비트임
unsigned short fl_offset1:1;
unsigned short fl_offset2:8;
unsigned char ttl;//Time to Live 즉 수명시간
unsigned char protocol;//아이피의 프로토콜
unsigned short checksum;
unsigned long src_ip;//발신지 ip
unsigned long dst_ip;//수신지 ip
};
// TCP 헤더의 구조를 가지는 구조체
struct __attribute__((packed)) tcp_header_t {
//__attribute__((packed)의 의미는 컴파일러 지정어로서 컴파일러에게 각 구조체 필드에 대해서 packing 하라는 이야기이다. 이렇게 packing을 해주면 컴파일러는 구조체의 모든 멤버변수에 대해서 실제 크기만큼만 할당을 하게 된다.
unsigned short src_port;//발신지 port
unsigned short dst_port;//수신지 port
unsigned long seqnum;//sequence number
unsigned long acknum;//acknowledge number 출력
unsigned char reserved2:4;//향후 사용을 위해 예약되 있는 필드
unsigned char hlen:4;//헤더길이
unsigned char flags:6;
unsigned char reserved1:2;
unsigned short window_size;//송수신지의 버퍼의 크기를 나타내는 필드
unsigned short checksum;//데이터가 이상없이 제대로 전송되었는지 확인시 이용
unsigned short urgent_point;//긴급포인터, 수신지로부터 응답이 잘못되었거나 다른이유로 무엇인가 이상이 발견되면 긴급데이터를 실은 세그먼트를 수신지로 보낸다.
};
2.결과 화면 및 설명
위의 코드대로 실행한다면 출력이 무한반복이 된다. 이를 방지하게 위해 소스코드에는 while 문 안에 cnt라는 변수를 넣어 10번이 되면 프로그램을 중지 시켰다.
TCP Header
3.소감
소켓 프로그래밍에 익숙치 않아서 이해하는데 어려움이 있었다. 하지만 책을 읽고 코드 한줄 한 줄을 따져가며 생각하다보니 데이터통신 시간에 배웠던 패킷의 교환의 원리가 생각나면서 이해할 수 있었다. 로소켓이 모든 패킷에 대해서 받아 볼 수 있는 프로그램이다 보니 root 권한을 가져야만 사용할 수 있다는 개념이 생소하고, 더 매력적으로 느껴졌다. 이런 프로그램으로 상대방의 전송 데이터를 가로채는 원리를 알게 되었다. 컴퓨터전공 학생으로써 많은 프로그램을 짜 왔지만 이번처럼 로소켓 프로그램은 처음이었다. 앞으로 보안쪽으로도 공부를 해 보고 싶기 때문에 이런 여러 소켓 프로그램들을 더 배워서 활용해 보고 싶다.
4.참고문헌
TCP/IP 소켓 프로그래밍 /한빛미디어
추천자료
- 컴퓨터 프로그래밍
- 운영체제에 관한 보고서
- c언어로 작성된 다익스트라(dijkstra알고리즘)
- 자바 달력 출력 프로그램
- 자바 파일입출력
- 컴퓨터과학과 - C프로그래밍 레포트(대체)
- Overloading과 Overriding의 구별
- 자료구조(AVL tree, hash 등)을 이용한 패턴 매칭(Pattern Matching) 구현
- 자료구조(스택, stack)을 이용한 최단 거리 미로 찾기 알고리즘
- 이미지를 로딩하여 보여주고 그에 따른 히스토그램 정보와 파일의 간단한 정보를 출력해주는 ...
- [윈도우프로그래밍] 데이터베이스응용 관리프로그램 - 음원관리 프로그램 : 음악관리,데이터...
- assignment3
- COPYLEFT 관련 site 조사
- 안드로이드 내부/외부 디바이스 용량 확인 및 메모리 확인/정리 APP OS_project