2016-03-25 11 views
0

Ok, Bu yüzden bir şekilde bu paketi bir şekilde daha güzel bir formata dönüştürdüğümü biliyorum, fakat dürüstçe nasıl ve ne yapacağımı bilmiyorum. Anlamak kolay bir açıklama bulmak, temelde socket_connect kullanarak bağlanıyorum, hepsi iyi ve zeki. Göndermeye çalıştığım paketi simüle etmek için paket paketleyici kullandım ve temel olarak kopyalayıp yapıştırdım. Bu kod, temelde socket_read'e ulaştığında donuyor, çünkü sunucu gönderdiğim veriyi kaydetmiyor, dolayısıyla hiçbir şey geri göndermiyor. Çizgiler boyunca "pack()" PHP işlevini kullanmam gerektiğini düşünüyorum, ancak belgeler benim için hiçbir anlam ifade etmiyor ve bu noktada kayboldum.Bu paketin PHP'de sunucuya nasıl doğru bir şekilde gönderileceğini öğrenmek için socket_write

İşte ben kod:

// this is the packet I want to send 
$data = 
'ff 50 3a 00 00 00 00 00 36 38 58 49 50 58 32 44 .P:..... 68XIPX2D 
0c 00 00 00 53 55 6e 65 55 b4 4a c9 88 ff ff ff ....SUne U.J..... 
09 04 00 00 09 04 00 00 55 53 41 00 55 6e 69 74 ........ USA.Unit 
65 64 20 53 74 61 74 65 73 00     ed State s.'; 

// i try writing it to the server, and it doesn't throw any error for me so seems to send it fine 
socket_write($socket, $data, strlen($data)); 

// then the server says nothing back, so it seems to just sit idle at this part 
print(socket_read($socket, 2048)); 

Herhangi bir yardım çok takdir, teşekkürler!

+0

Paket dinleyiciniz, aynı verileri 2 biçimde sunar: Onaltılı ve Dize. Sol kısım hexa, sağdaki String. Her bir hexa satırı için, önde ilgili String formatı vardır. Yani, 'verilerinizde', paketleriniz çoğaltılır VE karıştırılır. Bu verilerin ne olduğunu bilmeden, paket sniffer'ınızın çıktısını kopyalayamaz/yapıştıramazsınız (yani, hexa veya string parçasının hangi elemanlarına ihtiyacınız olduğunu). – jhamon

+0

Örneğimde, 4 satırlık veri var, bunun anlamı şu şekilde gönderebilirim: '$ data = 'ff503a00000000003638584950583244'. '0c00000053556e6555b44ac988ffffff'. '090400000904000055534100556e6974'. '65642053746174657300'; $ binary = hex2bin ($ data); socket_write ($ soket, $ binary, strlen ($ data)); ? –

+0

Anlamakta zorlandıklarım, sunucunun her zaman ikili bekleyip beklememesi ya da sunucu her zaman onaltılık bir süre beklemesidir. Ve her iki durumda da, PHP'de sunucuya gönderilen çok satırlı hex'in hiçbir örneğini bulamıyorum, bu her zaman bazı kısa tek satırlık hex'tir, bir kerede çok sayıda satır göndermem gerekiyor. –

cevap

0

Bazı hex editör içeriğini $data'a yapıştırdığınız anlaşılıyor. Aslında verilerinizin bir kopyası var. Her satırın sol tarafında, onaltılı olarak verileriniz bulunur, sağda ise bu değerlerin ASCII yorumuna sahip olursunuz.

Şimdiye kadar, $data'da neleri var, paket olarak kesinlikle hiçbir anlamı olmayan bir dizedir.

Bu bayt byte (ff sonra 50 sonra 3a ...) göndermek istiyorsanız, bu durumda this question bakın.

+0

Bayt byte byte göndermeye çalışıyorum sanmıyorum, bu gibi olması gerekiyordu: (DWORD) Protokol Kimliği (0) (DWORD) Platform kimliği (DWORD) Ürün kimliği (DWORD) Sürüm Byte (DWORD) Ürün dil * (DWORD) NAT uyumluluk için Yerel IP * (DWORD) Saat dilimi yanlılığı * (DWORD) Yerel Ayar kimliği * (DWORD) Dil ID * (STRING) Ülke kısaltması (STRING) Ülke –

İlgili konular