2012-07-12 44 views
1

您可以使用wireshark從udp數據包複製字節數據。 wireshark解析「字節(偏移十六進制文本)」

它產生這樣

00f00: 21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 !....../[email protected] 
00f09: 21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 !....../[email protected] 
00f10: 2c b3 bd a2          ,... 

數據如何,我可以得到的所有字節,從這段文字表陣列(21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 2c b3 bd a2),使用PHP 正則表達式? (從每行成字節單一的PHP陣列,甚至更好爲

我需要解析不僅Wireshark的數據(所以大約字節的建議(偏移十六進制)不工作)

+1

一行包含16個字節,對吧?使用'strpos'和'substr'似乎是一種簡單的方法,如果是這樣的話 – 2012-07-12 18:25:22

+0

爲什麼不使用'Copy' - >'Bytes(Hex Stream)'選項? – Bergi 2012-07-12 19:20:02

+0

從例子中你可以看到,它並不總是16個字節,它可以是1到16個字節。和「字節(十六進制流)」不工作,因爲我需要從其他程序解析類似的表。 – Fedcomp 2012-07-12 22:14:15

回答

2

我想一個簡單的解決辦法是字符串操作用一個簡單的正則表達式相結合,就像這樣:

$output = ''; 
foreach(explode("\n", $input) as $line) { 
    if(preg_match('/(?:[a-f0-9]{2}\s){1,16}/i', $line, $matches)) { 
     $output .= ' ' . $matches[0]; 
    } 
} 

$output = trim($output); 
var_dump($output); 

outputs

string(109) "21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 2c b3 bd a2" 
+0

對不起,但這隻需要從每行的第一個字節 – Fedcomp 2012-07-12 22:13:11

+0

@Fedcomp - 不是根據我的演示,它將您的輸入準確,並用它來解析十六進制字節。您必須將您的問題更新爲失敗的輸入案例才能解決問題。 – nickb 2012-07-13 12:21:45