PHP自动分配IP

时间:2016-09-16 10:47:10

标签: php mysql ip

我为我的网络应用程序创建了一个小模块,我需要一些能够自动从我实现的池中分配IP的东西。

我尝试将数据库添加为:

pool = 172.16.0.0
mask = 20

我想添加用户并自动从此池中分配1个ip并且不重复它。

基本上我正在做" auto-config"我们的技术人员只需输入客户名称,客户ID和客户位置的模块。

我正在考虑IP分段,例如

在数据库中分配:

segment1 = 172
segment2 = 16
segment3 = 0

在另一个数据库中插入3个第一段并在1-254之间追加最后一个数字

如果有人以前试过这个(肯定是的),我会怎么做。

提前致谢。

1 个答案:

答案 0 :(得分:0)

确定,

我是在ip2long

的帮助下得到的

我在数据库中保存了池中的第一个IP和最后一个IP。

然后我用ip2long将其转换为十进制

当我想使用时,我检查最后一个池ip和last_used_ip,然后执行last_used_ip + 1.

if($checkCliente == 0){
        if($checkTelefono == 0){
                //Faltan checks para comprobar usuario Asterisk y PPPoE
                $pool_result = $conn->query("SELECT ultima,ip_final FROM ip_pools WHERE id='$pool_id'");
                if($pool_result ->num_rows == '1'){
                        $row = $pool_result->fetch_assoc();
                        $ultima_ip = ip2long($row['ultima']);
                        $ip_final = ip2long($row['ip_final']);
                        if($ultima_ip !== $ip_final){

                                $ip_gestion = (ip2long($row['ultima']) + 1);
                                $ip_gestion = long2ip($ip_gestion);
                                if($conn->query("INSERT INTO clients(nombre,num_cliente,telefono,poblacion,direccion,ip_gestion,password,usuario_pppoe,usuario_asterisk) VALUES('$nombre', '$num_cliente', '$telefono', '$poblacion', '$direccion', '$ip_gestion', '$password', '$usuario_pppoe', '$usuario_asterisk')")){
                                        $conn->query("UPDATE ip_pools SET ultima='$ip_gestion'");
                                        $alert = 'success';
                                        $mensaje = 'El cliente '.$nombre.' con el número de cliente '.$num_cliente.' se ha creado correctamente';

                                        $export = '__exportar_resultados__';
                                } else {
                                        $alert = "danger";
                                        $mensaje = "Ha ocurrido un error al intentar introducir los datos en la base de datos.";
                                }
                        } else {
                                $alert = 'danger';
                                $mensaje = 'El pool de IP\'s seleccionado está lleno<br />Porfavor, seleccione otro.';
                        }
                } else {
                        $alert = 'danger';
                        $mensaje = 'No hay ningún Pool de IP\'s seleccionado';
                }
        } else {
                $alert = 'danger';
                $mensaje = 'El número de teléfono '.$telefono.' ya existe.';
        }
} else {
        $alert = 'danger';
        $mensaje = 'El número de cliente '.$num_cliente.' ya existe.';
}