2012-07-12 2 views
1

wireshark를 사용하여 udp 패킷의 바이트 데이터를 복사 할 수 있습니다. wireshark"Bytes (Offset Hex text)"

그리고이

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          ,... 

같은 데이터를 생성 내가 어떻게 PHP는 정규식를 사용하여,이 텍스트 테이블의 배열 (21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 2c b3 bd a2)의 모든 바이트를받을 수 있나요? (작동하지 않는 때문에 바이트에 대한 제안 (16 진수 오프셋))

(바이트의 단일 PHP 배열로 모든 라인에서, 또는 더 나은 문자열에) 내가

+1

라인에 정확히 16 바이트가 포함되어 있습니까? 'strpos'와'substr'을 사용하면 훨씬 간단합니다. –

+0

'Copy' ->'Bytes (Hex Stream)'옵션을 사용하지 않으시겠습니까? – Bergi

+0

예제에서 볼 수 있듯이 항상 16 바이트가 아니며 1에서 16 바이트가 될 수 있습니다. 그리고 "다른 프로그램에서 비슷한 테이블을 구문 분석해야하기 때문에"바이트 (16 진수 스트림) "작동하지 않습니다. – Fedcomp

답변

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

+0

@Fedcomp - 입력 한 내용을 정확히 받아서 16 진수 바이트를 구문 분석하는 데 사용하지 않습니다. 문제를 해결하기 위해 입력 케이스에 질문을 업데이트해야합니다. – nickb