Skip to content

Commit b2e8926

Browse files
committed
tests for 32 bits
1 parent 90c98cc commit b2e8926

File tree

2 files changed

+388
-334
lines changed

2 files changed

+388
-334
lines changed

ext/sockets/tests/socket_afpacket.phpt

Lines changed: 4 additions & 334 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +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");
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--
23249
bool(true)
23350
bool(true)
23451
string(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)
30152
int(%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

Comments
 (0)