1. UDP헤더

 

우선 리눅스에 어떠한 IP들이 들어오는지에대해서 sniffer을 만들어서

 

bind를 할때 리눅스의 장치를 확인하기 위해 eth0를 넣어주었다. SOCK_RAW는 OSI 4계층까지 조작 및 볼수 있다.

이렇게 함으로써 리눅스로 들어오는 신호 및 나가는 신호에 대해서 볼수 있게 되었다.

 

udpserver를 켜두고 이어서 sniffer을 켜두고 클라이언트를 통해 데이터를 보내보았다.

 

 

 

hi123
b'\x00\x0c)\x10\xf9\x11\x00 \x0c)?\x88\x12\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xb2\x8e\xc0\xa8\x03w\xc0\xa8\x03v \xa9EN \x00\r\xb3\x94 hi123\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x0c)?\x88\x12\x00\x0c)\x10\xf9\x11\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xb2\x8e\xc0\xa8\x03v\xc0\xa8\x03wN \xa9E\x00\r\xb3\x94 hi123'

클라이언트에서 hi123이라는 데이터를 받고 데이터를 보낸 로그이다.

 

보면 hi123에서 8bit앞이 UDP의 헤더이다.


받은(UDP헤더 )
\xa9EN \x00\r\xb3\x94

보낸(UDP헤더 )
\xa9E\x00\r\xb3\x94

 

받은 8bit를 보면 어떤것인지 잘 모르겠다.

그래서 python쉘을 실행함으로써 알아보기로 했다.

 

 

각문자열은 0번부터 7번까지 8개의 데이터가 있는것을 볼수 있었다.

각 문자열은 눈으로는 볼수 없으나 하지만 각 숫자형 데이터라는것을 알 수 있었다.

받은 포트번호를 알기위해 16bit를 맞추기 위해서 udp의 헤더의 3번째 비트틀 좌측으로 8비트밀고 4번째 비트를 더하면 포트번호가 나온다.

그래서 받은 데이터를 20000이라는 포트번호를 알게되었다.

 

 

 

2. 엔디안 : 엔디안(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다

 

 - 운영체제에서 사용하는 보통 리틀엔디안이다. (intel계열의 CPU는 리틀엔디안)

하지만 네트워크에서 사용하는 엔디안은 빅엔디안이다.

 

 

- B는 1바이트, H는 2바이트 , L은 4바이트, ! 또는 >빅엔디안을 나타냈다.

그러므로 네트워크는 빅엔디안이기 때문에 거기에 맞추어서 봐야하기때문에 빅엔디안로 봐야하는것이다.

그래서 마지막에 unpack햇을경우 우리가 얻고자하는 UDP헤더의 정보를 알수있게된것이다.

 

 

 

'정보보안 > 네트워크 보안' 카테고리의 다른 글

IP헤더  (0) 2018.03.19
OSI 7계층  (0) 2018.03.13
시스템 구축  (0) 2018.03.13

+ Recent posts

티스토리 친구하기