我为我的网络应用程序创建了一个小模块,我需要一些能够自动从我实现的池中分配IP的东西。
我尝试将数据库添加为:
pool = 172.16.0.0
mask = 20
我想添加用户并自动从此池中分配1个ip并且不重复它。
基本上我正在做" auto-config"我们的技术人员只需输入客户名称,客户ID和客户位置的模块。
我正在考虑IP分段,例如
在数据库中分配:
segment1 = 172
segment2 = 16
segment3 = 0
在另一个数据库中插入3个第一段并在1-254之间追加最后一个数字
如果有人以前试过这个(肯定是的),我会怎么做。
提前致谢。
答案 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.';
}