ID:               40674
 User updated by:  matth at mystictrd dot com
 Reported By:      matth at mystictrd dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         Sockets related
 Operating System: Debian 3.1
 PHP Version:      5.2.1
 New Comment:

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";
  }
}
?>


Previous Comments:
------------------------------------------------------------------------

[2007-03-01 09:01:09] [EMAIL PROTECTED]

And why do you think it's PHP related?

------------------------------------------------------------------------

[2007-03-01 00:41:33] matth at mystictrd dot com

Description:
------------
A SOCK_DGRAM SOL_UDP socket using socket_bind to an IP address 
associated with an interface will not see UDP broadcasts destined to 
255.255.255.255.  I do not know if this is intended but you can see
them 
when listening on 0.0.0.0

Reproduce code:
---------------
<?php
//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, "10.66.66.1", 67);
while(1)
{
  if($src = @socket_recv($socket, $data, 9999, 0))
  {
    echo "data!\n";
  }
}
?>

Expected result:
----------------
When a DHCP request is made we should see "data!" echoed.

Actual result:
--------------
Nothing was read on the interface - it can only see localhost or direct

packets sent to it (destination interface IP address).


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=40674&edit=1

Reply via email to