Skip to content

Commit 04090d8

Browse files
committed
adding ipv6 case, further fixes
1 parent eaf2c89 commit 04090d8

File tree

4 files changed

+69
-14
lines changed

4 files changed

+69
-14
lines changed

ext/sockets/sockets.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1714,7 +1714,6 @@ PHP_FUNCTION(socket_recvfrom)
17141714
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("dstAddr"), inet_ntoa(d));
17151715
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), totalip);
17161716
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("rawPacket"), (char *)payload);
1717-
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("socket"), arg1);
17181717

17191718
switch (ip->protocol) {
17201719
case IPPROTO_TCP: {
@@ -1771,7 +1770,7 @@ PHP_FUNCTION(socket_recvfrom)
17711770
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("srcAddr"), s);
17721771
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("dstAddr"), d);
17731772
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), totalip);
1774-
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("socket"), arg1);
1773+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("rawPacket"), (char *)payload);
17751774
// TODO completing
17761775
break;
17771776
}

ext/sockets/sockets.stub.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2185,7 +2185,7 @@ final class EthernetPacket extends Packet
21852185
public int $ethProtocol;
21862186
public string $srcMac;
21872187
public string $dstMac;
2188-
public ?object $payload;
2188+
public ?Packet $payload;
21892189
}
21902190

21912191
final class TcpPacket extends Packet
@@ -2204,7 +2204,7 @@ final class Ipv4Packet extends Packet
22042204
{
22052205
public string $srcAddr;
22062206
public string $dstAddr;
2207-
public ?object $payload;
2207+
public ?Packet $payload;
22082208
}
22092209

22102210
final class Ipv6Packet extends Packet

ext/sockets/sockets_arginfo.h

Lines changed: 5 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/sockets/tests/socket_afpacket.phpt

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ if (!function_exists("posix_getuid") || posix_getuid() != 0) {
7272
"7f000001" .
7373
"7f000001"
7474
);
75-
$p = str_repeat("A", 20); // Total payload 20 + 20 = 40 bytes
75+
$p = str_repeat("A", 20);
7676

7777
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IP);
7878
$buf .= $ip . $p;
@@ -85,6 +85,36 @@ if (!function_exists("posix_getuid") || posix_getuid() != 0) {
8585

8686
var_dump($addr);
8787
var_dump($rsp);
88+
89+
socket_close($s_s);
90+
socket_close($s_c);
91+
92+
$s_c = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IPV6);
93+
$s_bind = socket_bind($s_c, 'lo');
94+
$s_s = socket_create(AF_PACKET, SOCK_RAW, ETH_P_IPV6);
95+
$v_bind = socket_bind($s_s, 'lo');
96+
97+
$ip = hex2bin(
98+
"60000000" .
99+
"0014" .
100+
"3A" .
101+
"40" .
102+
"00000000000000000000000000000001" .
103+
"00000000000000000000000000000001"
104+
);
105+
106+
$payload = str_repeat("A", 20);
107+
108+
$buf = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IPV6);
109+
$buf .= $ip . $payload;
110+
111+
$buf .= str_repeat("\x00", max(0, 60 - strlen($buf)));
112+
113+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
114+
var_dump(socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr));
115+
116+
var_dump($addr);
117+
var_dump($rsp);
88118
?>
89119
--EXPECTF--
90120
bool(true)
@@ -118,8 +148,6 @@ object(Socket\EthernetPacket)#3 (%d) {
118148
int(60)
119149
unsupported ethernet protocol
120150
int(60)
121-
122-
Deprecated: Creation of dynamic property Socket\Ipv4Packet::$socket is deprecated in %s on line %d
123151
int(%d)
124152
string(2) "lo"
125153
object(Socket\EthernetPacket)#2 (7) {
@@ -137,7 +165,7 @@ object(Socket\EthernetPacket)#2 (7) {
137165
["dstMac"]=>
138166
string(%d) "%s:%s:%s:%s:%s:%s"
139167
["payload"]=>
140-
object(Socket\Ipv4Packet)#10 (6) {
168+
object(Socket\Ipv4Packet)#10 (5) {
141169
["headerSize"]=>
142170
int(%d)
143171
["rawPacket"]=>
@@ -157,8 +185,34 @@ object(Socket\EthernetPacket)#2 (7) {
157185
["dstPort"]=>
158186
int(%d)
159187
}
160-
["socket"]=>
161-
object(Socket)#8 (0) {
162-
}
188+
}
189+
}
190+
int(74)
191+
int(74)
192+
string(2) "lo"
193+
object(Socket\EthernetPacket)#9 (7) {
194+
["headerSize"]=>
195+
int(14)
196+
["rawPacket"]=>
197+
string(%d) "%A"
198+
["socket"]=>
199+
object(Socket)#3 (0) {
200+
}
201+
["ethProtocol"]=>
202+
int(%d)
203+
["srcMac"]=>
204+
string(%d) "%s:%s:%s:%s:%s:%s"
205+
["dstMac"]=>
206+
string(17) "%s:%s:%s:%s:%s:%s"
207+
["payload"]=>
208+
object(Socket\Ipv6Packet)#1 (4) {
209+
["headerSize"]=>
210+
int(5160)
211+
["rawPacket"]=>
212+
string(%d) "%s"
213+
["srcAddr"]=>
214+
string(%d) "%s"
215+
["dstAddr"]=>
216+
string(%d) "%s"
163217
}
164218
}

0 commit comments

Comments
 (0)