2014-02-19 2 views
0

나는 첫 번째 루아 dissector 시작 해요. 두 하드 코딩 된 이더넷 주소 사이에 페이로드 프로토콜이 실행 중입니다. 어떻게 해부도 내에서 정확한 비교를 할 수 있습니까? 사전 볼프강 R. (당신이 무슨 일을하는지 임) TvbRange에 ether()를 호출루아 wireshark dissector : 이더넷 주소를 비교

답변

1

에서

if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then 
... 

덕분에 같은

뭔가 다시 주소 객체를 제공합니다. 불행하게도 주소 개체는 그 자체로 유용하지 않습니다. 문자 집합을 얻기 위해 tostring(addr)을 호출 한 다음 기대 한 것과 비교하는 것이 유일한 방법입니다. 이처럼 :

if tostring(buf(0,6):ether()) == "00:12:34:56:78:9a" then 
    -- do stuff 
end 

하지만 조심하는 한 가지가있다 : 당신의 Wireshark를 기본 설정 이름 확인을 사용하도록 설정되어있는 경우, 당신은 다시 얻을 문자열로 대체 이더넷 MAC 주소의 OUI 부분이있을 수 있습니다 그것은 지정된 조직/회사 이름입니다. 즉, "cisco : 56 : 78 : 9a"또는 그 무엇이든 될 수 있습니다.

최신 (야간) wireshark 1.11 빌드에서는 버퍼의 원시 문자열을 원시 루아 문자열로 가져올 수 있으며 이더넷 주소 (ASCII 문자가 아닌 이진 루아 문자열)와 비교하면됩니다. 또한 16 진수로 변환 할 수 있도록 16 진수로 변환 할 수있는 함수가 있습니다.

물론 다른 방법으로는 buf(0,2):uint()buf(2,2):uint()과 같은 각 바이트 또는 바이트 쌍을 가져올 수 있습니다. 그리고 buf(4,2):uint() 그리고 그냥 숫자로 비교하십시오.

관련 문제