PHP自动分配IP

PHP自动分配IP,php,mysql,ip,Php,Mysql,Ip,我正在为我的web应用程序创建一个小模块,我需要一个可以从我实现的池中自动分配IP的东西 我尝试将数据库添加为: pool = 172.16.0.0 mask = 20 我想添加用户并自动分配此池中的1个ip,不要重复 基本上,我正在为我们的技术人员创建一个“自动配置”模块,只需输入客户端名称、客户端id和客户端位置 例如,我在考虑IP细分 在数据库中,分配: segment1 = 172 segment2 = 16 segment3 = 0 在另一个数据库中,插入前3个段,并在1-254之

我正在为我的web应用程序创建一个小模块,我需要一个可以从我实现的池中自动分配IP的东西

我尝试将数据库添加为:

pool = 172.16.0.0
mask = 20
我想添加用户并自动分配此池中的1个ip,不要重复

基本上,我正在为我们的技术人员创建一个“自动配置”模块,只需输入客户端名称、客户端id和客户端位置

例如,我在考虑IP细分

在数据库中,分配:

segment1 = 172
segment2 = 16
segment3 = 0
在另一个数据库中,插入前3个段,并在1-254之间追加最后一个数字

Idk如果有人尝试过这个(当然是的),我怎么能做到这一点

提前谢谢。

好的

我是在ip2long的帮助下得到的

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

然后我用ip2long将它转换成十进制

当我想使用时,我检查最后一个池ip和最后一个使用的池ip,然后只做最后一个使用的池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.';
}
if($checkCliente==0){
如果($checkTelefono==0){
//Faltan检查通用星号y PPPoE
$pool\u result=$conn->query(“从id='$pool\u id'的ip\u池中选择ultima,ip\u final”);
如果($pool\u result->num\u rows==“1”){
$row=$pool\u result->fetch\u assoc();
$ultima_ip=ip2long($row['ultima']);
$ip_final=ip2long($row['ip_final']);
如果($ultima_ip!==$ip_final){
$ip_gestion=(ip2long($row['ultima'])+1);
$ip\gestion=long2ip($ip\gestion);
if($conn->query(“插入到客户端(nombre,num_cliente,telefono,poblacion,direccion,ip_-gestion,password,usuario_-pppoe,usuario_-asterisk)值(“$nombre',$num_cliente',$telefono',$poblacion',$direccion',$ip_-gestion',$password',$usuario\u-pppoe',$usuario',$usuario\u-asterisk')){
$conn->query(“更新ip\u池设置最终值=“$ip\u管理”);
$alert='success';
$mensaje='El cliente'.$nombre.'con Elúmero de cliente'.$num_cliente.'se ha creado correctante';
$export='\uuuuuEXPORTAR\uuuuuResultados\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
}否则{
$alert=“危险”;
$mensaje=“在达托斯基地引入达托斯的目的地时发生错误。”;
}
}否则{
$alert=‘危险’;
$mensaje='El pool de IP's seleccionado estálleno
Porrovour,seleccione otro'; } }否则{ $alert=‘危险’; $mensaje=‘不必为IP的自我保护而担心’; } }否则{ $alert=‘危险’; $mensaje='El número de teléfono'。$telefono.'ya existe'; } }否则{ $alert=‘危险’; $mensaje='El número de cliente'。$num_cliente.'ya existe'; }
首先,您应该确定使用掩码可以寻址多少IP。我想到了一个名为
getIPrangeFromMask(int$mask)
的函数。据我所知,你可以在的维基百科页面上找到一些信息。然后,当您知道您的IP范围时,您只需循环foreach IP范围,foreach检查是否已为您的某个用户寻址。如果没有,则为需要IP的当前用户寻址。