Edit report at http://bugs.php.net/bug.php?id=40674&edit=1
ID: 40674 Comment by: agv at rsh dot hu Reported by: matth at mystictrd dot com Summary: socket_bind on interface wont see broadcasts to 255.255.255.255 Status: No Feedback Type: Bug Package: Sockets related Operating System: Debian 3.1 PHP Version: 5.2.1 New Comment: Hy! I solved the problem: <?php $bc_socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // for broadcast packets $if_socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // for answer packets socket_bind($bc_socket, "255.255.255.255", 67); // listen to discover pcks. socket_bind($if_socket, "10.0.0.1", 67); // target interface address socket_set_option($bc_socket, SOL_SOCKET, SO_BROADCAST, 1); socket_set_option($bc_socket, SOL_SOCKET, SO_REUSEADDR, 1); socket_set_option($bc_socket, SOL_SOCKET, SO_DEBUG, 0); socket_set_option($if_socket, SOL_SOCKET, SO_BROADCAST, 1); socket_set_option($if_socket, SOL_SOCKET, SO_REUSEADDR, 1); socket_set_option($if_socket, SOL_SOCKET, SO_DEBUG, 0); while(1) { if($src = @socket_recv($bc_socket, $data, 9999, 0)) { echo "data!\n"; $senddata = "...."; socket_sendto($if_socket, $senddata, strlen($senddata),0, "255.255.255.255", 68); } } ?> Previous Comments: ------------------------------------------------------------------------ [2007-09-06 01:00:01] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2007-08-29 11:55:31] j...@php.net "A non-authoritative server simply ignores the request, leading to an implementation dependent time out for the client to give up on the request and ask for a new IP." Isn't that exactly what is happening here? ------------------------------------------------------------------------ [2007-03-06 17:12:03] matth at mystictrd dot com My first message had a working example but here it is again with more information. The purpose is to see DHCP requests from a DHCP Client. So use a DHCP Client to get an IP address on a system thats on the same network that this script is running on. This first example WON'T see the packets: <?php $ip = "ENTER YOUR IP ADDRESS HERE"; //example: 192.168.0.100 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_bind($socket, $ip, 67); while(1) { if($src = @socket_recv($socket, $data, 9999, 0)) { echo "data!\n"; } } ?> This second example WILL see the packets: <?php $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_bind($socket, 0, 67); while(1) { if($src = @socket_recv($socket, $data, 9999, 0)) { echo "data!\n"; } } ?> This reference might give you a better idea of what I'm talking about: http://en.wikipedia.org/wiki/Dhcp#DHCP_discovery ------------------------------------------------------------------------ [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. ------------------------------------------------------------------------ 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/bug.php?id=40674 -- Edit this bug report at http://bugs.php.net/bug.php?id=40674&edit=1