Skip to content

Commit 391ee0b

Browse files
committed
fix tests
1 parent e076a31 commit 391ee0b

File tree

2 files changed

+340
-340
lines changed

2 files changed

+340
-340
lines changed

ext/sockets/tests/socket_afpacket.phpt

Lines changed: 335 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if (!defined("AF_PACKET")) {
1212
if (!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");
15+
if (PHP_INT_SIZE != 8) die("skip this test is for 64-bit only");
1616
?>
1717
--FILE--
1818
<?php
@@ -34,20 +34,351 @@ if (PHP_INT_SIZE != 4) die("skip this test is for 32-bit only");
3434
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_LOOP);
3535
$buf .= str_repeat("A", 46);
3636

37+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
38+
var_dump(socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr));
39+
40+
var_dump($addr);
41+
var_dump($rsp);
42+
43+
socket_close($s_c);
44+
// purposely unsupported ethernet protocol (ARP)
45+
46+
$s_c = socket_create(AF_PACKET, SOCK_RAW, 0x0806);
47+
$s_bind = socket_bind($s_c, 'lo');
48+
$buf = pack("H12H12n", "ffffffffffff", "000000000000", 0x0806);
49+
$buf .= str_repeat("A", 46);
50+
3751
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
3852

53+
try {
54+
socket_recvfrom($s_c, $rsp2, strlen($buf), 0, $addr2);
55+
} catch (\ValueError $e) {
56+
echo $e->getMessage(), PHP_EOL;
57+
}
58+
59+
socket_close($s_c);
60+
socket_close($s_s);
61+
62+
$s_c = socket_create(AF_PACKET, SOCK_RAW, ETH_P_ALL);
63+
$s_bind = socket_bind($s_c, 'lo');
64+
65+
$s_s = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IP);
66+
$v_bind = socket_bind($s_s, 'lo');
67+
68+
$ip = hex2bin(
69+
"4500" .
70+
"0028" .
71+
"0000" .
72+
"4000" .
73+
"4006" .
74+
"0000" .
75+
"7f000001" .
76+
"7f000001"
77+
);
78+
$p = str_repeat("A", 20);
79+
80+
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IP);
81+
$buf .= $ip . $p;
82+
83+
$min_frame_size = 60;
84+
$buf .= str_repeat("\x00", max(0, $min_frame_size - strlen($buf)));
85+
86+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
87+
var_dump(socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr));
88+
89+
var_dump($addr);
90+
var_dump($rsp);
91+
92+
socket_close($s_s);
93+
socket_close($s_c);
94+
95+
$s_c = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IPV6);
96+
$s_bind = socket_bind($s_c, 'lo');
97+
$s_s = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IPV6);
98+
$v_bind = socket_bind($s_s, 'lo');
99+
100+
$ethhdr = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IPV6);
101+
102+
$ipv6_first_4 = hex2bin("60000000");
103+
104+
$ipv6_payload_len = hex2bin("0014");
105+
106+
$ipv6_nexthdr = chr(6);
107+
108+
$ipv6_hop_limit = chr(64);
109+
110+
$src_ip = hex2bin("00000000000000000000000000000001");
111+
112+
$dst_ip = hex2bin("00000000000000000000000000000001");
113+
114+
$tcp_hdr = pack("nnNNCCnn",
115+
12345,
116+
80,
117+
0,
118+
0,
119+
(5 << 4),
120+
0x02,
121+
65535,
122+
0
123+
);
124+
125+
$buf = $ethhdr
126+
. $ipv6_first_4
127+
. $ipv6_payload_len
128+
. $ipv6_nexthdr
129+
. $ipv6_hop_limit
130+
. $src_ip
131+
. $dst_ip
132+
. $tcp_hdr;
133+
134+
$buf .= str_repeat("\x00", max(0, 60 - strlen($buf)));
135+
136+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
137+
var_dump(socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr));
138+
139+
var_dump($addr);
140+
var_dump($rsp);
141+
142+
$first_4_bytes = hex2bin("60000000");
143+
144+
$payload_len = hex2bin("0014");
145+
146+
$nexthdr = hex2bin("43"); // Extended proto
147+
148+
$hop_limit = hex2bin("40");
149+
150+
$src_ip = hex2bin("00000000000000000000000000000001");
151+
152+
$dst_ip = hex2bin("00000000000000000000000000000001");
153+
154+
$tcp_payload = str_repeat("A", 20);
155+
156+
$ethhdr = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IPV6);
157+
158+
$buf = $ethhdr . $first_4_bytes . $payload_len . $nexthdr . $hop_limit . $src_ip . $dst_ip . $tcp_payload;
159+
160+
$buf .= str_repeat("\x00", max(0, 60 - strlen($buf)));
161+
162+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
163+
39164
try {
40165
socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr);
41-
} catch(\ValueError $e) {
42-
echo $e->getMessage(), PHP_EOL;
166+
} catch (\ValueError $e) {
167+
echo $e->getMessage(), PHP_EOL;
43168
}
44169

45170
socket_close($s_s);
46171
socket_close($s_c);
172+
173+
$s_c = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IP);
174+
$s_bind = socket_bind($s_c, 'lo');
175+
176+
$s_s = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IP);
177+
$v_bind = socket_bind($s_s, 'lo');
178+
179+
$ip = hex2bin(
180+
"4500" .
181+
str_repeat("0028", 16) .
182+
"0000" .
183+
"4000" .
184+
"4006" .
185+
"0000" .
186+
"7f000001" .
187+
"7f000001"
188+
);
189+
$p = str_repeat("A", 20);
190+
191+
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IP);
192+
$buf .= $ip . $p;
193+
194+
$min_frame_size = 60;
195+
$buf .= str_repeat("\x00", max(0, $min_frame_size - strlen($buf)));
196+
197+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
198+
199+
try {
200+
socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr);
201+
} catch (\ValueError $e) {
202+
echo $e->getMessage(), PHP_EOL;
203+
}
204+
205+
$ip = hex2bin(
206+
"9999" .
207+
"0028" .
208+
"0000" .
209+
"4000" .
210+
"4006" .
211+
"0000" .
212+
"FFFFFeFF" .
213+
"7f000001"
214+
);
215+
$p = str_repeat("Bb", 80);
216+
217+
$buf = pack("H12H12n", "ffffffffffffh", "aaaaaAAAAAAA", ETH_P_IP);
218+
$buf .= $ip . $p;
219+
220+
$min_frame_size = 60;
221+
$buf .= str_repeat("\x00", max(0, $min_frame_size - strlen($buf)));
222+
223+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
224+
var_dump(socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr));
225+
226+
var_dump($addr);
227+
var_dump($rsp);
228+
229+
socket_close($s_s);
230+
socket_close($s_c);
47231
?>
48232
--EXPECTF--
49233
bool(true)
50234
bool(true)
51235
string(2) "lo"
236+
int(%i)
237+
238+
Warning: socket_getpeername(): unable to retrieve peer name [95]: %sot supported in %s on line %d
239+
int(60)
240+
int(60)
241+
string(2) "lo"
242+
object(Socket\EthernetPacket)#3 (%d) {
243+
["headerSize"]=>
244+
int(%d)
245+
["rawPacket"]=>
246+
string(%d) "%r(.|\n)*?"%r
247+
["socket"]=>
248+
object(Socket)#1 (0) {
249+
}
250+
["ethProtocol"]=>
251+
int(%i)
252+
["srcMac"]=>
253+
string(%d) "%s:%s:%s:%s:%s:%s"
254+
["dstMac"]=>
255+
string(%d) "%s:%s:%s:%s:%s:%s"
256+
["payload"]=>
257+
%a
258+
}
259+
int(60)
260+
unsupported ethernet protocol
261+
int(60)
262+
int(%d)
263+
string(2) "lo"
264+
object(Socket\EthernetPacket)#2 (7) {
265+
["headerSize"]=>
266+
int(14)
267+
["rawPacket"]=>
268+
string(%d) "%r(.|\n)*?"%r
269+
["socket"]=>
270+
object(Socket)#%d (0) {
271+
}
272+
["ethProtocol"]=>
273+
int(%d)
274+
["srcMac"]=>
275+
string(%d) "%s:%s:%s:%s:%s:%s"
276+
["dstMac"]=>
277+
string(%d) "%s:%s:%s:%s:%s:%s"
278+
["payload"]=>
279+
object(Socket\Ipv%sPacket)#%d (5) {
280+
["headerSize"]=>
281+
int(%d)
282+
["rawPacket"]=>
283+
string(%d) "%r(.|\n)*?"%r
284+
["srcAddr"]=>
285+
string(%d) "%s"
286+
["dstAddr"]=>
287+
string(%d) "%s"
288+
["payload"]=>
289+
object(Socket\%sPacket)#%d (4) {
290+
["headerSize"]=>
291+
int(%d)
292+
["rawPacket"]=>
293+
string(%d) "%r(.|\n)*?"%r
294+
["srcPort"]=>
295+
int(%d)
296+
["dstPort"]=>
297+
int(%d)
298+
}
299+
}
300+
}
301+
int(%d)
52302
int(%d)
53-
invalid transport header length
303+
string(2) "lo"
304+
object(Socket\EthernetPacket)#%d (7) {
305+
["headerSize"]=>
306+
int(14)
307+
["rawPacket"]=>
308+
string(%d) "%r(.|\n)*?"%r
309+
["socket"]=>
310+
object(Socket)#3 (0) {
311+
}
312+
["ethProtocol"]=>
313+
int(%d)
314+
["srcMac"]=>
315+
string(%d) "%s:%s:%s:%s:%s:%s"
316+
["dstMac"]=>
317+
string(%d) "%s:%s:%s:%s:%s:%s"
318+
["payload"]=>
319+
object(Socket\Ipv6Packet)#%d (5) {
320+
["headerSize"]=>
321+
int(%d)
322+
["rawPacket"]=>
323+
string(%d) "%A"
324+
["srcAddr"]=>
325+
string(%d) "%s"
326+
["dstAddr"]=>
327+
string(%d) "%s"
328+
["payload"]=>
329+
object(Socket\TcpPacket)#%d (4) {
330+
["headerSize"]=>
331+
int(%d)
332+
["rawPacket"]=>
333+
string(%d) "%r(.|\n)*?"%r
334+
["srcPort"]=>
335+
int(%d)
336+
["dstPort"]=>
337+
int(%d)
338+
}
339+
}
340+
}
341+
int(%d)
342+
unsupported ipv6 header protocol
343+
int(%d)
344+
%A
345+
int(%d)
346+
%A
347+
string(%d) "%s"
348+
object(Socket\EthernetPacket)#%d (7) {
349+
["headerSize"]=>
350+
int(%d)
351+
["rawPacket"]=>
352+
string(%d) "%r(.|\n)*?"%r
353+
["socket"]=>
354+
object(Socket)#%d (0) {
355+
}
356+
["ethProtocol"]=>
357+
int(2048)
358+
["srcMac"]=>
359+
string(%d) "%s"
360+
["dstMac"]=>
361+
string(%d) "%s"
362+
["payload"]=>
363+
object(Socket\Ipv4Packet)#%d (5) {
364+
["headerSize"]=>
365+
int(%d)
366+
["rawPacket"]=>
367+
string(%d) "%s"
368+
["srcAddr"]=>
369+
string(%d) "%s.%s.%s.%s"
370+
["dstAddr"]=>
371+
string(%d) "%s.%s.%s.%s"
372+
["payload"]=>
373+
object(Socket\TcpPacket)#%d (4) {
374+
["headerSize"]=>
375+
int(%d)
376+
["rawPacket"]=>
377+
string(%d) "%r(.|\n)*?"%r
378+
["srcPort"]=>
379+
int(%d)
380+
["dstPort"]=>
381+
int(%d)
382+
}
383+
}
384+
}

0 commit comments

Comments
 (0)