10월, 2017의 게시물 표시

IP header & Ethernet header

이미지
1. IP(Internet Protocol) header  - 20 바이트 고정크기 사용가능  - 옵셔널 필드가 존재하여 사실은 가변크기  - 최근에는 옵셔널 필드를 거의 사용하지 않기 때문에 20바이트로 고정되어있다. 1.1. IP 헤더의 구성 Figure 1.1 IP헤더의 구조  - Version (4bits)    Internet Protocol의 버전을 나타내며 4비트를 차지한다. 주로 IPv4를 사용하기때문에 주로 4이다.  - Header Length(4bits)    IP 헤더의 길이를 나태내며 4비트를 차지한다. 옵션의 유무에따라 길이가 달라진다. 4 비트로 최대 표현 할 수 있는 값은 15 하지만 IP헤더의 최소 길이는 20이라서 값을 구할때 4(2^2)를 곱해서 정확한 값을 구한다.  - Service field (1byte)    지금은 사용되지 않는다. 고로 0으로 지정해주면 됨.  - Total Length(Ip 패킷의 전체 크기) (2bytes)    IP 패킷의 전체의 길이 정보를 가지고있다.  - Identification (2bytes)    패킷을 식별하는 번호를 가진다.  IP 클라이언트에 따라 분할된 패킷은 같은 정보를 가지게 된다.  - Flag & Fragment offset (2bytes)  - TTL(Time TO Live) (최대 홉의 갯수) (1byte)   최대로 지날 수 있는 라우터의 숫자를 나타낸다.    Linux = 64    Windows= 128    Unix= 254  - Protocol type (1byte)   프로토콜 번호를 가지고 있다.   TCP = 0x06   ICMP = 0x11   UDP = 0x01  - Header Checksum (2bytes)    패킷의 오류를 검사하는 용도로 쓰이는 데이터  - Source Address (4bytes)    송신지(발신지)의 IP 주소를 담고있다.  - Des

OSI 하위 4 계층

이제 각 계층에 대해서 알아보자. 4계층(Transport Layer) - 전송 계층으로 데이터의 전송을 담당한다. - 어디로, 어디에서 전송이 되었는지. - 프로토콜    UDP 와 TCP가 있다.    Protocol Data Unit/PDU(프로토콜 데이터 단위 ) = Segment    주소체계: 포트(Port) 3계층(Network Layer) - 전송 루트를 담당 - 서로 다른 네트워크간의 통신(경로결정) - 주소체계 : IP Address    ip 주소는 네트워크상에서 호스트를 식별하기 위한용도.    호스트를 찾고, 경로를 설정 - 프로토콜    IP, ICMP, 라우팅 프로토콜(OSPF, RIP)    PDU( Protocol Data Unit/프로토콜 데이터 단위) : packet 통신방식 - 유니캐스트 = 1:1 - 브로드 캐스트 = 1:n (같은 네트워크에 있는 호스트에게 방송) - 멀티 캐스트 = 1:n (정해진 범위 내에 있는 호스트와 통신) IPv4 -  네트워크상에서 호스트를 식별할 수 있는 번호 부여 - 4byte(32bit) 0~42억개 정도 - IANA : 주소체계, 배포, 관리 - 4자리 숫자를 '.' 으로 구분하여 표기 IP Class  A Class   - 첫번째 1자리의 숫자를 네트워크 아이디로 사용   - 나머지 3개의 숫자를 호스트의 번호로 사용   - 총 254개의 네트워크를 소유   - 첫 번째 비트가 0으로 공통 비트를 갖도록 설정 ID : 0 000 0000 ~ 0 111 1111 :  0~127개 즉 126개 네트워크를 표현 > 1개는 사설 네트워크별 호스트의 아이디 표현범위 :  0.0.0 ~ 255.255.255 : 16,777,214개의 호스트 !사용할 수 없는 번호 - 0.0.0.0 : 네트워크의 대표 아이피 - 255.255.255.255 ( broadcasting IP ) - 127번은 특별

UDP 헤더의 구조와 스니퍼를 이용한 UDP통신 가로채기

이미지
1. UDP (user Datagram Protocol) * UDP 는 User Datagram Protocol의 약자로 TCP와 함께 잘 알려진 프로토콜이다. UDP는 TCP와 함께 단문데이터 전송에 사용된다. UDP의 전송방식은 단순하여 속도가 빠르나 데이터의 도착 순서가 바뀌거나 중복되거나 누락기도 한다 하지만 자체적인 오류 검사와 수정이 없어 신뢰성이 떨어진다.  UDP헤더는 총 8 bytes 로 구성이 되어있으며 다음 그림(Figure 1.1)과 같다 Figure 1.1 UDP Header 1) 출발지 포트정보 :2bytes 2) 목적지 포트정보 :2bytes 3) 전체 헤더의 길이(헤더+데이터)세그먼트: 2bytes 4)체크섬 :2bytes 앞에서 작성한 udp 서버와 클라이언트를 이용하여 데이터를 전송하고 스니퍼를 이용해서 전송되는 패킷을 가로채면 그림(Figure 1.2)과 같은 패킷을 얻을 수 있다. Figure 1.2 패킷데이터 데이터를 전송할때 각 계층을 지나면서 패키징을 하는데 이 과정은 각 계층을 지날때마다 헤더를 추가해주는 작업을 말한다. 먼저 헤더와 프로토콜헤더는 무엇인가? - 헤더란 전송하려는 데이터에 맨 앞에 위치한 문자열(보충데이터)를 칭한다. - 프로토콜헤더는 각 계층별 정보를 담고있는 헤더를 말한다. 먼저 위에 그림(Figure 1.2)에서 UDP 헤더만 분리하여 분석해보겠다. UDP헤더는 전송하려는 메시지 앞 8바이트가 UDP 헤더다. UDP헤더는 8바이트 고정크기를 가진다. 스니퍼에서 가로챈 통신은 다음과 같다. data:  b"\x00\x0c)\xbdL\xe7\x00\x0c)K\xb0Z\x08\x00E\x00\x00 \x00\x00@\x00@\x11\xb9m\xc0\xa8\x00\x08\xc0\xa8\x00\x07\xcbJ'\x15\x00\x0c\xa4<test 여기에서 UDP 헤더만 분리하면 b"\xcbJ'\x15\x00\x0c

RAW_SOCKET Programming: Sniffer(dump) program

이미지
1. Sniffer(덤프) 프로그램을 이용하여 NIC(Network Interface Card)로 드나드는 패킷을 sniffing (가로채다) 을 하여 패킷을 분석해보겠다. 먼저 패킷을 가로채기 위해 sniffer(덤프) 프로그램을 만들어보자. 그림(Figure 1.1)과 같이 파이썬으로 작성을 하면 된다. Figure 1.1 Sniffer.py 스니퍼 작성이 끝나면 전에 작성한 UDP 클라이언트 파일과 서버 파일을 이용하여 단어를 전송하고, 스니퍼를 이용하여 서버와 클라이언트의 통신을 가로채 보겠다.  Figure 1.2 UDP Client.py Figure 1.3 UDP Server.py 서버와 클라이언트가 통신하기 전에 작성한 스니퍼 프로그램을 작동을 시키면 그림(Figure 1.4) 과 같이 현재 통신이 이루어지고 있는 내용을 볼 수 있다.  Figure 1.4 스니퍼 작동 아주 빠른속도로 많은양의 로우데이터를 보여주기에 python3 sniffer.py > log.txt 라는 명령어를 입력 스니퍼의 출력 내용이 log.txt파일로 저장되게 한 후 vi 에디터를 이용해 log.txt파일을 열고 test라는 문자열을 검색하면 다음과 같이 쉽게 찾을 수 있다. Figure 1.5 Log.txt 스니퍼를 이용하면 그림 (Figure 1.5) 과 같이 서버와 클라이언트가 주고 받은 통신의 내용을 볼 수 있다. 다음에는 가로챈 로우데이터가 어떠한 정보를 담고 있는지 분석해보겠다.