#40674 [Opn->Fbk]: socket_bind on interface wont see broadcasts to 255.255.255.255

From: Date: Tue, 06 Mar 2007 11:26:48 +0000
Subject: #40674 [Opn->Fbk]: socket_bind on interface wont see broadcasts to 255.255.255.255
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-109972@lists.php.net to get a copy of this message
ID: 40674 Updated by: tony2001@php.net Reported By: matth at mystictrd dot com -Status: Open +Status: Feedback Bug Type: Sockets related Operating System: Debian 3.1 PHP Version: 5.2.1 New Comment: Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If the script requires a database to demonstrate the issue, please make sure it creates all necessary tables, stored procedures etc. Please avoid embedding huge scripts into the report. Previous Comments: ------------------------------------------------------------------------ [2007-03-02 20:24:54] matth at mystictrd dot com The way it seems this should work (I easily could be completely off base) is: socket_bind could be defined as: bool socket_bind ( resource $socket, string $address [, int $port [, string $mac or $iface ]] ) ------------------------------------------------------------------------ [2007-03-02 17:21:23] matth at mystictrd dot com I believe in C/C++ you can specify hardware addresses to listen on - specifically either a MAC address/an interface name (eth0 in linux). After doing some tests in C it seems that if you listen on an ip (i.e. 192.168.0.1) and you will not see that type of packet but if you listen on 0.0.0.0 or INADDR_ANY you can see it. ------------------------------------------------------------------------ [2007-03-01 17:38:01] matth at mystictrd dot com Ignore my previous workaround example, it did not work as expected. ------------------------------------------------------------------------ [2007-03-01 17:25:57] matth at mystictrd dot com The reason why is if you take a normal DHCP server you can typically listen on multiple interfaces. If one wanted to know what interface is receiving the data you would think to bind on the interfaces IP address. But since you cannot see that type of packet binding to an IP like that you must bind to 0 or 0.0.0.0 which doesn't help with knowing what interface recieved the data since the data does not contain information about interface mac/ip destination from the client. I'm not positive if this is a PHP issue or not but I believe you can do it in C/C++ and that you should be able to do it with PHP. A work around I'm experimenting with goes as: <?php $interface_ip = "10.66.66.1"; $interface_port = 67; //listens for dhcp requests $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //you must bind to 0.0.0.0 to actually see anything socket_bind($socket, 0, 67); while(1) { if($src = @socket_recvfrom($socket, $data, 9999, 0, $interface_ip, $interface_port)) { echo "data!\n"; } } ?> ------------------------------------------------------------------------ [2007-03-01 09:01:09] tony2001@php.net And why do you think it's PHP related? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/40674 -- Edit this bug report at http://bugs.php.net/?id=40674&edit=1

« previous php.bugs (#109972) next »