2017-02-08 2 views
0

Wireshak의 필드에 필터를 추가하려고합니다.
내 dissector 이름은 : "basic"입니다.
3 개의 필드 (field1, field2, field3)가 있습니다.
각 필드는 string 값을 가질 수 있습니다.
Wireshark에서 특정 필드로 필터링 할 수 있습니다. 예 : basic.field1. (당신이 찾는 것과 똑같습니다 tcp.len)Wireshark의 필드에 필터를 추가하는 방법

어떻게하면됩니까?

답변

1

필드를 선언하고 프로토콜에 할당 한 다음 적절한 경우 트리에 추가해야합니다. Lua가 지원하는 문자열은 현재 두 가지 유형이 있는데, 알려진 고정 길이의 문자열에 사용되는 ftypes.STRING 유형의 문자열과 NULL (영) 끝의 문자열 인 ftypes.STRINGZ 유형이 있으므로 필드를 선언하는 방법 두 가지 유형 중 어느 것을 사용 하느냐에 달려 있습니다.

불행히도 documentation 목록의 지원되는 유형이 ftypes.UINT_STRING인데도 불구하고 wslua_proto_field.c의 소스 코드에서 볼 수있는 것과 다릅니다. 이 유형의. 자열은 길이 필드가. 자 열에 선행하여 문자열의 길이를 Y이 트로 표시 할 때 적용 가능합니다. 어쨌든 현재 루아 기반 해부학자들에게는 이용 가능하지 않습니다.

  • 필드 1 :

    그래서, 예를 들어,의 당신의 프로토콜이 UDP의 전송 및 포트 번호, 그것의 3 개 분야로/33,333 즉, 위에서 설명한 문자열의 3 가지 유형의 각 구성 사용 가정하자 : 12 바이트의 고정 길이 문자열.

  • field2 : NULL로 끝나는 임의 길이의 문자열입니다.
  • field3 : 빅 엔디 언 (네트워크) 바이트 순서로 2 바이트 길이 필드 앞에 카운트 된 문자열. 이러한 가정을 감안할 때

, 다음은 패킷을 해부한다 : 당신이 이것을 테스트하려면

-- Protocol 
local p_basic = Proto("basic", "Basic Protocol") 

-- Fields 
local f_basic_field1 = ProtoField.string("basic.field1", "Field1") 
local f_basic_field2 = ProtoField.stringz("basic.field2", "Field2") 
local f_basic_field3 = ProtoField.string("basic.field3", "Field3") 

p_basic.fields = { f_basic_field1, f_basic_field2, f_basic_field3 } 

-- Dissection 
function p_basic.dissector(buf, pinfo, tree) 
    local basic_tree = tree:add(p_basic, buf(0,-1)) 

    pinfo.cols.protocol:set("BASIC") 

    basic_tree:add(f_basic_field1, buf(0, 12)) 

    local strz = buf(12):stringz() 
    local field2_len = string.len(strz) + 1 
    basic_tree:add(f_basic_field2, buf(12, field2_len)) 

    local field3_len = buf:range(12 + field2_len, 2):uint() 
    basic_tree:add(f_basic_field3, buf(12 + field2_len + 2, field3_len)) 
end 

-- Registration 
local udp_table = DissectorTable.get("udp.port") 
udp_table:add(33333, p_basic) 

는, 최초의 개인 플러그인 디렉토리에 basic.lua로 파일에 위의 루아 코드를 저장 (찾을 수 : Help -> About Wireshark -> Folders -> Personal Plugins). 그런 다음 테스트는 다음 진수 바이트를 사용할 수 있습니다

0000 00 0e b6 00 00 02 00 0e b6 00 00 01 08 00 45 00 
0010 00 37 00 00 40 00 40 11 b5 ea c0 00 02 65 c0 00 
0020 02 66 82 35 82 35 00 23 22 32 48 65 6c 6c 6f 20 
0030 77 6f 72 6c 64 21 48 69 20 74 68 65 72 65 00 00 
0040 04 42 79 65 21 

, 예를 들어, 텍스트 파일로 basic.txt 이러한 바이트를 저장합니다. Wireshark를 시작하고 File -> Import from Hex Dump... -> Filename:basic.txt -> OK을 통해 파일을 가져옵니다. "기본 프로토콜"의 일부로 해부 된 3 개의 필드가 표시되어야합니다.

관련 문제