pcap으로 잡은 패킷을 분석하는데요...
글쓴이: shs0917 / 작성시간: 목, 2003/07/24 - 9:54오후
안녕하세요?? 보안쪽에 관심이 많은 초보 리눅서입니다.:oops:
pcap으로 ip패킷을 잘라보면 flags & flagment offset이 ip_off라는 하나의
구조체에 들어가게 되는데요.. 그걸 flags랑 flagment offset으로 나누는 방법이
없을까 해서 이렇게 글을 올립니다. 이번에 pcap을 이용한 간단한 패킷 분석
프로그램을 만들고 있는데요.. 이더넷 프레임에서 IP datagram을 뽑아낸 다음에
그 안의 내용을 분석하던중 flags 와 flagment offset이 ip_off라는 구조체에
같이 들어가 있어서.. 그걸 분리하려고 하는데요.. 방법 좀 가르쳐 주시면 감사
하겠습니다. :D
Forums:
flagmen & offset...
2byte 정보 중 앞에 3bit가 flag...나머지가 flagment offset입니다...
ps. 패킷으로 숫자값(length 나 offset등등)은 MSB입니다...따라서 LSB형식의 컴퓨터에서는 이것을 바꿔줘야 합니다...
------------------------
http://agbird.egloos.com
답변 감사합니다.:wink:
답변은 잘 봤는데요.. 상위 3bit가 flags이고 그 이후 13bit가 flagment offset
이란 것과 flags 3bit가 상위 1bit는 예약값 0, 그 다음은 DF, 그 다음은 MF라는 것 까지는 봤습니다. 제가 사용하는 시스템은 AMD 애슬론 XP0 200+이구요... 래드햇 9.0인데요.. 답변에서 변환해야 한다는 그 내용을 모르겠구요.. 구조체
맴버에 들어있는 값이 u_int형인데.. 그중에 상위 3bit를 어떻게 뽑아내야 할지 모르겠네요..
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
그냥 masking 하시죠...그리고 변환하라는 것은 보통 인텔 계열
그냥 masking 하시죠...
그리고 변환하라는 것은 보통 인텔 계열은 2byte short의 경우 낮은 바이트에서 높은 바이트로 저장이 되는데
packet은 높은 바이트 / 낮은 바이트 순으로 저장이 되므로 이를 뒤바꿔줘야한다는 것은 말한 것입니다...
unsigned char flag;
unsigned short offset;
unsigned char *flagment = (unsigned char *)ip_off;
flag = flagment[0] & 0xE0;
flagment offset = (unsigned short)(((flagment[0] & 0x1F) << 8) | flagment[1]);
------------------------
http://agbird.egloos.com
^^ 해결 했습니다. 답변 감사합니다.
네트웍으로 보내지 않을때도 빅엔디안과 리틀엔디안의 문제점이 생기는 거였군요... 쉬프트 연산으로 간단히 해결 되었습니다.^^ 감사하네용..
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
댓글 달기