2011-06-30 34 views
9

Tôi đang trong quá trình phát triển một công cụ mạng có mục đích đặc biệt với một số khả năng giải mã và giải mã gói. Tôi đang tìm kiếm các ngôn ngữ được thiết kế để hỗ trợ việc giải mã/giải mã các định dạng gói tùy ý. Ý tưởng, giải pháp nên dựa trên các tiêu chuẩn mở. Có những câu hỏi liên quan đến SO, nhưng hầu hết đều giải quyết toàn bộ vòng đời của gói sniffing (Tôi không quan tâm nhiều đến việc chụp, có những thư viện khác làm tốt điều đó).Tìm kiếm ngôn ngữ mô tả gói (Tốt nhất là với triển khai A # C)

Nói chung, những gì tôi đang tìm kiếm là ngôn ngữ và khung hỗ trợ cho định nghĩa khai báo về định dạng gói và giải mã thời gian chạy tương ứng. Bởi vì vấn đề này có thể được khái quát hóa cho bất kỳ dữ liệu nhị phân không mạng nào, một giải pháp thực hiện điều này cho các luồng nhị phân tùy ý cũng sẽ nằm trong phạm vi. Tôi hơi ngạc nhiên khi không có tiêu chuẩn như vậy tồn tại ở trạng thái trưởng thành và mạnh mẽ (ít nhất là tôi có thể tìm thấy) - mặc dù dường như có rất nhiều dự án thú vị nhưng không hoàn toàn đúng và gần như có (xem bên dưới). Có lẽ điều đó nói lên khó khăn của vấn đề, hoặc có thể là do thiếu nhu cầu.

Bằng một ví dụ, tôi quan tâm đến công nghệ và ý tưởng tương tự như sau (không theo thứ tự đặc biệt):

  • Packet.Net - Liệu các công việc chuyển đổi từ cơ quan đại diện gói nhị phân cho các cấu trúc, nhưng các nhà phân tích đều được mã hóa cứng và dường như không thể xử lý các định dạng phức tạp hơn.
  • DFDL - Tôi đã theo dõi vấn đề này một thời gian và thậm chí còn tham gia teleconferences một năm trước đây. Tiêu chuẩn này dường như đạt đến sự trưởng thành, nhưng việc thực hiện dường như là một thách thức. Không phải là tôi nhớ bị bẩn tay, nhưng tôi không chắc là mình có đủ nguồn lực cho dự án này để thực hiện một tiêu chuẩn có phạm vi rộng từ đầu cho mục đích này.
  • Network Monitor Open Source Parsers - Dự án này mô tả các gói bằng cách sử dụng cú pháp giống như C để sử dụng bởi Microsoft Network Monitor. Nó có rất nhiều gói đã được xác định và ngôn ngữ xuất hiện đủ mạnh để hỗ trợ các cấu trúc phức tạp. Thật không may, việc triển khai duy nhất của một công cụ thực thi là trong NetMon và trong khi ngữ pháp cho ngôn ngữ có thể được thiết kế ngược, việc triển khai một công cụ xử lý có thể rất khó khăn. Tôi cũng lo lắng vì ràng buộc rõ ràng giữa ngôn ngữ trình phân tích cú pháp và công cụ NetMon có những khía cạnh không chung chung đối với ngôn ngữ khiến nó không phù hợp để sử dụng trong các công cụ khác.
  • NetPDL - Cái này trông rất thú vị, nhưng phát triển dường như đã bị suy giảm. Nó cũng không hoàn toàn rõ ràng làm thế nào để sử dụng các công cụ thực hiện bên ngoài môi trường riêng của họ.
  • Wireshark Dissectors - Tôi đã nghĩ đến việc gói/sử dụng Wisseshark Dissectors cho mục đích này, nhưng chúng được gắn chặt chẽ với chính Wireshark. Các nhà giải phẫu cũng sử dụng mã để thực hiện hầu hết các giải mã, điều này là một chút phản đối với những gì tôi đang tìm kiếm - tôi muốn cái gì đó khai báo hơn một chút (mặc dù rõ ràng là có sự cân bằng vì cấu trúc gói phức tạp thường yêu cầu chuyển đổi và logic để xác định trang điểm cuối cùng).
  • BSDL - Ngôn ngữ học thuật tương tự khái niệm DFDL (xem ở trên). Thú vị và đúng hướng, nhưng bên ngoài của một vài giấy tờ không có gì khác dường như tồn tại.

Tôi không nhất thiết phải tìm giải pháp hoàn chỉnh ở đây (mặc dù nếu ai đó biết về giải pháp tôi chưa đề cập, điều đó sẽ tuyệt vời). Tôi quan tâm nhiều hơn đến các nhận xét hoặc giai thoại về các công nghệ mà tôi đã chỉ ra ở trên cũng như các gợi ý hoặc ý tưởng cho các tuyến đường mà tôi chưa từng nghĩ đến hoặc chưa được đề cập đến.

Trả lời

-1

Thử giao diện Winsock2 trong cửa sổ.Trong Windows XP (trước SP2), hoặc Windows Server biến thể bạn không có bất kỳ hạn chế như xa như tạo ổ cắm nguyên, kiểm tra các nội dung của gói, vv ...

+0

Điều này bỏ lỡ điểm của câu hỏi. –

0

Wireshark khung phân tích là rất mạnh mẽ. Vui lòng đọc một mô tả ở đây -

http://www.wireshark.org/docs/wsdg_html_chunked/ChapterDissection.html#ChDissectWorks

tôi phải giải quyết một vấn đề tương tự như của bạn. Đối với tôi, giao thức này phải là không thuyết phục về phương tiện thực tế của quá cảnh (chủ yếu là nó là udo hoặc đầu) nhưng trong quá trình thử nghiệm nó sẽ chỉ trong bộ nhớ ipc.

Vì vậy, tôi định nghĩa một giao thức một cách có cấu trúc sử dụng protobuf -

http://code.google.com/p/protobuf/

Và sau đó được xác định một người mổ xẻ bản thân mình một cái gì đó giống như nhưng không chính xác như thế nào - http://code.google.com/p/protobuf-wireshark/

Vì vậy, tôi có thể phân tích sử dụng trực tiếp trong phân tích bộ nhớ phân tích khi trong kiểm tra và wireshark dissection khi trên dây. Đã có rất nhiều mã tái sử dụng giữa bộ giải mã bộ nhớ và wireshark dissector tất nhiên là giao thức được định nghĩa agnostically bằng cách sử dụng protobuf.

Các vấn đề liên quan