Wireshark: 기본 해상도 추가 (3)

4453 단어
와이어 샤 크
저작권 성명: 전재 시 하이퍼링크 형식 으로 글 의 원본 출처 와 작성 자 정보 및 본 성명 을 표시 하 십시오.http://www.blogbus.com/shujiantang-logs/35858316.html 본 고 는 Wireshark 공식 개발 문서 9.2 절 의 번역 이다.
9.2.3. 분석 정보 개선
우 리 는 프로 토 콜 의 표 시 를 개선 하기 위해 데 이 터 를 추가 할 수 있다.첫 번 째 단 계 는 텍스트 탭 을 추가 하 는 것 입 니 다.우 리 는 먼저 패 킷 유형 을 표시 합 니 다.이런 상황 에 대해 서 는 추가 데 이 터 를 추가 하 는 것 이 좋다.우선 간단 한 유형 명 표를 추가 합 니 다.예 9.10. 패 킷 형식 이름 을 짓 습 니 다.
static const value_string packettypenames[]=
{
    {1,"Initialise"},
    {2,"Terminate"},
    {3,"Data"},
    {0,NULL}
};

이 데이터 구 조 는 값 에 대응 하 는 이름 을 편리 하 게 조회 할 수 있다.직접 조작 하 는 함수 가 있 지만, 우 리 는 그것들 을 호출 할 필요 가 없다. 왜냐하면 이것 은 이미 관련 지원 코드 에 의 해 실현 되 었 기 때문이다.
우 리 는 VALS 매크로 를 사용 하여 데이터 의 적당 한 부분 에 세부 사항 을 지정 하면 된다.예 9.11. 프로 토 콜 에 이름 을 추가 합 니 다.
{
    &hf_foo_pdu_type,
    {"FOO PDU Type","foo.type",FT_UINT8,BASE_DEC,VALS(packettypenames),0x0,NULL,HFILL}
}

이것 은 패 킷 의 식별 에 도움 이 되 고 우 리 는 표지 구조 에 대해 유사 한 처 리 를 할 수 있다.그러나 이것 을 실현 하려 면 표 에 더 많은 데 이 터 를 추가 해 야 한다.예 9.12. 프로 토 콜 에 표 지 를 추가 합 니 다.
//       
#define FOO_START_FLAG 0x01
#define FOO_END_FLAG 0x02
#define FOO_PRIORITY_FLAG 0x04
 
static int hf_foo_startflag=-1;
static int hf_foo_endflag=-1;
static int hf_foo_priorityflag=-1;
 
//   “proto_register_foo”    “hf”   ,       
{
     &hf_foo_startflag,
     {"FOO PDU Start Flags","foo.flags.start",FT_BOOLEAN,8,NULL,FOO_START_FLAG,NULL,HFILL}
},
{
     &hf_foo_endflag,
     {"FOO PDU End Flags","foo.flags.end",FT_BOOLEAN,8,NULL,FOO_END_FLAG,NULL,HFILL}
},
{
     &hf_foo_priorityflag,
     {"FOO PDU Priority Flags","foo.flags.priority",FT_BOOLEAN,8,NULL,FOO_PRIORITY_FLAG,NULL,HFILL}
},
 
//   “dissect_foo”        
proto_tree_add_item(foo_tree,hf_foo_flags,tvb,offset,1,FALSE);
proto_tree_add_item(foo_tree,hf_foo_startflag,tvb,offset,1,FALSE);
proto_tree_add_item(foo_tree,hf_foo_endflag,tvb,offset,1,FALSE);
proto_tree_add_item(foo_tree,hf_foo_priorityflag,tvb,offset,1,FALSE);

offset+=1;

여기 설명 이 필요 합 니 다.
  • 표지 필드 에 대해 모든 사람 이 하나의 표 지 를 표시 하기 때문에 우 리 는 FT_BOOLEAN 유형 을 사용 하여 표지 의 설정 여 부 를 나타 낸다.
  • 그 다음 에 우 리 는 데이터 의 일곱 번 째 도 메 인 에 표지 마스크 를 포함 하여 시스템 이 관련 비트 위 치 를 얻 도록 한다.
  • 저희 도 다섯 번 째 도 메 인 을 8 으로 바 꾸 고 표지 필드 를 가 져 올 때 8 비트 데 이 터 를 읽 으 라 고 지시 합 니 다.
  • 마지막 으로 우 리 는 이 새로운 구 조 를 분석 프로그램 에 추가 합 니 다.주의 하 세 요. 우 리 는 반드시 모든 표지 처리 에 대해 같은 오프셋 을 유지 해 야 합 니 다.

  • 현재 이 해상도 기의 기능 은 이미 상당히 완전 해 보이 지만, 우 리 는 여전히 하나의 방안 을 실시 하여 그것 을 완벽 하 게 할 수 있다.현재 우리 의 해석 은 'Foo Protocol' 로 만 패 킷 을 표시 하 는데 이것 은 정확 하지만 실 용적 가치 가 크 지 않다.
    우 리 는 세부 사항 을 추가 해서 그것 을 강화 할 수 있다.우선 우 리 는 협의 유형의 실제 값 을 얻어 야 한다. 이것 은 함수 tvb_get_guint8 를 통 해 편리 하 게 할 수 있다.이 값 을 얻 은 후에 우 리 는 일 을 전개 할 수 있다.우선 패키지 표면 판 의 '정보 (INFO)' 열 에 PDU 의 분류 정 보 를 표시 할 수 있 습 니 다. 프로 토 콜 의 흔적 을 볼 때 매우 유용 합 니 다.그 다음 에 우 리 는 가방 내 역 패 널 에 도 이런 정 보 를 표시 할 수 있다.예 9.13. 증강 디 스 플레이.
    static void dissect_foo(tvbuff_t *tvb,packet_info *pinfo,proto_tree *tree)
    {
        guint8 packet_type=tvb_get_guint8(tvb,0);
     
        if(check_col(pinfo->cinfo,COL_PROTOCOL))
        {
            col_set_str(pinfo->cinfo,COL_PROTOCOL,"FOO");
        }
        /* Clear out stuff in the info column */
        if(check_col(pinfo->cinfo,COL_INFO))
        {
            col_clear(pinfo->cinfo,COL_INFO);
        }
        if(check_col(pinfo->cinfo,COL_INFO))
        {
            col_add_fstr(pinfo->cinfo,COL_INFO,"Type %s",val_to_str(packet_type,packettypenames,"Unknown (0x%02x)"));
        }
     
        if(tree)
        {
            /* we are being asked for details */
            proto_item *ti=NULL;
            proto_tree *foo_tree=NULL;
            gint offset=0;
     
            ti=proto_tree_add_item(tree,proto_foo,tvb,0,-1,FALSE);
            proto_item_append_text(ti,", Type %s",val_to_str(packet_type,packettypenames,"Unknown (0x%02x)"));
            foo_tree=proto_item_add_subtree(ti,ett_foo);
            proto_tree_add_item(foo_tree,hf_foo_pdu_type,tvb,offset,1,FALSE);
            offset+=1;
        }
    }
    

    여기 서 앞의 8 비트 비트 비트 의 값 을 얻 은 후에 우 리 는 내 장 된 응용 함수 val_to_str 를 사용 하여 이 값 에 대응 하 는 데 이 터 를 얻 을 수 있 습 니 다.만약 값 이 존재 하지 않 는 다 면, 우 리 는 직접 16 진법 으로 이 값 을 표시 할 것 이다.저 희 는 이 데 이 터 를 두 번 사용 합 니 다. 한 번 은 목록 에 사용 되 는 '정보 (INFO)' 필드 입 니 다. 물론 표 시 된 상황 에서 도 이 데 이 터 를 분석 트 리 의 기본 부분 에 추가 합 니 다.

    좋은 웹페이지 즐겨찾기