티스토리 뷰

Study/Network

PCAP File Signature

pursh 2014. 4. 9. 14:05

PCAP 파일 구조에 대해 궁금증이 생겼다...

 

패킷 데이터 부분만 있을 때 Wireshark에서 볼 수 있는 파일로 만들 수 있을까?

 

file format 을 확인해보자.

   

 

맨 앞에 24 Bytes는 Global Header 이다.

pcap 파일에서 기본으로 붙는 헤더이다.

 

 

 

 

Magic Number는 'A1 B2 C3 D4'(libpcap) 또는 'A1 B2 CD 34'(extended pcap) 이다.

 

 

리클 엔디안 방식으로 입력이 되어 있기에 'D4 C3 B2 A1'로 보인다.

 

그 뒤로는 패킷별로 '패킷 헤더 + 패킷 데이터'가 쌍으로 해서 계속 나열되는 구조이다.

 

패킷 헤더 앞에 8 Bytes는 Timestamp 관련 헤더이며 뒤에 있는 8 Bytes는 패킷 데이터 사이즈를 나타낸다.

 

 

위에 있는 패킷 헤더를 보면 Timestamp에는 비어 있으며, 패킷 데이터 사이즈 부분에는 '16 02 00 00'으로 되어 있다. 데이터 사이즈가  524(216h) Bytes라는 말이 된다.

 

패킷 헤더가 끝나면 바로 패킷 데어터가 온다. 위 경우를 보면 524 Bytes 데이터가 오고 그 뒤에 다시 패킷 헤더가 붙게 된다. 그 뒤에는 다시 패킷 데이터....

 

pcap 파일을 만든다고 하면 Global Header과 Packet Header만 만들어서 붙이면 될 것 같다.

패킷 헤더에서 사이즈를 계산할 때 Hex Data의 시작점이 '00'으로 시작된다는 것을 잊지 말고 계산하도록 하자.

 

 

 

위 에 있는 Hex Data를 통해서 pcap 파일을 만들어 보자.

위 내용은 순수한 이더넷 프레임이다. 프레임이 끝나는 위치는 'CE'이다. 바이트 시작이 '00'인 것을 감안하면 프레임 사이즈는 'CF'이다.

 

Global Header과 프레임 사이즈를 추가한 Packet Header를 만들어 보자.

 

 

빨간색 부분이 기존 Hex 데이터에 추가한 값이다.

추가한 부분 끝에 보면 'CF 00 00 00 CF 00 00 00'이 있다. 패킷 데이터 사이즈를 입력한 부분이다.

다른 부분은 다 동일하되, 패킷 데이터에 대한 사이즈부분만 계산해 주면 된다.

 

와이어사크에서 정상적으로 열리는지 확인해보자.

 

정상적으로 인식하며 좀 전에 입력한 데이터 사이즈를 표시해 주고 있는 것을 알 수 있다.

 

지금까지 pcap를 만들 때 시간을 크게 고려하지 않았다.

 

시간을 고려한다면 좀 전에 packet header 내 timestamp에서 사간을 입력해주면 된다.

Timestamp 에서 앞쪽 4 Bytes는 초 단위, 뒤쪽 4 Bytes는 ms 단위이다.

입력값은 1970년 1월 1일 09시 가준으로 값이 증가한다.

이 값 또한 리틀엔디안 방식으로 입력되기에 주의하자.

 

 

 

 

 

참조 : http://wiki.wireshark.org/Development/LibpcapFileFormat

 

'Study > Network' 카테고리의 다른 글

tshark를 통해 csv 형식으로 출력하기  (0) 2014.04.16
mergecap으로 pcap 파일 결합하기  (0) 2014.04.16
tshark 사용하기  (2) 2014.02.21
대용량 패킷 분석 #3 - tshark 통계 생성  (0) 2014.02.10
tshark man page  (0) 2014.02.10
댓글