2012-05-01 3 views
6

우선, 나는 Lua를 처음 접했고, 이것은 wireshark 해부학자를 쓰는 나의 첫번째 시도이다.루아에서 Wireshark Dissector

내 프로토콜은 간단합니다. 길이가 2 바이트 인 필드와 그 길이의 문자열이 이어집니다.

루아 콘솔을 통해 코드를 실행하면 모든 것이 예상대로 작동합니다. 코드가 와이어 샤크 플러그인 디렉토리에 추가 될 때

, 나는 오류를

Lua Error: [string "C:\Users...\AppData\Roaming\Wireshark..."]:15: calling 'add' on bad self (number expected, got string)

15 행에 대응을 t:add(f_text... 라인입니다 얻을.

누구나 실행 방법 간의 불일치를 설명 할 수 있습니까?

do 
    local p_multi = Proto("aggregator","Aggregator"); 

    local f_len = ProtoField.int16("aggregator.length","Length",base.DEC) 
    local f_text = ProtoField.string("aggregator.text","Text") 

    p_multi.fields = { f_len, f_text } 

    local data_dis = Dissector.get("data") 

    function p_multi.dissector(buf,pkt,root) 
      pkt.cols.protocol = "Aggregator" 
      local len = buf(0,2):int() 
      local t = root:add(p_multi,buf(0,len+2)) 
      t:add(f_len,buf(0,2),"Length: " .. buf(0,2):int()) 
      t:add(f_text,buf(2,len),"Text: " .. buf(2,len):string()) 
    end 

    local tcp_encap_table = DissectorTable.get("tcp.port") 
    tcp_encap_table:add(4321,p_multi) 
end 
+0

http : //www.wireshark .org/docs/wsug_html_chunked/wslua_dissector_example.html 및 http://wiki.wi.wireshark.org/Lua/Dissectors를 참조하십시오. 좋은 API 문서 소스가 있습니까? – Edgemaster

+0

사용자 가이드의 [Chapter 11] (http://www.wireshark.org/docs/wsug_html_chunked/wsluarm.html)은 Lua 인터페이스의 API 문서입니다. 섹션 11.10, 11.11 및 11.12는 기능 인터페이스입니다. 그 너머에 실제로 어떤 문서도 존재하지 않습니다. 해부학자가 서면으로 일해야하는 것처럼 보입니다. 코드는 데이터 해독기 ('local data_dis = Dissector.get ("data")')에 대한 참조를 얻었지만 사용하지 않는다는 것을 보여줍니다. 이 코드는 완전한 해부학 코드인가요? 그렇지 않다면 우연히 여기에 표시되지 않은 어딘가에't'를 변경했을 수 있습니다. – multipleinterfaces

+0

그것은 내 완벽한 해부학 코드입니다, data_dis는 연결된 샘플에서 행 오버입니다. – Edgemaster

답변

6

귀하의 해독기 코드는 정확하지만 인터페이스가 허용하지 않는 추가 작업을 수행하고 있습니다. dissector 기능을 이렇게 변경하면

function p_multi.dissector(buf,pkt,root) 
     pkt.cols.protocol = "Aggregator" 
     local len = buf(0,2):int() 
     local t = root:add(p_multi,buf(0,len+2)) 
     t:add(f_len,buf(0,2)) --let Wireshark do the hard work 
     t:add(f_text,buf(2,len)) --you've already defined their labels etc. 
end 

등의 동작을 얻을 수 있습니다. "Text"및 "Length"레이블은 이미 필드에 정의되어 있으므로 15 및 16 행에 다시 입력 할 필요가 없습니다.

+0

고맙습니다. 나는 일을 떠나기 전에이 질문을 서둘러 게시했다. 생각해 볼 시간이 더 필요하다. Lua 콘솔을 통해 작동하는 이유는 아직도 혼란 스럽습니다. – Edgemaster