2008-10-10 16 views
5

Tôi làm việc rất nhiều với các liên lạc nối tiếp với nhiều loại thiết bị, và vì vậy tôi thường phải phân tích các ổ đĩa hex trong các tệp nhật ký. Hiện tại, tôi làm điều này bằng tay bằng cách nhìn vào các bãi, xem thông số giao thức và ghi lại kết quả. Tuy nhiên, điều này là tẻ nhạt và dễ bị lỗi, đặc biệt là các tin nhắn whem chứa hàng trăm byte và chứa hỗn hợp dữ liệu lớn cuối và nhỏ, ASCII, Unicode, nén, CRC,. . . .Bất kỳ tiện ích chung hoặc thư viện nào để chuyển đổi các khối Hex thành dạng có thể đọc được bằng con người?

Tôi đã viết một vài tập lệnh Python để hỗ trợ các trường hợp phổ biến hơn. Nhưng có rất nhiều giao thức để giải quyết, và nó không có ý nghĩa để dành thời gian viết một kịch bản tùy chỉnh trừ khi tôi biết tôi sẽ có rất nhiều bãi để phân tích.

Điều tôi muốn là một số loại tiện ích có thể tự động hóa hoạt động này. Vì vậy, ví dụ, nếu tôi có một văn bản hex đổ như thế này:

7e ff 00 7b 00 13 86 04 
00 41 42 43 44 56 ef 7e 

và một số loại mô tả về các định dạng tin nhắn, như thế này:

# Field   Size  Byte Order Output Format 
Flag   1      hex 
Address   1      hex 
Control   1      hex 
DataType  1      decimal 
LineIndex  1      decimal 
PollAddress  2   msb   hex 
DataSize  2   lsb   decimal 
Data   (DataSize)    ascii 
CRC    2   lsb   hex 
Flag   1      hex 

Tôi muốn nhận được kết quả như thế này:

Flag   0x7e 
Address   0xff 
Control   0x00 
DataType  123 
LineIndex  0 
PollAddress  0x1386 
DataSize  4 
Data   "ABCD" 
CRC    0xef56 
Flag   0x7e 

Máy phân tích giao thức dựa trên phần cứng thường có các tính năng ưa thích để thực hiện loại này, nhưng tôi cần làm việc với tệp nhật ký văn bản.

Hiện có bất kỳ tiện ích hoặc thư viện nào như vậy không?


Một số câu trả lời hay đã xuất hiện kể từ khi tôi thiết lập tiền thưởng. Tôi đoán tiền thưởng hoạt động!

Wireshark và HexEdit đều trông đầy hứa hẹn; Tôi sẽ xem xét những thứ đó, và sẽ có thể tặng thưởng tiền thưởng cho bất cứ ai phù hợp với nhu cầu của tôi. Nhưng tôi vẫn mở cho những ý tưởng khác.

Trả lời

2

Wireshark là khá tốt tại các giao thức mạng mở.

+0

Wireshark có thể phân tích một kết xuất hex từ tệp nhật ký văn bản hay chỉ nội dung mà nó tự chụp? –

+0

Wireshark thường hy vọng mọi thứ ở định dạng PCAP. Tuy nhiên, việc gói những thứ trong định dạng kết xuất PCAP không phải là rất phức tạp (ít nhất cũng không phải là rất khó để viết một trình đọc kết xuất PCAP). – Vatine

0

Tôi khá chắc chắn tôi đã thấy một cái gì đó tương tự như vậy trên CPAN. Tôi có thể mơ hồ hơn nếu bạn thích. :-)

Cập nhật: Đó không phải là chính xác những gì bạn muốn, nhưng có một cái nhìn tại Parse::Binary::FixedFormat

+0

Uh-oh, có vẻ như bài đăng tiền thưởng của tôi đã tăng xếp hạng âm cho câu trả lời này. –

+0

Nó đã đi xuống một sau khi bạn đăng các bounty, nhưng điều đó làm cho tôi đăng cập nhật, và sau đó nó đã đi lên một, vì vậy tôi là net tích cực trên đại diện. –

1

Thông thường, tôi sử dụng chế độ emls hexl để xem tệp nhị phân dưới dạng "văn bản đổ". Khi tôi cần đầu ra cụ thể hơn, tôi chỉ làm như bạn và viết một trình phân tích cú pháp trong C++.

1

Trong công việc của mình, chúng tôi đã thiết kế giao thức mạng và nối tiếp để điều khiển phần cứng được nhúng. Tôi cũng cảm thấy mệt mỏi khi đọc các bãi sai, và viết các kịch bản cho mỗi giao thức, vì vậy tôi đã viết một thư viện để làm chính xác những gì bạn mô tả. Bạn có thể cung cấp cho nó một mô tả tệp văn bản của giao thức và có hộp kiểm hỗ trợ gui để thiết lập các bit đơn, nút radio để chọn giữa các kết hợp hợp lệ bit và danh sách thả xuống khi có nhiều lựa chọn. Bạn có thể chỉnh sửa chế độ xem hex của dữ liệu, chế độ xem nhị phân của từng trường hoặc thậm chí là điểm và nhấp vào các trường và tất cả các chế độ xem khác sẽ cập nhật. Nó đã cứu chúng ta rất nhiều thời gian. Đó là một chút nhanh chóng và bẩn, nhưng tôi sẽ đăng nó nếu nó không được sở hữu bởi chủ nhân của tôi. Vấn đề là, nó không phải là rất khó để viết, và một khi tôi đã đi từ kịch bản cho mỗi giao thức và một chương trình mà có thể hiểu được một mô tả về giao thức, mọi thứ đều tuyệt vời. Chúng tôi đã ngừng các lỗi liên quan đến việc hiểu sai một bãi chứa và việc thêm các giao thức mới trở nên tầm thường.Cộng với mô tả văn bản của giao thức đi thẳng vào các thông số phát triển để các phần mềm sẽ biết phải làm gì với phần cứng. Tôi khuyến khích bạn có một vết nứt ở đó.

2

Tôi cho rằng bạn cần trình chỉnh sửa hex tốt. Hãy xem hexedit. Tôi đã sử dụng phiên bản miễn phí trong quá khứ và nó là tốt, nhưng tôi không biết nếu nó cung cấp những gì bạn đang tìm kiếm. Về cơ bản bạn muốn có thể xác định một cấu trúc và sau đó có thể giải mã dữ liệu hex chống lại nó. Tôi cho rằng một trình soạn thảo hex tốt sẽ hỗ trợ điều này. Kiểm tra phiên bản trả tiền của HexEdit hoặc google cho một trình soạn thảo khác; có rất nhiều.

1

Một điểm xuất phát có thể là libPDL, thư viện C++.

Tùy chọn khác có thể là NetPDL.

1

Bạn nên sử dụng các lệnh Tcl binary cho các nội dung như thế này. Điểm sau là điểm bắt đầu cho ví dụ của bạn ở trên. Tcl thực sự dễ dàng để tìm hiểu và viết kịch bản. Nếu bạn đang làm công cụ nối tiếp, bạn nợ nó cho chính mình để tìm hiểu ít nhất những điều cơ bản.

bash$ tclsh 
% binary scan [binary format H* 7eff007b00138604004142434456ef7e] \ 
    H2H2H2ccH4sa4h4H2 \ 
    flag1 addr ctl datatype lineidx polladdr datasize data crc flag2 
10 
% puts "$flag1 $addr $ctl $datatype $lineidx \ 
    $polladdr $datasize $data $crc $flag2" 
7e ff 00 123 0 1386 4 ABCD 65fe 7e 

Khi bạn đã thực hiện thứ tự byte của mình, bạn đã chuyển đổi byte nhưng không phải bit, vì vậy tôi không thực sự chắc chắn bạn đang tìm gì ở đó. Dù sao, điều này sẽ giúp bạn bắt đầu.

1

Có một cái nhìn tại hexworkshop

Tôi đã sử dụng nó trong nhiều năm để phân tích bãi hex. Nó có Trình xem cấu trúc cho phép bạn xác định cấu trúc dữ liệu theo kiểu C/C++ và sau đó hiển thị dữ liệu ở định dạng đó.

0

Có tiện ích dòng lệnh BSD được gọi là hexdump thực hiện điều này thông qua việc sử dụng chuỗi định dạng (có thể nằm trong tệp bên ngoài). Xem https://www.suse.com/communities/blog/making-sense-hexdump/ để biết phần giới thiệu và ví dụ: https://www.freebsd.org/cgi/man.cgi?query=hexdump&sektion=1 cho trang hướng dẫn sử dụng (đặc biệt chú ý đến các tùy chọn -e-f và phần có tiêu đề Định dạng).

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