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

Reply via email to