2014-02-21 127 views
0

我想寫一個tcp服務器從鄰近908 GPS跟蹤器獲取數據。從跟蹤器建立連接後,我得到以下緩衝區輸出。如何解碼TCP緩衝區數據

<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a> 

我不知道如何將這些數據解碼爲適當的可讀格式。

注:當然,我試圖達到製造,但他們沒有響應。

TCP協議有哪些可能的編碼格式?

在第二天,我得到的數據是這樣

<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 
<Buffer 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a> 

<Buffer 78 78 1f 12 0e 02 14 13 01 14 c8 03 5f a6 50 07 f7 f8 c1 32 35 39 01 9a 04 0f a2 00 b0 5a 00 1a 9b 7a 0d 0a> 
<Buffer 78 78 1f 12 0e 02 14 13 01 1e c8 03 5f ad bc 07 f7 f0 76 41 35 40 01 9a 04 0f a2 00 b0 5a 00 1b b6 31 0d 0a> 

東西正在被改變,但不知道它是什麼...

+0

從廠商的PDF(http://www.heacent.com/download/Heacent %20gps%20munual(908).pdf)我想你問的是用於「在線實時跟蹤」的協議,他們建議你使用自己的服務。所以你想編寫自己的服務器來接受來自這個設備的數據,而不是使用製造商的服務,對嗎? –

+0

是的正確!我想用我自己的個人用途! – coure2011

+0

好的。他們還發布了一份協議指南,但不清楚它是否解釋了您上面寫的內容:http://www.heacent.com/download%5CGPS%20protocol(Heacent).pdf –

回答

5

你問什麼可能的編碼格式有用於TCP。這有些奇怪的問題:使用TCP作爲基礎協議的編碼格式數量無限。但不管怎麼樣,我們都可以嘗試弄清楚這一點!

您已經發布了一些示例消息。讓我們來看看,如果我們可以翻譯它們:

byte 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
rev 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 
---------------------------------------------------------- 
hex 78 78 0d 01 03 87 11 31 20 86 48 42 00 06 64 be 0d 0a 
text x x \r -- -- -- -- 1 -- H B -- -- d -- \r \n 
dec  13 1 3 17     0 6 100 13 10 
be32  [218170247] [288432262]  [ 419006] 
---------------------------------------------------------- 
hex 78 78 0d 01 03 87 11 31 20 86 48 42 00 07 75 37 0d 0a 
text          -- u 7 
dec           7 117 55 
be32          [ 488759] 
---------------------------------------------------------- 
hex 78 78 0d 01 03 87 11 31 20 86 48 42 00 08 8d c0 0d 0a 
text          -- -- -- 
dec           8 141 
be32          [ 560576] 
----------------------------------------------------- byte 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 
hex 78 78 1f 12 0e 02 14 13 01 14 c8 03 5f a6 50 07 f7 f8 c1 32 35 39 01 9a 04 0f a2 00 b0 5a 00 1a 9b 7a 0d 0a 
text  -- -- -- -- -- -- -- -- -- -- _ -- P -- -- -- -- 2 5 9 -- -- -- -- -- -- -- -- -- xx -- z \r \n 
---------------------------------------------------------- 
hex 78 78 1f 12 0e 02 14 13 01 1e c8 03 5f ad bc 07 f7 f0 76 41 35 40 01 9a 04 0f a2 00 b0 5a 00 1b b6 31 0d 0a 
text           --  -- -- A 5 @       -- xx -- 1 

一些潛在的有趣的事實:

  • 開始以「XX \ r \ 01」這或多或少似乎是一個可能的標題。但後來的消息以「xx」和其他內容開頭。無論如何,鑑於NMEA有一個「GP」的前綴,如果這些設備使用「xx」作爲「不是NMEA的東西」,我不會感到震驚。
  • 中間有「HB」,這可能意味着「心跳」,因爲這是重複的,也許等待服務器的回覆。
  • 以「\ r \ n」結尾(通常在Windows上),儘管其餘部分看起來並不完全是文本。
  • 較早的消息長度爲18個字節,後面的消息長度爲36個字節。一個猜測是短的是狀態更新或心跳,而長的是實際的位置信息。 36個字節是不夠的,如果我們的數字:
    • 4字節緯度:如果你捏(see)24位,25-32位更容易
    • 4字節經度:同緯度
    • 6字節的時間戳:39比特,如果採用劃時代時間釐秒,32/48/64位更容易
    • 2字節高度:我懷疑這個設備不公佈海拔高度在所有的,給予一定的文檔的

所以我認爲發生的事情是你看到的這些消息只是設備「ping」服務器並等待響應。什麼樣的迴應?那麼,你可以試圖強制它,但更容易的是在你的程序中建立一個橋樑,它將從設備接收到的任何東西,發送到製造商的服務器,然後做相反的事情對設備的響應。通過這種方式,您可以快速收集到有效消息的語料庫,如果我們確實需要對此進行逆向工程,這將非常有用。或者,如果你幸運的話它會變成初始會話協商後,使用一些標準協議一樣NMEA

編輯:現在你已經給了我們從設備的更多消息,我們可以看到,它似乎發送別的可變內容。也許這就是位置數據,但我現在沒有時間嘗試對其進行反向工程。一種想法是物理單位從西向東移動或南北捕捉它在這段時間內發送郵件,試圖找出是哪個消息的部分是經度和它們的緯度(也許時間戳太)。

我認爲這是相當清楚的是,前兩個字節是「XX」爲標題,最後兩個是「\ r \ n」作爲終結。在較長的消息中留下32個字節的有效負載,所有這些都是二進制數據。

+0

man !!!爲什麼stackoverlow不允許upvote多次:)。非常感謝這次調查。你爲我提供了很多信息。將根據您的調查進行更多研究。 – coure2011