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\xa4< 이렇게 된다.
1) 출발지 포트(2바이트) -xcbj ==52042번 포트에서 출발
2) 도착지 포트(2바이트) -'\x15 ==  10005번 포트에 도착.
3) 전체 해더의 길이(2바이트) -\x00\x0c == 12
4) 체크섬(2바이트) -\xa4< ==42044

댓글

이 블로그의 인기 게시물

UDP 소켓을 이용하여 에코서버와 통신하기.

파이썬을 이용한 TCP 소켓 프로그래밍.