[C++] 원형 큐(Queue) 조건

Programming/Algorithm 2013. 12. 26. 15:52 Posted by gaeddong2

<Dequeue>

 

empty조건

rear == front

 

Dequeue

rear = (rear +1) % size

 

<Enqueue>

 

full

(front +1) % size == rear

 

Enqueue

front = (front +1)% size

패킷에서 데이터 부분 캡쳐하기

Network 2013. 12. 26. 15:51 Posted by gaeddong2

<main 함수>

 

char *pcap_lookupdev(char *errbuf)

패킷을 캡쳐할 적당한 네트워크 디바이스(NIC : Network Interface Card)를 찾아 그 디바이스를 지칭하는 스트링을 리턴한다.

 

 

pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)

pcap_open_live() 는 네트워크의 패킷들을 보기위해 필요한 packet capture descriptor를 얻기위해 사용된다. NIC의 promiscuous mode란 자신이 목적지가 아닌 패킷들도 받아들이는 모드를 말한다. promiscuous로 동작하지 않도록 설정해도 라이브러리 내부에서 필요에 의해 일부 promiscuous 모드로 동작할 수 있다.

 

char *device : 사용할 네트워크 디바이스를 지시하는 스트링

int snaplen : 캡쳐할 최대 bytes

int promisc : NIC가 promiscuous mode로 동작할 지 여부

int to_ms : millisecond 단위의 read timeout

char *ebuf : pcap_open_live()가 실패할 경우에만 에러 메시지가 저장된다보통 NULL

 

 

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

 

에러가 발생하거나 요구된 갯수 만큼의 패킷을 받아들이고 리턴한다. pcap_dispatch()와 다르게 타임 아웃이 발생해도 리턴되지 않는다. cnt 값이 음수면 에러가 발생하기 전까지 계속 수행한다.

 

pcap_t *p : 패킷 캡쳐 descriptor

int cnt : 읽을 패킷의 갯수

pcap_handler callback : 패킷을 처리할 루틴

u_char *user : 사용자 데이터

 

 

<HexView 함수>

 

먼저 조건으로 Ethernet type이 IP일 경우를 생각한다.

Etehrnet type이 IP일 경우 ip 구조체에 ipframe 사이즈 만큼 패킷을 복사해준다.

그 다음에 IP type이 TCP 타입인지 검사한다.

TCP type일 경우에 이제는 tcp 데이터 부분만 뽑아내는 작업을 한다.

unsigned char *tcpdata를 선언한 후에

tcpdata = (unsigned char *) (pa + (iph->ihl*4) + (tcph->doff *4));

-> packet에 ip length와 tcp length를 더해준다그 이후에 데이터가 나오기 떄문이다.

 

 

다음 조건을 통하여 순서대로 PUT이 나올 경우에 대한 조건을 생각한다.

데이터를 클라우도 서비스에 업로드 할 경우에 HTTP protocol이 PUT이 나온후에 쭉

데이터가 나오고 16진수로 od oa od oa 가 나온 후에 나의 데이터가 출력되기 때문이다.

또 하나 고려해야 할 사항은 fragment이다. Wireshark 로 확인해 본 결과

tcp segment frame으로 fragment 되어있었다.

 

 

그 packet들을 확인해본 결과 fragment된 packet들은 모두 acknumber가 같았다.

그러므로 처음 PUT이 나온 경우에 tcph->ack_seq를 변수에 저장하고다음 packet

비교하여 같을 경우에는 같은 목적의 packet이다.

그 이후 또 하나 생각할 것은 PUT 이후에 내가 올리는 데이터 정보가 바로 나오는 것이

아니라 Http에 대한 정보가 나오고 계속 나오다가 Cookie에 대한 정보가 나온 후 od oa

od oa라는 패턴 이후에 내가 업로드 하는 정보가 나오기 때문에 조건으로 if문 중첩을

하였다

 

(나중에 제대로 확인 위해 Hex코드와 아스키코드를 함께 찍어 볼 것)

od oa od oa가 나올 후에 데이터가 나오지만,한 패킷 중간 쯤에 od oa od oa가 나온다면

뒷 부분은 데이터가 나오기 때문에 count라는 변수를 두어 0일 경우에는 0d 0a 0d 0a

패킷 중간에 나올 경우를 대비해 두어 0d 0a 0d 0a가 나온다면 뒷부분을 바로 출력 후에

count를 1로 변경시켜준다다음 패킷은 acknumber가 전 packet과 같을 때까지는 모두

data부분이므로 데이터를 출력해준다.

'Network' 카테고리의 다른 글

네트워크] 네트워크와 케이블  (0) 2014.05.22
네트워크] 인터넷 & 인트라넷 & 엑스트라넷  (0) 2014.05.22
OSI 7 계층  (0) 2013.12.26
TCP/IP 4 계층  (0) 2013.12.26
네트워크 개념  (0) 2013.12.26

OSI 7 계층

Network 2013. 12. 26. 15:51 Posted by gaeddong2

*OSI 7 계층 전송 과정

 

OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다.

그 이유는 통신이 일어나는 과정이 단계별로 파악할 수 있기 때문에 흐름을 한눈에 알아보기 쉽고사람들이 이해하기 쉽다특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있다.


 

 

맨 아래에 있는 계층은 1계층이다, (1계층 = Physical(물리)), (2계층 = Data Link(데이터링크)), (3계층 = Network(네트워크)), (4계층 = Transport(전송)), (5계층 = (Session(세션)), (6계층= Presentation(표현)), (7계층 = Application(응용))이 된다.

 

 

1단계(물리 계층)

이 계층에서는 단지 데이터를 전달만 할 뿐 전송하려는(받으려는데이터가 무엇인지어떤 에러가 있는지 등에는 전혀 신경 쓰지 않는다단지 데이터를 전기적인 신호로 변환해서 주고받는 기능만 한다.

 

 

2단계(데이터 링크 계층)

ex) Ethernet header 구조체

struct ether_head

{

unsigned char ether_dsthost[ADDr_LEN]

unsigned char ether_srthost[ADDr_LEN]

unsigned short ether_type

}

이 계층에서는 맥 어드레스를 가지고 통신하게 된다이 계층에서 전송되는 단위를 프레임이라고 한다.

 

 

3단계 (네트워크 계층)

이 계층에서 가장 중요한 기능은 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능이다이 기능을 라우팅이라고 하는데 여기에 사용되는 프로토콜의 종류도 다양하고라우팅하는 기술도 다양하다이 계층은 경로를 선택하고 주소를 정하고 경로에 따라 패킷을 전달해주는 것이 이 계층의 역할이다.

 

 

4계층 (전송 계층)

통신을 활성화하기 위한 계층이다보통 TCP 프로토콜을 이용하며포트를 열어서 응용프로그램이 전송할 수 있게 한다만약 데이터가 왔다면 4계층에서 해당 데이터를 하나로 합쳐서 5계층에 던져 준다.

 

 

5계층 (세션 계층)

데이터가 통신하기 위한 논리적인 연결을 말한다통신을 하기 위한 대문이다.

하지만 4계층에서도 연결을 맺고 종료할 수 있기 때문에 어느 계층에서 통신이 끊어졌나 판단하기 한계가 있다그러므로 세션 계층은 4계층과 무관하게 응용 프로그램 관점에서 봐야 한다세션 설정유지종료 전송 중단시 복구 등의 기능이 있다.

 

 

6계층 (표현 계층)

데이터 표현이 상이한 응용 프로세스의 독립성을 제공하고암호화한다전송되는 데이터의 표현 방식에 대한 설명이다.

 

 

7계층 응용 계층

최종 목적지로서 HTTP, FTP 등과 같은 프로토콜이 있다.

해당 통신 패킷들은 방금 나열한 프로토콜에 의해 모두 처리되며 우리가 사용하는 브라우저나메일 프로그램은 프로토콜을 보다 쉽게 사용하게 해주는 응용프로그램이다.

한마디로 모든 통신의 양 끝단을 HTTP와 같은 프로토콜이지 응용프로그램이 아니다.

 

'Network' 카테고리의 다른 글

네트워크] 인터넷 & 인트라넷 & 엑스트라넷  (0) 2014.05.22
패킷에서 데이터 부분 캡쳐하기  (0) 2013.12.26
TCP/IP 4 계층  (0) 2013.12.26
네트워크 개념  (0) 2013.12.26
Proxy  (0) 2013.12.26