function processPacket($packetData) { $packet = new dhcpPacket(); $packet->parse($packetData); $processor = new dhcpRequestProcessor($this, $this->packetProcessor, $this->storage, $packet); if ($responsePacket = $processor->getResponse()) { $responseData = $responsePacket->build(); $this->verbosity && (print "Sending response" . "\n"); $ciaddr = $packet->getClientAddress(); if ($ciaddr == '0.0.0.0') { $this->verbosity && (print "Switching to broadcast address...\n"); $ciaddr = '255.255.255.255'; } $this->verbosity && (print "Attempting to send response packet to " . $ciaddr . "\n"); $numBytesSent = socket_sendto($this->socket, $responseData, strlen($responseData), 0, $ciaddr, 68); if ($numBytesSent === FALSE) { $this->verbosity && (print "send failed for specific address, broadcast.\n"); $numBytesSent = socket_sendto($this->socket, $responseData, strlen($responseData), 0, "255.255.255.255", 68); $numBytesSent === FALSE && $this->verbosity && printf('socket send error: %s\\n', socket_strerror(socket_last_error($this->socket))); } $numBytesSent && $this->verbosity && (print "Response packet sent.\n"); } else { $this->verbosity && (print "Packet ignored\n"); } }
function handleClientInform(dhcpServer $server, dhcpStorage $storage, dhcpPacket $packet, dhcpPacket $response) { $attributes = $storage->getAttributesForClient($packet->getMACAddress()); $response->setData('op', dhcpPacket::int2hex(2)); $response->setData('xid', $packet->getData('xid')); $response->setData('chaddr', $packet->getData('chaddr')); $response->setData('message_type', 'ack'); $response->setData('subnet_mask', $attributes['subnet_mask']); $response->setData('router', $attributes['router']); $response->setData('server_id', array(10, 2, 3, 5)); $response->setData('dns_server', $attributes['dns_server']); return true; }
function processPacket($packetData) { $packet = new dhcpPacket(); $packet->parse($packetData); print_r($packet); // $processor = new dhcpRequestProcessor($this->storage, $packet); // // $responsePacket = $processor->getResponse(); // $responseData = $responsePacket->build(); // print("sending response" . "\n"); // $ciaddr = $packet->getClientAddress(); // if ($ciaddr == '0.0.0.0') { // print("Switching to broadcast address...\n"); // $ciaddr = '255.255.255.255'; // } // print("attempting to send packet to " . $ciaddr . "\n"); // $error = socket_sendto($this->socket, $responseData, strlen($responseData), 0, $ciaddr, 68); // if ($error === FALSE) { // print("send failed for specific address, broadcast.\n"); // $error = socket_sendto($this->socket, $responseData, strlen($responseData), 0, "255.255.255.255", 68); // } // print('socket send error: ' . $error . "\n"); }
function handleClientInform(dhcpServer $server, dhcpStorage $storage, dhcpPacket $packet, dhcpPacket $response) { $macAddress = substr($packet->getData('chaddr'), 0, 12); // only look at the first 12 characters for the MAC address $bootServer = $this->datasource->TftpServerFromMacAddress($server, $macAddress); $server->verbosity && (print "Mac Address: {$macAddress}\n"); if ($bootServer) { $attributes = $storage->getAttributesForClient($packet->getMACAddress()); $response->setData('op', dhcpPacket::BOOTREPLY); $response->setData('hops', $packet->getData('hops')); $response->setData('xid', $packet->getData('xid')); $response->setData('htype', $packet->getData('htype')); $response->setData('ciaddr', $packet->getData('ciaddr')); $response->setData('chaddr', $packet->getData('chaddr')); $response->setData('message_type', 'ack'); $response->setData('server_id', $server->getSocketHost()); $response->setData('tftp_server', $bootServer); $server->verbosity && (print "Setting response option 66 to {$bootServer}\n"); $server->verbosity > 1 && print_r($response); } return !$this->dryRun && $bootServer !== NULL; }