Chủ YếU Khác Cách sử dụng Lua Dissector trong Wireshark

Cách sử dụng Lua Dissector trong Wireshark



Là một trong những công cụ chụp gói mạng tốt nhất thế giới, Wireshark cho phép bạn lấy các gói dữ liệu cụ thể để bạn có thể phân tích chúng cả ngoại tuyến và trong thời gian thực. Hãy nghĩ về ứng dụng này như một cách để kiểm tra chặt chẽ dữ liệu truyền qua mạng của bạn, cho phép bạn nắm bắt các vấn đề và sự bất thường.

  Cách sử dụng Lua Dissector trong Wireshark

Bạn có thể sử dụng bộ phân tích nếu bạn muốn phân tích một phần dữ liệu cụ thể của gói. Đúng như tên gọi, quá trình này “phân tích” mã, cho phép bạn loại bỏ một số khía cạnh cần chú ý. Hướng dẫn này giải thích cách tạo và sử dụng trình phân tích trong Wireshark bằng ngôn ngữ kịch bản Lua.

Trước khi bắt đầu – Những điều bạn cần biết về máy phân tích

Mặc dù các trình mổ xẻ cung cấp một cách nhanh chóng để phân tích các phần của gói dữ liệu trong Wireshark, nhưng chúng phải tuân theo một số giao thức để hoạt động hiệu quả. Các giao thức này bao gồm:

làm thế nào để đặt máy chủ ở chế độ không lật
  • Mọi trình mổ xẻ bạn tạo phải được đăng ký để xử lý một loại tải trọng đã đặt từ một giao thức khác. Để hoàn thành việc đăng ký này, bạn phải chỉ định một đối tượng “Proto” cho người mổ xẻ của mình, bạn sẽ thấy đối tượng này bên dưới.
  • Khi bạn gọi một người mổ xẻ thông qua Wireshark, nó sẽ nhận được ba thứ từ ứng dụng:
    • Đối tượng TVB – Bộ đệm TVB từ gói dữ liệu.
    • TreeItem Object – Một gốc cây đại diện cho một nút duy nhất trong cây dữ liệu.
    • Đối tượng Pinfo – Một bản ghi thông tin gói.
  • Bạn chỉ có thể gọi một máy mổ xẻ nếu gói dữ liệu của bạn khớp với DissectorTable mà bạn đã đặt cho đối tượng “Proto” của mình.
    • Bạn có thể giải quyết yêu cầu này bằng cách buộc sử dụng công cụ mổ xẻ thông qua chức năng “Giải mã dưới dạng”. Nhưng ngay cả khi đó, bạn chỉ có thể buộc trình mổ xẻ nếu DissectorTable mà bạn đặt cho đối tượng “Proto” của mình là đúng loại.

Thiết lập máy phân tích của bạn bằng LUA

Vì Wireshark vừa được viết vừa sử dụng ngôn ngữ lập trình C nên hầu hết các trình mổ xẻ đều được viết tương tự bằng C. Tuy nhiên, bạn có thể muốn sử dụng Lua. Ngôn ngữ kịch bản này đơn giản hơn C và do đó dễ tiếp cận hơn đối với những người mới viết mã hoặc những người chỉ muốn tạo một trình phân tách bằng ngôn ngữ nhẹ hơn.

Mặc dù mã của bạn sẽ đơn giản hơn, nhưng trình phân tích bạn nhận được khi sử dụng Lua thường chậm hơn mã bạn tạo bằng C. Tuy nhiên, đây là các bước cần thực hiện nếu bạn muốn tạo trình phân tích Wireshark bằng Lua.

Bước 1 – Thiết lập Lua trong Wireshark

Bạn sẽ cần thiết lập Lua nếu trước đây bạn chưa sử dụng nó trong Wireshark:

  1. Nhấp vào “Trợ giúp”, tiếp theo là “Giới thiệu về Wireshark”.
  2. Nhấp vào “Thư mục”.
  3. Chọn một trong các tùy chọn sau để tạo tập lệnh Lua đang hoạt động:
    • Plugin Lua toàn cầu
    • Plugin Lua cá nhân
    • Riêng tư

Sau khi được kích hoạt, tập lệnh của bạn sẽ sẵn sàng bất cứ khi nào bạn khởi động Wireshark. Mỗi khi bạn thực hiện thay đổi đối với tập lệnh đó, bạn cần phải khởi động lại Wireshark để đăng ký thay đổi hoặc nhấn “Ctrl + Shift + L” để tải lại tất cả các tập lệnh Lua để thực hiện các thay đổi của bạn.

Bước 2 – Các bước cơ bản để tạo máy phân tích của bạn

Nếu bạn đã quen thuộc với Lua, bạn có thể sử dụng các bước sau để tạo tập lệnh mổ xẻ của riêng mình sẽ hoạt động trong Wireshark:

  • Khai báo giao thức cho trình phân tích của bạn, yêu cầu bạn đặt cả tên dài để sử dụng trong cây giao thức và tên ngắn dùng làm tên bộ lọc hiển thị của trình phân tách.
    • Tạo ba trường sau, với các loại thích hợp của chúng:
    • Câu hỏi – Hiển thị loại câu hỏi.
    • Trả lời – Hiển thị loại câu trả lời.
  • MessageType – Thể hiện nếu gói của bạn yêu cầu một câu hỏi hoặc một câu trả lời.
  • Đăng ký các trường của bạn để Wireshark biết cách hiển thị chúng. Nếu không có các trường đã đăng ký, bạn sẽ nhận được thông báo 'Lỗi Lua', thường cho bạn biết rằng ProtoField Mục cây của bạn không hợp lệ.
  • Tạo một chức năng phân tích bao gồm Pinfo đã đề cập trước đó (chứa dữ liệu về gói của bạn) và Mục cây (tạo cây mà bạn sẽ nối vào cây con). Bạn cũng phải tạo một “bộ đệm”, nằm trên TCP của bạn.
  • Chỉ định cả giao thức và cổng mà Wireshark phải sử dụng trình phân tích. Ví dụ: bạn có thể đặt giao thức thành “TCP” và số cổng thành bất kỳ thứ gì bạn muốn sử dụng.

Bước 3 – Thêm Dissector của bạn vào Wireshark

Lúc này, người mổ xẻ của bạn giống như bóng đèn không có điện. Nó tồn tại, nhưng nó không có ích gì cho bạn cho đến khi bạn có thể vận hành một số sức mạnh thông qua nó. Nói cách khác, trình mổ xẻ của bạn chưa được thêm vào Wireshark, vì vậy bạn phải thêm nó theo cách thủ công để chạy nó bằng cách sử dụng các bước sau:

  1. Nhấp vào “Trợ giúp” và chuyển đến menu “Giới thiệu về Wireshark”.
  2. Chọn tab “Thư mục” để tìm danh sách đường dẫn cho tệp Lua của bạn.
  3. Chọn “Phần bổ sung Lua cá nhân.” Tạo một thư mục nếu cần thiết.
  4. Sao chép và dán tệp Lua mà bạn đã tạo vào thư mục “Plugin cá nhân”. Tải lại Wireshark để bật trình mổ xẻ.

Bạn nên chạy thử nghiệm trên trình mổ xẻ mới của mình bằng cách mở một số gói tin mà bạn đã chụp. Wireshark sẽ gửi một thông báo hiển thị tên dài mà bạn đã chọn cho người mổ xẻ của mình, cùng với thông tin về loại thông báo (câu hỏi hoặc câu trả lời) và kết quả kiểm tra của bạn.

Một số mã mẫu

Nếu bạn chưa từng tạo trình mổ xẻ trước đây (hoặc bạn chưa quen với Lua), cá mập cung cấp một ví dụ mổ xẻ tiện dụng để bạn dùng thử:

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)

Postdisectors và Chained Dissectors

Bạn có thể muốn tìm hiểu sâu hơn một chút về cách sử dụng công cụ mổ xẻ của mình sau khi bạn đã thành thạo việc tạo chúng trong Lua. Wireshark cung cấp thêm hai loại công cụ phân tách – phân tích sau phân tích và phân tích theo chuỗi – cung cấp nhiều chức năng hơn.

Postdissector giống như một bước kiểm tra cuối cùng đối với tất cả các bộ phân tích mà bạn đã chạy cho một gói. Bạn đăng ký nó để nhận thông báo sau khi Wireshark gọi mọi trình mổ xẻ khác mà bạn muốn nó sử dụng và bạn có thể sử dụng nó để lọc các cột “Giao thức” và “Thông tin”. Tính năng này đặc biệt hữu ích nếu bạn muốn lọc ra nhiều gói trong một phiên mà bạn có khoảng cách dài giữa các tập dữ liệu và không thể nhớ lại từng gói một.

Chuỗi phân tách phục vụ một chức năng tương tự (ít nhất là về mặt lọc qua các phân tách được sử dụng trước đó) bằng cách cấp cho bạn quyền truy cập vào dữ liệu của một phân tách. Ưu điểm chính ở đây là trình phân tích chuỗi không phải chạy lại từng gói, cho bạn kết quả mà không buộc bạn phải đợi trình phân tích ban đầu chạy lại.

mổ xẻ ở Lúa

Cho rằng Wireshark đã cung cấp khả năng tạo các bộ phân tích bằng C (ngôn ngữ tự nhiên của nó), bạn có thể thấy không cần thiết phải tạo chúng trong Lua. Tuy nhiên, những người không cảm thấy thoải mái với C, cũng như những người đã thành thạo Lua, có thể thấy rằng kịch bản gọn nhẹ của Lua khiến việc tạo các bộ phân tích của họ trở nên dễ dàng hơn. Đúng là bạn phải đánh đổi thời gian tải lâu hơn khi chạy quy trình so với các công cụ phân tích dựa trên C, nhưng sẽ rất hữu ích nếu có tùy chọn này.

Như đã nói, chúng tôi muốn nghe từ bạn. Bạn có thường xuyên sử dụng công cụ mổ xẻ trong Wireshark không? Bạn đã từng thử tạo chúng trong C trước đây chưa và bạn nghĩ việc tạo các bộ phân tích trong Lua mang lại lợi ích gì? Cho chúng tôi biết trong phần ý kiến ​​dưới đây.

Bài ViếT Thú Vị

Editor Choice

Cách bắn khi đang lái xe trong PubG
Cách bắn khi đang lái xe trong PubG
Ngoài những pha bắn trúng đầu sạch sẽ và những pha giết người bằng vụ nổ vui nhộn, rất ít thứ khiến bạn hài lòng hơn là một màn bắn súng trong PUBG. Vào năm 2020, khả năng bắn trong khi lái xe đã được thêm vào trò chơi, cho phép người lái xe tự vệ trước kẻ thù
Cách chơi Minecraft Bedrock trên PC
Cách chơi Minecraft Bedrock trên PC
Phiên bản Minecraft Bedrock cho phép bạn sử dụng PC, Xbox, PS4 và điện thoại di động để chơi trò chơi này. Không chỉ vậy, bạn còn có thể chơi Minecraft Bedrock trên PC bằng bộ điều khiển Xbox hoặc PS4. Bạn sẽ chỉ có
Các phím tắt trong WhatsApp cho Máy tính để bàn
Các phím tắt trong WhatsApp cho Máy tính để bàn
Các nhà phát triển WhatsApp đã phát hành phiên bản máy tính để bàn được chờ đợi từ lâu của Messenger phổ biến. Dưới đây là danh sách các phím tắt của nó.
Đặt lại cài đặt mạng để làm gì?
Đặt lại cài đặt mạng để làm gì?
Wi-Fi của bạn có bị ngắt kết nối thường xuyên không? Wi-Fi của bạn có chạy chậm hơn trước đây không? VPN của bạn không kết nối được? Tất cả những vấn đề này và nhiều vấn đề khác có thể được giải quyết bằng cách đặt lại đơn giản cài đặt mạng của bạn trên
Cách ghim các tiện ích mở rộng vào thanh trong Chrome
Cách ghim các tiện ích mở rộng vào thanh trong Chrome
Với việc các tiện ích mở rộng mới của Chrome luôn được phát hành, người ta có thể dễ dàng kết thúc với một bộ sưu tập phong phú, một thanh công cụ lộn xộn và khó định vị một tiện ích mở rộng một cách nhanh chóng. May mắn thay, Chrome đã đưa ra một cách để giải quyết vấn đề này bằng các tiện ích mở rộng mã pin của họ
Cách xem video bị hạn chế trên YouTube mà không cần đăng nhập hoặc proxy
Cách xem video bị hạn chế trên YouTube mà không cần đăng nhập hoặc proxy
Đôi khi, khi bạn muốn xem một video trên YouTube, nó sẽ yêu cầu bạn đăng nhập để tiếp tục. Dưới đây là cách nhanh chóng vượt qua các hạn chế này và xem video.
Cách làm mờ nền trong Google Meet
Cách làm mờ nền trong Google Meet
Google Meet có một tính năng tiện lợi cho phép bạn thay đổi nền trong cuộc gọi điện video của mình. Nó có thể hữu ích cho những cuộc họp vào sáng sớm khi bạn không có thời gian để dọn dẹp phòng. Các