Wireshark: 기본 해상도 추가 (3)
저작권 성명: 전재 시 하이퍼링크 형식 으로 글 의 원본 출처 와 작성 자 정보 및 본 성명 을 표시 하 십시오.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)' 필드 입 니 다. 물론 표 시 된 상황 에서 도 이 데 이 터 를 분석 트 리 의 기본 부분 에 추가 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.