หลัก อื่น วิธีใช้ Lua Dissector ใน Wireshark

วิธีใช้ Lua Dissector ใน Wireshark



ในฐานะหนึ่งในเครื่องมือจับแพ็กเก็ตเครือข่ายที่ดีที่สุดในโลก Wireshark ช่วยให้คุณได้รับแพ็กเก็ตข้อมูลเฉพาะ เพื่อให้คุณสามารถวิเคราะห์แพ็กเก็ตเหล่านั้นได้ทั้งแบบออฟไลน์และแบบเรียลไทม์ ให้คิดว่าแอปนี้เป็นวิธีตรวจสอบข้อมูลที่ไหลผ่านเครือข่ายของคุณอย่างใกล้ชิด ทำให้คุณสามารถตรวจจับปัญหาและความผิดปกติต่างๆ ได้

  วิธีใช้ Lua Dissector ใน Wireshark

คุณสามารถใช้ตัวแยกส่วนถ้าคุณต้องการวิเคราะห์ส่วนใดส่วนหนึ่งของข้อมูลของแพ็กเก็ต ตามชื่อที่บอกไว้ กระบวนการนี้จะ 'แยกส่วน' ของโค้ด ทำให้คุณสามารถตัดบางประเด็นที่ต้องให้ความสนใจออกไปได้ บทช่วยสอนนี้อธิบายวิธีสร้างและใช้ตัวแยกส่วนใน Wireshark โดยใช้ภาษาสคริปต์ Lua

ก่อนที่คุณจะเริ่ม - สิ่งที่คุณต้องรู้เกี่ยวกับ Dissectors

แม้ว่าตัวแยกจะเสนอวิธีที่รวดเร็วในการวิเคราะห์ส่วนต่างๆ ของแพ็กเก็ตข้อมูลใน Wireshark แต่พวกเขาก็ต้องปฏิบัติตามโปรโตคอลบางอย่างเพื่อให้ทำงานได้อย่างมีประสิทธิภาพ โปรโตคอลเหล่านี้มีดังต่อไปนี้:

  • ทุกๆ Dissector ที่คุณสร้างจะต้องได้รับการลงทะเบียนเพื่อจัดการประเภทเพย์โหลดที่กำหนดจากโปรโตคอลอื่น ในการลงทะเบียนนี้ให้เสร็จสมบูรณ์ คุณต้องกำหนดวัตถุ 'Proto' ให้กับผู้แยกส่วนของคุณ ซึ่งคุณจะเห็นด้านล่าง
  • เมื่อคุณเรียก Dissector ผ่าน Wireshark ระบบจะได้รับสามสิ่งจากแอป:
    • TVB Object – บัฟเฟอร์ TVB จากแพ็คเก็ตข้อมูล
    • TreeItem Object – รูทของต้นไม้ที่แสดงถึงโหนดเดียวในแผนผังข้อมูล
    • Pinfo Object – บันทึกข้อมูลแพ็คเก็ต
  • คุณสามารถเรียกใช้ dissector ได้ก็ต่อเมื่อแพ็คเก็ตข้อมูลของคุณตรงกับ DissectorTable ที่คุณตั้งค่าเป็นวัตถุ 'Proto'
    • คุณสามารถหลีกเลี่ยงข้อกำหนดนี้ได้โดยบังคับให้ใช้ตัวแยกส่วนผ่านฟังก์ชัน 'ถอดรหัสเป็น' แต่ถึงกระนั้น คุณสามารถบังคับ dissector ได้ก็ต่อเมื่อ DissectorTable ที่คุณตั้งค่าเป็นวัตถุ 'Proto' เป็นประเภทที่ถูกต้อง

การตั้งค่า Dissector ของคุณโดยใช้ LUA

เนื่องจากทั้ง Wireshark เขียนและใช้ภาษาโปรแกรม C ดังนั้นตัวแยกส่วนส่วนใหญ่จะเขียนด้วยภาษา C ในลักษณะเดียวกัน อย่างไรก็ตาม คุณอาจต้องการใช้ Lua ภาษาสคริปต์นี้ง่ายกว่าภาษาซี ดังนั้นจึงเข้าถึงได้มากขึ้นสำหรับผู้มาใหม่หรือผู้ที่ต้องการสร้างตัวแยกส่วนโดยใช้ภาษาที่เบากว่า

วิธีดูประวัติของใครบางคนบน Instagram

แม้ว่าโค้ดของคุณจะง่ายกว่า แต่ตัวแยกส่วนที่คุณได้รับเมื่อใช้ Lua มักจะช้ากว่าตัวแยกที่คุณสร้างโดยใช้ C อย่างไรก็ตาม นี่คือขั้นตอนที่ต้องปฏิบัติตามหากคุณต้องการสร้างตัวแยก Wireshark โดยใช้ Lua

ขั้นตอนที่ 1 – ตั้งค่า Lua ใน Wireshark

คุณจะต้องตั้งค่า Lua หากคุณยังไม่เคยใช้ใน Wireshark มาก่อน:

  1. คลิก “Help” ตามด้วย “About Wireshark”
  2. คลิก “โฟลเดอร์”
  3. เลือกข้อใดข้อหนึ่งต่อไปนี้เพื่อสร้างสคริปต์ Lua ที่ใช้งานอยู่:
    • ปลั๊กอิน Lua สากล
    • ปลั๊กอิน Lua ส่วนตัว
    • ส่วนตัว

เมื่อเปิดใช้งาน สคริปต์ของคุณจะพร้อมเมื่อใดก็ตามที่คุณเริ่ม Wireshark ทุกครั้งที่คุณทำการเปลี่ยนแปลงในสคริปต์นั้น คุณต้องรีสตาร์ท Wireshark เพื่อลงทะเบียนการเปลี่ยนแปลงหรือกด “Ctrl + Shift + L” เพื่อโหลดสคริปต์ Lua ทั้งหมดของคุณใหม่เพื่อให้การเปลี่ยนแปลงมีผล

ขั้นตอนที่ 2 – ขั้นตอนพื้นฐานสำหรับการสร้าง Dissector ของคุณ

หากคุณคุ้นเคยกับ Lua อยู่แล้ว คุณสามารถใช้ขั้นตอนต่อไปนี้เพื่อสร้างสคริปต์แยกส่วนของคุณเองที่จะทำงานใน Wireshark:

  • ประกาศโปรโตคอลสำหรับตัวแยกส่วนของคุณ ซึ่งคุณต้องกำหนดทั้งชื่อยาวสำหรับใช้ในแผนผังโปรโตคอลและชื่อสั้นที่ทำหน้าที่เป็นชื่อตัวกรองที่แสดงของส่วนแยก
    • สร้างฟิลด์สามฟิลด์ต่อไปนี้ ด้วยประเภทที่เหมาะสม:
    • คำถาม – แสดงประเภทคำถาม
    • คำตอบ – แสดงประเภทคำตอบ
  • MessageType – แสดงให้เห็นว่าแพ็กเก็ตของคุณขอคำถามหรือคำตอบหรือไม่
  • ลงทะเบียนฟิลด์ของคุณเพื่อให้ Wireshark รู้วิธีแสดงฟิลด์เหล่านั้น หากไม่มีฟิลด์ที่ลงทะเบียน คุณจะได้รับข้อความ 'Lua Error' ซึ่งโดยปกติจะแจ้งให้คุณทราบว่า ProtoField ของรายการต้นไม้ของคุณไม่ถูกต้อง
  • สร้างฟังก์ชันการแยกที่มี Pinfo ที่กล่าวถึงก่อนหน้านี้ (ที่มีข้อมูลเกี่ยวกับแพ็กเก็ตของคุณ) และรายการต้นไม้ (สร้างแผนภูมิที่คุณจะต่อท้ายทรีย่อย) คุณต้องสร้าง 'บัฟเฟอร์' ซึ่งอยู่ด้านบนของ TCP ของคุณด้วย
  • ระบุทั้งโปรโตคอลและพอร์ตที่ Wireshark ต้องใช้ตัวแยกส่วน ตัวอย่างเช่น คุณสามารถตั้งค่าโปรโตคอลเป็น “TCP” และหมายเลขพอร์ตที่คุณต้องการใช้

ขั้นตอนที่ 3 – เพิ่ม Dissector ของคุณไปยัง Wireshark

ตอนนี้ ดิสเซคเตอร์ของคุณก็เหมือนหลอดไฟที่ไม่มีไฟฟ้า มันมีอยู่ แต่มันไม่มีประโยชน์สำหรับคุณจนกว่าคุณจะสามารถใช้พลังบางอย่างผ่านมันได้ กล่าวอีกนัยหนึ่ง ตัวแยกส่วนของคุณยังไม่ถูกเพิ่มไปยัง Wireshark ดังนั้นคุณต้องเพิ่มด้วยตนเองเพื่อให้มันทำงานโดยใช้ขั้นตอนเหล่านี้:

  1. คลิกที่ “Help” และไปที่เมนู “About Wireshark”
  2. เลือกแท็บ 'โฟลเดอร์' เพื่อค้นหารายการเส้นทางสำหรับไฟล์ Lua ของคุณ
  3. เลือก “ปลั๊กอิน Lua ส่วนตัว” สร้างไดเร็กทอรีหากจำเป็น
  4. คัดลอกและวางไฟล์ Lua ที่คุณสร้างไว้ในไดเร็กทอรี “Personal Lua Plugins” โหลด Wireshark อีกครั้งเพื่อเปิด Dissector

เป็นความคิดที่ดีที่จะทำการทดสอบตัวแยกส่วนใหม่ของคุณโดยเปิดแพ็กเก็ตบางส่วนที่คุณจับได้ Wireshark ควรส่งข้อความที่แสดงชื่อยาวที่คุณเลือกสำหรับการแยกส่วนของคุณ พร้อมด้วยข้อมูลเกี่ยวกับประเภทข้อความ (คำถามหรือคำตอบ) และผลการตรวจสอบของคุณ

โค้ดตัวอย่างบางส่วน

หากคุณยังไม่เคยสร้างตัวแยกส่วนมาก่อน (หรือคุณยังใหม่กับ Lua) ไวร์ชาร์ค เสนอตัวแยกตัวอย่างที่มีประโยชน์เพื่อให้คุณลองใช้:

local p_multi = Proto("multi", "MultiProto");
local vs_protos = {
    [2] = "mtp2",
    [3] = "mtp3",
    [4] = "alcap",
    [5] = "h248",
    [6] = "ranap",
    [7] = "rnsap",
    [8] = "nbap"
}
local f_proto = ProtoField.uint8("multi.protocol", "Protocol", base.DEC, vs_protos)
local f_dir = ProtoField.uint8("multi.direction", "Direction", base.DEC, { [1] = "incoming", [0] = "outgoing"})
local f_text = ProtoField.string("multi.text", "Text")
p_multi.fields = { f_proto, f_dir, f_text }
local data_dis = Dissector.get("data")
local protos = {
    [2] = Dissector.get("mtp2"),
    [3] = Dissector.get("mtp3"),
    [4] = Dissector.get("alcap"),
    [5] = Dissector.get("h248"),
    [6] = Dissector.get("ranap"),
    [7] = Dissector.get("rnsap"),
    [8] = Dissector.get("nbap"),
    [9] = Dissector.get("rrc"),
    [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
    [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function p_multi.dissector(buf, pkt, tree)
    local subtree = tree:add(p_multi, buf(0,2))
    subtree:add(f_proto, buf(0,1))
    subtree:add(f_dir, buf(1,1))
    local proto_id = buf(0,1):uint()
    local dissector = protos[proto_id]
    if dissector ~= nil then
        -- Dissector was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two bytes).
        dissector:call(buf(2):tvb(), pkt, tree)
    elseif proto_id < 2 then
        subtree:add(f_text, buf(2))
        -- pkt.cols.info:set(buf(2, buf:len() - 3):string())
    else
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

Postdissectors และ Chained Dissectors

คุณอาจต้องการเจาะลึกเพิ่มเติมอีกเล็กน้อยเกี่ยวกับการใช้ตัวแยกส่วนของคุณ เมื่อคุณสร้างมันใน Lua ได้อย่างชำนาญแล้ว Wireshark นำเสนอตัวแยกส่วนเพิ่มเติมอีกสองประเภท ได้แก่ ตัวแยกส่วนหลังและส่วนแยกส่วนที่ถูกล่ามโซ่ ซึ่งมีฟังก์ชันการทำงานที่มากกว่า

postdissector เป็นเหมือนการตรวจสอบขั้นสุดท้ายของ dissectors ทั้งหมดที่คุณเรียกใช้สำหรับแพ็กเก็ต คุณลงทะเบียนเพื่อรับการแจ้งเตือนเมื่อ Wireshark เรียกตัวแยกส่วนอื่นๆ ทั้งหมดที่คุณต้องการใช้ และคุณสามารถใช้มันเพื่อกรองคอลัมน์ 'โปรโตคอล' และ 'ข้อมูล' คุณลักษณะนี้มีประโยชน์อย่างยิ่งหากคุณต้องการกรองแพ็กเก็ตหลายแพ็กเก็ตในเซสชันที่คุณมีช่องว่างระหว่างชุดข้อมูลนานและไม่สามารถเรียกคืนทีละแพ็กเก็ตได้

Chaining dissectors ทำหน้าที่คล้ายกัน (อย่างน้อยก็ในแง่ของการกรองผ่าน dissectors ที่ใช้ก่อนหน้านี้) โดยให้คุณเข้าถึงข้อมูลของ dissector เดียว ข้อได้เปรียบที่สำคัญในที่นี้คือตัวแยกส่วนที่ถูกล่ามโซ่ไม่จำเป็นต้องเรียกใช้ผ่านทุกแพ็กเก็ตอีกครั้ง ทำให้คุณได้รับผลลัพธ์โดยไม่ต้องบังคับให้คุณรอให้ตัวแยกส่วนดั้งเดิมทำงานอีกครั้ง

ผ่าในลัวะ

เนื่องจาก Wireshark เสนอความสามารถในการสร้างตัวแยกส่วนใน C (ภาษาธรรมชาติ) แล้ว คุณอาจไม่เห็นความจำเป็นในการสร้างตัวแยกส่วนใน Lua เช่นกัน ถึงกระนั้น ผู้ที่ไม่คุ้นเคยกับภาษา C รวมถึงผู้ที่เชี่ยวชาญ Lua อยู่แล้ว อาจพบว่าการเขียนสคริปต์ของ Lua เพียงเล็กน้อยช่วยให้สร้างตัวแยกส่วนได้ง่ายขึ้น จริงอยู่ คุณต้องยอมแลกกับเวลาในการโหลดที่นานขึ้นเมื่อคุณเรียกใช้กระบวนการเมื่อเทียบกับตัวแยกประเภทที่ใช้ C แต่การมีตัวเลือกโดยไม่คำนึงก็มีประโยชน์

จากที่กล่าวมาเราต้องการได้ยินจากคุณ คุณใช้ตัวแยกส่วนใน Wireshark บ่อยแค่ไหน? คุณเคยลองสร้างพวกมันใน C มาก่อนหรือไม่ และคุณคิดว่าการสร้างตัวแยกส่วนใน Lua นั้นให้ประโยชน์อะไรบ้าง แจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง

บทความที่น่าสนใจ

ตัวเลือกของบรรณาธิการ

รีวิว Samsung Galaxy Tab S 8.4
รีวิว Samsung Galaxy Tab S 8.4
โดยปกติแล้วหน้าจอ AMOLED จะเป็นที่เก็บรักษาของสมาร์ทโฟนและทีวีราคาแพง แต่ Samsung ได้ปรับเทรนด์ด้วย Galaxy Tab S 8.4in - แท็บเล็ตขนาดเล็กนี้ใช้แผง Super AMOLED ที่บรรจุพิกเซลของ Samsung ด้วยตา -
มีส่วนลดสำหรับนักเรียน Netflix หรือไม่? ไม่!
มีส่วนลดสำหรับนักเรียน Netflix หรือไม่? ไม่!
หากคุณเป็นนักศึกษาวิทยาลัยที่มีเวลาว่าง คุณอาจจะชอบพักผ่อนและดู Netflix แต่น่าเสียดายที่ในฐานะนักเรียน คุณอาจจะต้องจ่ายเงินเต็มจำนวนสำหรับบริการสตรีมมิ่ง ไม่มีคำว่านักเรียน
Instagram ให้คุณปิดเสียงผู้คนจากฟีดและสตอรี่ของคุณได้แล้ว นี่คือวิธีการ
Instagram ให้คุณปิดเสียงผู้คนจากฟีดและสตอรี่ของคุณได้แล้ว นี่คือวิธีการ
แก้ไข: Skype ไม่ทำงานใน Windows 10 build 9860
แก้ไข: Skype ไม่ทำงานใน Windows 10 build 9860
นี่คือวิธีทำให้ Skype ทำงานอย่างถูกต้องใน Windows 10
วิธีจัดแนวข้อความในแนวตั้งใน Microsoft Word
วิธีจัดแนวข้อความในแนวตั้งใน Microsoft Word
ผู้ใช้ Microsoft Word คุ้นเคยกับการจัดข้อความในแนวนอน แต่มีเทคนิคเล็กๆ น้อยๆ ที่ทำให้การจัดข้อความในแนวตั้งทำได้ง่ายไม่แพ้กัน อัปเดตเพื่อรวม Word 2019
ค้นหาว่าพีซีของคุณได้รับผลกระทบจากช่องโหว่ของ CPU Meltdown และ Spectre หรือไม่
ค้นหาว่าพีซีของคุณได้รับผลกระทบจากช่องโหว่ของ CPU Meltdown และ Spectre หรือไม่
ในบทความนี้เราจะดูวิธีค้นหาว่าพีซีของคุณได้รับผลกระทบจากช่องโหว่ของ Meltdown และ Spectre CPU ใน Windows 10, Windows 8.1 และ Windows 7 SP1 หรือไม่
วิธีเปลี่ยน Bitmoji Pose ใน Snapchat
วิธีเปลี่ยน Bitmoji Pose ใน Snapchat
นับตั้งแต่เปิดตัว Bitmojis Snap Map ของ Snapchat ได้กลายเป็นแบบโต้ตอบและสนุกสนานมากขึ้น คุณลักษณะแผนที่บน Snapchat ช่วยให้เพื่อนของคุณเห็นว่าคุณอยู่ที่ไหนและทำอะไรอยู่เมื่อคุณใช้แอป