2017-03-15 24 views
0

이미이 질문을 Wireshark 커뮤니티 (Link)에 게시했지만 현재 아직 답변이 없습니다. 지금은 (윈도우 10에서) tshark를 함께 사용하려면 -tshark (Windows 10)을 사용할 때 Lua 해독기가 호출되지 않습니다.


는 내가 지금까지 와이어 샤크 GUI에 사용되는 I 루아에 쓴 dissectors의 무리가 있습니다. 문제는 내 해부 중 하나가 tshark에서 호출 될 때 작동하지 않는다는 것입니다 (초기화 되더라도). tshark는 다른 모든 해부 체가 정상적으로 작동하더라도 패킷을 전혀 출력하지 않습니다.

function myproto.init() 
    info("Initialization of myproto dissector") 
end 
function myproto.dissector(buffer, packet_info, tree) 
    info("dissector successfully called") 
    [...] 
end 

아무것도 특별한 실제로, 상기 해부학자 자체가 보이는 동안 나는

[...] 
info("calling dissector") 
Dissector.get("myproto"):call(payload_tvb, packet_info, tree) 

내 다른 dissectors 중 하나에서 해부학자를 호출하고 있습니다. 로그에서 절제자가 초기화된다는 것을 알 수 있습니다. 그러나 tshark를 사용하여 .pcapng 파일을 열면 "dissector successfully called"라는 로그 메시지가 인쇄되지 않고 Wireshark GUI에서는 인쇄됩니다.

오류 메시지가 표시되지 않으므로 문제가 무엇인지 알 수 없습니다. getDissector 함수 호출은 nil을 반환하지 않습니다. lua 파일은 내 AppData \ Roaming \ Wireshark \ plugins 디렉토리에 있으며, tshark에는 문제가없는 것 같습니다. 아무도이 절개사에 대해 잘못된 생각을 갖고 있습니까? 어떤 도움을 주셔서 감사합니다, 미리 감사드립니다.

답변

0

나는 익숙하지 않다. getDissector(); Dissector.get을 사용해서는 안됩니까?

local data_handle = Dissector.get("data") 

function my_proto.dissector(tvb, pinfo, tree) 

    ... 

    data_handle:call(...) 

end 

내가 당신을 위해 작동하지 않는 이유를 모르겠어요,하지만 난 당신을 도울 수있는 작업 예제를 제공 할 수 있습니다 : 예를 들어

내 루아 dissectors 모든과 같이 일을. 아래는 바보 같은 해부학사 2 개입니다 (foo.luabar.lua). 테스트하려는 경우 cloudshark에 게시 된 샘플 캡처 파일을 사용할 수 있습니다. (나는 ask.wireshark.org에 this 질문에 예로서 오래 전에 그것을 기록했다.)

첫째, foo.lua :

-- foo.lua 
local p_foo = Proto("foo", "FOO Protocol") 

local f_foo_val8 = ProtoField.uint8("foo.val8", "Value 8", base.OCT) 
local f_foo_val16 = ProtoField.uint16("foo.val16", "Value 16", base.DEC) 
local f_foo_val32 = ProtoField.uint32("foo.val32", "Value 32", base.HEX) 
local f_foo_ipv4 = ProtoField.ipv4("foo.ipv4", "IPv4 Address") 
local f_foo_ipv6 = ProtoField.ipv6("foo.ipv6", "IPv6 Address") 

p_foo.fields = { f_foo_val8, f_foo_val16, f_foo_val32, f_foo_ipv4, f_foo_ipv6 } 

bar_handle = Dissector.get("bar") 

function p_foo.dissector(buf, pinfo, tree) 
    local foo_tree = tree:add(p_foo, buf(0,-1)) 

    pinfo.cols.protocol:set("FOO") 
    foo_tree:add(f_foo_val8, buf(0, 1)) 
    foo_tree:add(f_foo_val16, buf(1, 2)) 
    foo_tree:add(f_foo_val32, buf(3, 4)) 
    foo_tree:add(f_foo_ipv4, buf(7, 4)) 
    foo_tree:add(f_foo_ipv6, buf(11, 16)) 

    bar_handle:call(buf, pinfo, tree) 
end 

local udp_table = DissectorTable.get("udp.port") 
udp_table:add(33333, p_foo) 
-- end of foo.lua 

... 지금 bar.lua를 :

local p_bar = Proto("bar", "BAR Protocol") 

function p_bar.dissector(buf, pinfo, tree) 
    pinfo.cols.info:append(", BAR") 
end 
-- end of bar.lua 

OK, 그래서 여기에 일반적인 생각은 foo.lua 내 예를 들어 정상 해부 원래 제공한다는 것을이지만, 이제 번째 호출 e bar dissector는 정말 간단하며 정보 열에 "BAR"을 추가하여 호출 된 것을 알 수 있습니다. 내 테스트에서는이 모든 것이 예상대로 작동합니다. 아마도이 간단한 예제가 도움이 될 것입니까?

+0

맞아요,'getDisector()'는 실제 호출을'Dissector.get()'에 캡슐화하기 위해 작성한 유틸리티 함수입니다. 나는 예제 코드를 단순화했다. –

0

-X 명령 줄 인수를 사용하여 tshark에 lua 파일을 전달해야합니다.

wireshark를 열 때 스크립트가 자동으로로드되지만 tshark를 실행할 때는 스크립트가로드되지 않습니다.