Saya memiliki data berikut dan saya dapat memiliki 3 kasus berbeda:

Kasus 1:

"afield1" : "something1", "credentials" : [] , "afield2" : "something2" 

Kasus 2:

"afield1" : "something1", "credentials" : [ ["root", "toor"] ] , "afield2" = "something2"

Kasus 3:

"afield1" : "something1", "credentials" : [ [ "admin", "support" ], [
"admin", "password" ], [ "admin", "123321" ] ] , "afield2" : "something2"

Bagaimana saya bisa mendapatkan nama pengguna dan kata sandi?

Sunting:

Saya menemukan cara konyol untuk kasus pertama.. Tetapi yang lain sangat sesuai.. Itu tidak dapat diledakkan baik pada koma (,) atau braket ([ ]) ... Bantuan jika ada yang tahu cara meledak yang benar atau dapatkan nilai dari hal itu...

0
J doe 26 Juli 2016, 21:03
Gunakan array asosiatif dengan pemisahan string
 – 
Marko Mackic
26 Juli 2016, 21:06
Jika saya akan meledak pada koma (,) atau braket ([ ]) itu tidak akan berfungsi. Saya tidak yakin apakah saya mengerti maksud Anda. maaf @MarkoMackic
 – 
J doe
26 Juli 2016, 21:07
Format ini agak aneh, dari mana asalnya? Sepertinya sebagian diubah json
 – 
u_mulder
26 Juli 2016, 21:09
Anda benar, Anda harus memikirkan cara lain untuk menguraikannya
 – 
Marko Mackic
26 Juli 2016, 21:10
Itu dari json, memang. Sebenarnya ini adalah log dari Kippo honeypot dan saya perlu menganalisis hal itu....
 – 
J doe
26 Juli 2016, 21:13

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan fungsi preg_match dan preg_match_all seperti dalam kode ini

$credentials = [];

$text = '"afield1" = "something1", "credentials" : [ [ "admin", "support" ], ["admin", "pass]word" ], [ "admin", "123321" ] ] , "afield2" = "something2"';

preg_match('/"credentials" : \[(.*?)\] ,/i', $text, $matches);
preg_match_all('/\[[ ]?"(.*?)"[ ]?\]/i', $matches[1], $matches2);

foreach ($matches2[1] as $match) {
    preg_match_all('/"(.*?)"/i', '"' . $match . '"', $matches3);

    $credential = ['login' => $matches3[1][0], 'password' => $matches3[1][1]];
    $credentials[] = $credential;
}

var_dump($credentials);

Pada ouptut Anda dapat melihat

array(3) {
  [0]=>
  array(2) {
    ["login"]=>
    string(5) "admin"
    ["password"]=>
    string(7) "support"
  }
  [1]=>
  array(2) {
    ["login"]=>
    string(5) "admin"
    ["password"]=>
    string(8) "pass]word"
  }
  [2]=>
  array(2) {
    ["login"]=>
    string(5) "admin"
    ["password"]=>
    string(6) "123321"
  }
}

Kode ini berfungsi dengan benar untuk sampel lain dari pertanyaan Anda.

0
zajonc 26 Juli 2016, 22:20
Namun, kode inti yang jauh lebih keras dapat dipecah menjadi beberapa bagian karena afield2 selalu ada di sana.. Jadi, jika Anda meledakkan 3 bagian kredensial dan setelah itu meledak lagi dan lagi berdasarkan ],[ dan [ dan ] itu akan bekerja juga.
 – 
J doe
27 Juli 2016, 01:03
Atau Anda bisa menggunakan json_decode seperti yang telah ditunjukkan beberapa kali.
 – 
Sean Bright
27 Juli 2016, 18:27