Exemplo n.º 1
1
 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");
     }
 }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
 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");
 }
Exemplo n.º 4
0
 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;
 }