네트워크 계층(Network Layer/3)
- 대표적인 프로토콜 : IP, ICMP, 라우팅 프로토콜( RIP, OSPF, ...), IPSEC
- 주소 체계 : IP Address
샘플 패킷 - b'\x00PV\xcc\xcc\x10\x00\x0c)o\xad\x1a\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xa2H
\xc0\xa8\x0b\xa6\xc0\xa8\x0b\x8du0\x82\xb5\x00\r\x98\xa2hello'
IP 헤더 - E\x00\x00!\x00\x00@\x00@\x11\xa2H\xc0\xa8\x0b\xa6\xc0\xa8\x0b\x8d
- 20바이트(byte) 고정 크기
- 옵셔널 필드가 존재하기 때문에 사실은 가변 크기지만 거의 사용되지 않기 때문에 20바이트로 고정
- 총 10개의 필드
- UDP 헤더(8바이트 + 데이터)를 제외하고 20바이트를 뒤에서부터 떼오면 된다.
필드 |
크기 |
패킷 |
16진수 |
10진수 |
IP버전과 헤더의 길이 |
1byte |
E |
0x45 |
69 |
service type |
1byte |
\x00 |
0x00 |
0 |
IP 패킷의 전체 크기 |
2byte |
\x00! |
0x00 0x21 |
33 |
identfication |
2byte |
\x00\x00 |
0x00 0x00 |
0 |
flag & frgment offset |
2byte |
@\x00 |
0x40 0x00 |
16384 |
TTL(Time TO Live) |
1byte |
@ |
0x40 |
64 |
프로토콜의 타입 |
1byte |
\x11 |
0x11 |
17 |
checksum |
2byte |
\xa2H |
0xa2 0x48 |
41544 |
출발지 IP |
4byte |
\xc0\xa8\x0b\xa6 |
0xc0 0xa8 0x0b 0xa6 |
192 168 11 166 |
도착지 IP | 4byte | \xc0\xa8\x0b\x8d | 0xc0 0xa8 0x0b 0x8d | 192 168 11 141 |
1. IP버전과 헤더의 길이(1byte)
E -> 0x45
1) IP버전 - 상위 4비트
- 0x4 -> 0100 = 4 -> IPv4
2) IP 헤더의 길이 - 하위 4비트
- 0x5 -> 0101 (왼쪽으로 시프트 2비트 해준다.) -> 10100 = 20 -> 20byte
2. service type(1byte)
- 0x00(default)
- 서비스별로 통신을 제어하기 위한 용도
- 지금은 사용되지 않는다.
3. IP 패킷의 전체 크기(2byte)
- 0x00 0x21 -> 33(byte)
- IP 헤더(20byte) + UDP 헤더(8byte + 5byte(데이터))
4. identfication(2byte)
5. flag & fragment offset(2byte)
- ip fragment(조각)와 관련된 헤더필드
6. TTL(Time To Live/1byte)
- @ -> 0x40 -> 64
- packet이 지나갈 수 있는 라우터(홉/hop)의 최대 갯수
- 총 64개의 라우터를 지나갈 수 있다.
- 리눅스 64개, 윈도우 128개를 사용한다.
- 30개 정도면 전세계 네트워크 연결 가능
7. 프로토콜의 타입(1byte)
- \x11 -> 17
- # vi /etc/protocols 를 보면 프로토콜의 타입이 정의되어있다.
- ICMP : 1, TCP : 6, UDP : 17
8. Checksum(2byte)
- 전체 내용의 값들을 더한 값
9. 출발지 IP(4byte)
- 0xc0 0xa8 0x0b 0xa6 -> 192 168 11 166
10. 도착지 IP(4byte)
- 0xc0 0xa8 0x0b 0x8d -> 192 168 11 141
'Hacking > Network' 카테고리의 다른 글
[8일차] 이더넷 헤더 클래스 만들기 (0) | 2017.09.21 |
---|---|
[7일차] 이더넷 헤더 패킷 분석하기 (0) | 2017.09.20 |
[5일차] UDP 헤더 패킷 분석하기 (0) | 2017.09.19 |
Raw 소켓 프로그래밍 (0) | 2017.09.15 |
[4일차] 파이썬을 이용한 UDP 소켓 프로그래밍 (0) | 2017.09.14 |
WRITTEN BY