@@ -12,6 +12,7 @@ if (!defined("AF_PACKET")) {
1212if (!function_exists ("posix_getuid " ) || posix_getuid () != 0 ) {
1313 die ('SKIP AF_PACKET requires root permissions. ' );
1414}
15+ if (PHP_INT_SIZE != 4 ) die ("skip this test is for 32-bit only " );
1516?>
1617--FILE--
1718<?php
@@ -33,351 +34,20 @@ if (!function_exists("posix_getuid") || posix_getuid() != 0) {
3334 $ buf = pack ("H12H12n " , "ffffffffffff " , "000000000000 " , ETH_P_LOOP );
3435 $ buf .= str_repeat ("A " , 46 );
3536
36- var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
37- var_dump (socket_recvfrom ($ s_c , $ rsp , strlen ($ buf ), 0 , $ addr ));
38-
39- var_dump ($ addr );
40- var_dump ($ rsp );
41-
42- socket_close ($ s_c );
43- // purposely unsupported ethernet protocol (ARP)
44-
45- $ s_c = socket_create (AF_PACKET , SOCK_RAW , 0x0806 );
46- $ s_bind = socket_bind ($ s_c , 'lo ' );
47- $ buf = pack ("H12H12n " , "ffffffffffff " , "000000000000 " , 0x0806 );
48- $ buf .= str_repeat ("A " , 46 );
49-
5037 var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
5138
52- try {
53- socket_recvfrom ($ s_c , $ rsp2 , strlen ($ buf ), 0 , $ addr2 );
54- } catch (\ValueError $ e ) {
55- echo $ e ->getMessage (), PHP_EOL ;
56- }
57-
58- socket_close ($ s_c );
59- socket_close ($ s_s );
60-
61- $ s_c = socket_create (AF_PACKET , SOCK_RAW , ETH_P_ALL );
62- $ s_bind = socket_bind ($ s_c , 'lo ' );
63-
64- $ s_s = socket_create (AF_PACKET , SOCK_RAW , ETH_P_IP );
65- $ v_bind = socket_bind ($ s_s , 'lo ' );
66-
67- $ ip = hex2bin (
68- "4500 " .
69- "0028 " .
70- "0000 " .
71- "4000 " .
72- "4006 " .
73- "0000 " .
74- "7f000001 " .
75- "7f000001 "
76- );
77- $ p = str_repeat ("A " , 20 );
78-
79- $ buf = pack ("H12H12n " , "ffffffffffff " , "000000000000 " , ETH_P_IP );
80- $ buf .= $ ip . $ p ;
81-
82- $ min_frame_size = 60 ;
83- $ buf .= str_repeat ("\x00" , max (0 , $ min_frame_size - strlen ($ buf )));
84-
85- var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
86- var_dump (socket_recvfrom ($ s_c , $ rsp , strlen ($ buf ), 0 , $ addr ));
87-
88- var_dump ($ addr );
89- var_dump ($ rsp );
90-
91- socket_close ($ s_s );
92- socket_close ($ s_c );
93-
94- $ s_c = socket_create (AF_PACKET , SOCK_RAW , ETH_P_IPV6 );
95- $ s_bind = socket_bind ($ s_c , 'lo ' );
96- $ s_s = socket_create (AF_PACKET , SOCK_RAW , ETH_P_IPV6 );
97- $ v_bind = socket_bind ($ s_s , 'lo ' );
98-
99- $ ethhdr = pack ("H12H12n " , "ffffffffffff " , "000000000000 " , ETH_P_IPV6 );
100-
101- $ ipv6_first_4 = hex2bin ("60000000 " );
102-
103- $ ipv6_payload_len = hex2bin ("0014 " );
104-
105- $ ipv6_nexthdr = chr (6 );
106-
107- $ ipv6_hop_limit = chr (64 );
108-
109- $ src_ip = hex2bin ("00000000000000000000000000000001 " );
110-
111- $ dst_ip = hex2bin ("00000000000000000000000000000001 " );
112-
113- $ tcp_hdr = pack ("nnNNCCnn " ,
114- 12345 ,
115- 80 ,
116- 0 ,
117- 0 ,
118- (5 << 4 ),
119- 0x02 ,
120- 65535 ,
121- 0
122- );
123-
124- $ buf = $ ethhdr
125- . $ ipv6_first_4
126- . $ ipv6_payload_len
127- . $ ipv6_nexthdr
128- . $ ipv6_hop_limit
129- . $ src_ip
130- . $ dst_ip
131- . $ tcp_hdr ;
132-
133- $ buf .= str_repeat ("\x00" , max (0 , 60 - strlen ($ buf )));
134-
135- var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
136- var_dump (socket_recvfrom ($ s_c , $ rsp , strlen ($ buf ), 0 , $ addr ));
137-
138- var_dump ($ addr );
139- var_dump ($ rsp );
140-
141- $ first_4_bytes = hex2bin ("60000000 " );
142-
143- $ payload_len = hex2bin ("0014 " );
144-
145- $ nexthdr = hex2bin ("43 " ); // Extended proto
146-
147- $ hop_limit = hex2bin ("40 " );
148-
149- $ src_ip = hex2bin ("00000000000000000000000000000001 " );
150-
151- $ dst_ip = hex2bin ("00000000000000000000000000000001 " );
152-
153- $ tcp_payload = str_repeat ("A " , 20 );
154-
155- $ ethhdr = pack ("H12H12n " , "ffffffffffff " , "000000000000 " , ETH_P_IPV6 );
156-
157- $ buf = $ ethhdr . $ first_4_bytes . $ payload_len . $ nexthdr . $ hop_limit . $ src_ip . $ dst_ip . $ tcp_payload ;
158-
159- $ buf .= str_repeat ("\x00" , max (0 , 60 - strlen ($ buf )));
160-
161- var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
162-
16339 try {
16440 socket_recvfrom ($ s_c , $ rsp , strlen ($ buf ), 0 , $ addr );
165- } catch (\ValueError $ e ) {
166- echo $ e ->getMessage (), PHP_EOL ;
41+ } catch (\ValueError $ e ) {
42+ echo $ e ->getMessage (), PHP_EOL ;
16743 }
16844
16945 socket_close ($ s_s );
17046 socket_close ($ s_c );
171-
172- $ s_c = socket_create (AF_PACKET , SOCK_RAW , ETH_P_IP );
173- $ s_bind = socket_bind ($ s_c , 'lo ' );
174-
175- $ s_s = socket_create (AF_PACKET , SOCK_RAW , ETH_P_IP );
176- $ v_bind = socket_bind ($ s_s , 'lo ' );
177-
178- $ ip = hex2bin (
179- "4500 " .
180- str_repeat ("0028 " , 16 ) .
181- "0000 " .
182- "4000 " .
183- "4006 " .
184- "0000 " .
185- "7f000001 " .
186- "7f000001 "
187- );
188- $ p = str_repeat ("A " , 20 );
189-
190- $ buf = pack ("H12H12n " , "ffffffffffff " , "000000000000 " , ETH_P_IP );
191- $ buf .= $ ip . $ p ;
192-
193- $ min_frame_size = 60 ;
194- $ buf .= str_repeat ("\x00" , max (0 , $ min_frame_size - strlen ($ buf )));
195-
196- var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
197-
198- try {
199- socket_recvfrom ($ s_c , $ rsp , strlen ($ buf ), 0 , $ addr );
200- } catch (\ValueError $ e ) {
201- echo $ e ->getMessage (), PHP_EOL ;
202- }
203-
204- $ ip = hex2bin (
205- "9999 " .
206- "0028 " .
207- "0000 " .
208- "4000 " .
209- "4006 " .
210- "0000 " .
211- "FFFFFeFF " .
212- "7f000001 "
213- );
214- $ p = str_repeat ("Bb " , 80 );
215-
216- $ buf = pack ("H12H12n " , "ffffffffffffh " , "aaaaaAAAAAAA " , ETH_P_IP );
217- $ buf .= $ ip . $ p ;
218-
219- $ min_frame_size = 60 ;
220- $ buf .= str_repeat ("\x00" , max (0 , $ min_frame_size - strlen ($ buf )));
221-
222- var_dump (socket_sendto ($ s_s , $ buf , strlen ($ buf ), 0 , "lo " , 1 ));
223- var_dump (socket_recvfrom ($ s_c , $ rsp , strlen ($ buf ), 0 , $ addr ));
224-
225- var_dump ($ addr );
226- var_dump ($ rsp );
227-
228- socket_close ($ s_s );
229- socket_close ($ s_c );
23047?>
23148--EXPECTF--
23249bool(true)
23350bool(true)
23451string(2) "lo"
235- int(%i)
236-
237- Warning: socket_getpeername(): unable to retrieve peer name [95]: %sot supported in %s on line %d
238- int(60)
239- int(60)
240- string(2) "lo"
241- object(Socket\EthernetPacket)#3 (%d) {
242- ["headerSize"]=>
243- int(%d)
244- ["rawPacket"]=>
245- string(%d) "%r(.|\n)*?"%r
246- ["socket"]=>
247- object(Socket)#1 (0) {
248- }
249- ["ethProtocol"]=>
250- int(%i)
251- ["srcMac"]=>
252- string(%d) "%s:%s:%s:%s:%s:%s"
253- ["dstMac"]=>
254- string(%d) "%s:%s:%s:%s:%s:%s"
255- ["payload"]=>
256- %a
257- }
258- int(60)
259- unsupported ethernet protocol
260- int(60)
261- int(%d)
262- string(2) "lo"
263- object(Socket\EthernetPacket)#2 (7) {
264- ["headerSize"]=>
265- int(14)
266- ["rawPacket"]=>
267- string(%d) "%r(.|\n)*?"%r
268- ["socket"]=>
269- object(Socket)#%d (0) {
270- }
271- ["ethProtocol"]=>
272- int(%d)
273- ["srcMac"]=>
274- string(%d) "%s:%s:%s:%s:%s:%s"
275- ["dstMac"]=>
276- string(%d) "%s:%s:%s:%s:%s:%s"
277- ["payload"]=>
278- object(Socket\Ipv%sPacket)#%d (5) {
279- ["headerSize"]=>
280- int(%d)
281- ["rawPacket"]=>
282- string(%d) "%r(.|\n)*?"%r
283- ["srcAddr"]=>
284- string(%d) "%s"
285- ["dstAddr"]=>
286- string(%d) "%s"
287- ["payload"]=>
288- object(Socket\%sPacket)#%d (4) {
289- ["headerSize"]=>
290- int(%d)
291- ["rawPacket"]=>
292- string(%d) "%r(.|\n)*?"%r
293- ["srcPort"]=>
294- int(%d)
295- ["dstPort"]=>
296- int(%d)
297- }
298- }
299- }
300- int(%d)
30152int(%d)
302- string(2) "lo"
303- object(Socket\EthernetPacket)#%d (7) {
304- ["headerSize"]=>
305- int(14)
306- ["rawPacket"]=>
307- string(%d) "%r(.|\n)*?"%r
308- ["socket"]=>
309- object(Socket)#3 (0) {
310- }
311- ["ethProtocol"]=>
312- int(%d)
313- ["srcMac"]=>
314- string(%d) "%s:%s:%s:%s:%s:%s"
315- ["dstMac"]=>
316- string(%d) "%s:%s:%s:%s:%s:%s"
317- ["payload"]=>
318- object(Socket\Ipv6Packet)#%d (5) {
319- ["headerSize"]=>
320- int(%d)
321- ["rawPacket"]=>
322- string(%d) "%A"
323- ["srcAddr"]=>
324- string(%d) "%s"
325- ["dstAddr"]=>
326- string(%d) "%s"
327- ["payload"]=>
328- object(Socket\TcpPacket)#%d (4) {
329- ["headerSize"]=>
330- int(%d)
331- ["rawPacket"]=>
332- string(%d) "%r(.|\n)*?"%r
333- ["srcPort"]=>
334- int(%d)
335- ["dstPort"]=>
336- int(%d)
337- }
338- }
339- }
340- int(%d)
341- unsupported ipv6 header protocol
342- int(%d)
343- %A
344- int(%d)
345- %A
346- string(%d) "%s"
347- object(Socket\EthernetPacket)#%d (7) {
348- ["headerSize"]=>
349- int(%d)
350- ["rawPacket"]=>
351- string(%d) "%r(.|\n)*?"%r
352- ["socket"]=>
353- object(Socket)#%d (0) {
354- }
355- ["ethProtocol"]=>
356- int(2048)
357- ["srcMac"]=>
358- string(%d) "%s"
359- ["dstMac"]=>
360- string(%d) "%s"
361- ["payload"]=>
362- object(Socket\Ipv4Packet)#%d (5) {
363- ["headerSize"]=>
364- int(%d)
365- ["rawPacket"]=>
366- string(%d) "%s"
367- ["srcAddr"]=>
368- string(%d) "%s.%s.%s.%s"
369- ["dstAddr"]=>
370- string(%d) "%s.%s.%s.%s"
371- ["payload"]=>
372- object(Socket\TcpPacket)#%d (4) {
373- ["headerSize"]=>
374- int(%d)
375- ["rawPacket"]=>
376- string(%d) "%r(.|\n)*?"%r
377- ["srcPort"]=>
378- int(%d)
379- ["dstPort"]=>
380- int(%d)
381- }
382- }
383- }
53+ invalid transport header length
0 commit comments