2010-08-31 8 views
10

बनाने के लिए वर्कफ़्लो में सुधार कैसे करें मैंने अंततः Lua for Wireshark में अपने यूडीपी प्रोटोकॉल के लिए Dissector बनाया है, लेकिन कार्य प्रवाह केवल भयानक है। इसमें मेरे संपादक में मेरी कस्टम लुआ फ़ाइल को संपादित करना शामिल है, फिर परिवर्तनों को देखने के लिए Wireshark लॉन्च करने के लिए मेरे उदाहरण कैप्चर फ़ाइल को डबल-क्लिक करना। अगर कोई त्रुटि हुई, तो वायरशर्क मुझे ट्री विश्लेषण उप-फलक में संवाद या लाल रेखा के माध्यम से सूचित करता है। मैं फिर अपनी कस्टम लुआ फ़ाइल को फिर से संपादित करता हूं और फिर उस वायरशर्क इंस्टेंस को बंद करता हूं, फिर मेरे उदाहरण कैप्चर फ़ाइल को दो बार क्लिक करें। यह एक सी फ़ाइल को संकलित करने और एक समय में केवल एक संकलक त्रुटि को देखने जैसा है।लुआ-आधारित वायर्सहार्क विच्छेदन

क्या हर समय वायरसर्क को फिर से शुरू किए बिना मेरे परिवर्तनों को देखने का एक बेहतर (तेज़) तरीका है?

उस समय, मैं लूआ सक्षम के साथ विंडोज के लिए वायरशर्क 1.2.9 का उपयोग कर रहा था।

+1

क्या कोई उपयोगी लुआ डिस्क्टर ट्यूटोरियल और क्लास प्रलेखन है? – harper

+0

@harper क्लासेस और फ़ंक्शंस https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html – Lekensteyn

+0

@Lekensteyn हां पर दस्तावेज किए गए हैं, कक्षाओं और कार्यों की एक सूची है। लेकिन उस सूची के बजाय वर्कफ़्लो के लिए कहा गया था। – harper

उत्तर

1

आप वायरसर्क लोड करने वाले एक छोटे से रैपर फ़ंक्शन को लिखने में सक्षम हो सकते हैं, और यह डिस्क से वास्तविक फ़ाइल को लोड कर सकता है (उदाहरण के लिए dofile() के माध्यम से)। यह शायद आपके लूआ कोड को फिर से लोड करने में वायरसहार्क को "चाल" कर सकता है जब तक आप इसके साथ अधिक सहज न हों और इस हैक को हटा सकें।

5

कमांड लाइन का उपयोग करके इसे स्वचालित करने का सबसे अच्छा तरीका है। हाँ, गुई चीज़ लोड करने के बजाय tshark का उपयोग करें।

अपने lua स्क्रिप्ट "proto.lua" कहा जाता है और यह एक प्रोटोकॉल "MyProto" बंदरगाह 8888 का उपयोग करता है कहा जाता है को परिभाषित करता है, तो आप का उपयोग कर अपने चीड़फाड़ परीक्षण कर सकते हैं:

tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888" 
  • वी विकल्प tshark बनाता है सभी प्रोटोकॉल की सभी जानकारी मुद्रित करें।
  • -O विकल्प -V विकल्प को केवल सूचीबद्ध (सीएसवी) प्रोटोकॉल पर सभी जानकारी दिखाने के लिए फ़िल्टर करता है।
  • -f विकल्प उन सभी पैकेट को फ़िल्टर करता है जो नियम के अनुरूप नहीं हैं। इस मामले में कोई भी पैकेट जो सही बंदरगाह से नहीं है।
1

नवीनतम वायरशर्क रिलीज लुआ लिपि चलाने के लिए एक प्राचीन कंसोल के साथ आता है। यह टूल्स -> लुआ -> मूल्यांकन के तहत पाया जा सकता है। वहां से, आप dofile() चलाकर अपने विच्छेदन को पुनः लोड करने में सक्षम होना चाहिए। आपको अपने विच्छेदन के पिछले संस्करण को भी हटाना होगा।

यहां एक टीसीपी-आधारित विच्छेदन के लिए एक उदाहरण है।

local tcp_dissector_table = DissectorTable.get("tcp.port") 
tcp_dissector_table:remove(pattern, yourdissector) 
yourdissector = nil 

dofile("c:/path/to/dissector.lua") 

मैं इस कोड को आपकी फ़ाइल के अंदर एक फ़ंक्शन में रखने की अनुशंसा करता हूं।

अब इस जवाब के साथ एक समस्या है: अपनी स्क्रिप्ट एक आद्य वस्तु बनाया है, तो ऐसा लगता है कि आप इसे फिर से एक ही आईडी साथ नहीं बना सकते। प्रोटो क्लास के कन्स्ट्रक्टर सी फंक्शन proto_register_protocol() (epan/wslua/wslua_proto.c देखें) कहते हैं। मुझे कोई भी लुआ फ़ंक्शन नहीं मिल रहा है जो प्रोटोकॉल को अनधिकृत करेगा। असल में, मैं इसे अनधिकृत करने के लिए एक सी फ़ंक्शन भी नहीं ढूंढ सकता।

+0

"असल में, मुझे इसे अनधिकृत करने के लिए सी फ़ंक्शन भी नहीं मिल रहा है।" वहां कोई नहीं है - लुआ के बिना, स्टार्टअप समय के अलावा किसी भी समय डिस्सेक्टर (या अन्य प्लगइन्स) को पंजीकृत करने के लिए कोई तंत्र नहीं है, इसलिए * un * पंजीकरण करने की कोई आवश्यकता नहीं थी। लुआ के साथ, इसे जोड़ने का अर्थ हो सकता है (और लुआ के लिए वायरसहार्क में कुछ आईडीई क्षमताओं को जोड़ना - मुझे लगता है कि किसी के पास लुआ में लिखा गया आईडीई है जिसका शायद इस के लिए उपयोग किया जा सकता है)। –

संबंधित मुद्दे