Administracion de IP's en una red wireless via web (PHP)


  • 0

    Buenas esto es el proyecto que llevo en manos i que dara a luz proximamente (espero :risitas:). Este verano me he empeñado a aprender a programar en PHP, MySQL i no se que leches mas :p i para practicar es muy divertido, almenos para mi lo es :p jeje.

    El tema es que no se si he hecho bien el planteamiento de las tablas de la db i tal…en principio la "web" es para la asociacion de mi pueblo (RibesWireless) pero quiero hacerlo generico, con instalacion i todo...

    Los lenguajes utilizados son PHP, MySQL y HTML :p. Esta en fase ultra-alpha release :p, repito k esto es para practicar en PHP, ya que acabo de aprender en ello.

    Tablas:

    ip: guarda en 4 columnas las 4 posiciones de la ip, tambien el tipo, el propietario i una descripcion.

    mysql> select * from ip where id =1 or id=2;
    +----+------+------+------+------+----------+---------------+---------------+
    | id | ip_1 | ip_2 | ip_3 | ip_4 | ip_tipus | ip_propietari | ip_descripcio |
    +----+------+------+------+------+----------+---------------+---------------+
    |  1 |   10 |   34 |    1 |    0 |        3 |             2 | NULL          |
    |  2 |   10 |   34 |    1 |    1 |        3 |             2 | AP RW01       |
    +----+------+------+------+------+----------+---------------+---------------+
    2 rows in set (0.00 sec)
    

    propietari: guarda el nombre del propietario, la id corresponde a la posicion "ip_propietari" de la tabla IP.

    mysql> select * from propietari;
    +---------------+---------------+
    | propietari_id | nom           |
    +---------------+---------------+
    |             1 | Lliure        |
    |             2 | RibesWireless |
    |             3 | marcalj       |
    +---------------+---------------+
    2 rows in set (0.00 sec)
    

    rangs: guarda el numero de la posicion 3 de una ip, lo he denominado rango, para saber luego cuantos rangos hay configurados. La id corresponde a la posicion "ip_3" de la tabla IP.

    mysql> select * from rangs;
    +----------+------+
    | rangs_id | rang |
    +----------+------+
    |        1 |  216 |
    |        2 |  217 |
    |        3 |  218 |
    |        4 |  219 |
    +----------+------+
    4 rows in set (0.00 sec)
    

    tipus: guarda el tipo de IP, la id corresponde a la posicion "ip_tipus" de la tabla IP.

    mysql> select * from tipus;
    +----------+---------------+
    | tipus_id | descripcio    |
    +----------+---------------+
    |        1 | Lliure        |
    |        2 | Reservada     |
    |        3 | Administracio |
    |        4 | Error         |
    +----------+---------------+
    4 rows in set (0.00 sec)
    

    Para crear las tablas he usado un archivo *.sql i para llenar un archivo php de prueba, para luego que el mismo asistente de instalacion te lo pueda crear. i luego hay un archivo php principal con todo. AQUI teneis los archivos. Para ver lo que hace la web "ips.php" podeis verla AQUI. tarda un poco, ya sabreis pq :) jeje. Tendre k optimizar el proceso por eso…k si no... xD

    Bueno a ver que os parece.

    Estoy abierto a cualquier ayuda e comentario. Ojala esto le sirva para alguien que tambien este aprendiendo :)

    Salu2!



  • 1

    BIen, esta bien, veo q vas aprendiendo "pequeño saltamontes" :risitas: :risitas: pero te voy a puntualizar 2 cosas. Primero. La tabla de ips esta mal, a mi entender. Deberias tener solo 6 campos.
    ID: INT(11)
    IP: Tinytext
    Mascara: Tinytext
    ip_tipo:
    ip_propietari:
    ip_descripcio:

    Mas q nada pq al ser redes disintas cada una llevara una mascara o si son de la misma lo tienes preparado para futuras ampliaciones. Igual tmb deberias añadir un campo q fuese la direccion MAC, eso tu mismo.

    La segunda puntualizacion es mas simple. Entiendo lo q haces, como lo haces, pero no entiendo para q. Q utlidad tiene?? seguro q tendra alguna pq sino te hubieras puesto a hacer el tipico ejercicio de notas y alumnos :D

    SalU2

    KrHonHoS

    P.D. Tome nota de lo q me dijiste de los favoritos y ya lo he echo. Cuando ponga todo lo veras funcionando perfecto;) Espero q no haga falta recordarte q si necesitas algo de php o de C o de mysql o de algo q este en mis manos, lo digas.



  • 2

    Gracias por la ayuda KrHonHoS, pues la utilidad es esta:

    En mi pueblo tenemos montada una red wireless (a lo grande, pilla varios municipios), nos pusimos en contacto con RedLibre para que nos dieran IP's a nosotros (para k toda spain, en el caso que estubiera toda conectada via wireless, no hubieran problemas de ip's) i bueno, pues la administracion la llevo yo, me mandan mails diciendo k alguien ha entrado en la red i k kiere X ip's, yo se las asigno i le devuelvo el mail con las direcciones, lo tengo en una hoja de excel i lo modifico a mano.

    La aplicacion es que desde esa web tu puedas ver kien tiene esa ip (por si pasa algo, lo de la direccion MAC estaria muy bien tambien) i si kieres mas ips o kieras hacer un cambio puedas hacerlo. En principio lo podran modificar un par de personas, yo i otro. Esta es la idea.

    Otra cosa, hay alguna explicacion del pq no es mejor poner la ip en 4 campos k en uno?? solo por curiosidad.

    Lo de la mascara no me parece util (crear un campo para ella), la mascara es para definir k rangos de ips kieres ver en tu pc…por ejemplo la k hay puesta en la web (255.255.252.0) corresponde a los 4 rangos de ip's k tenemos... Pero bueno... lo apunto xD

    Por el tema de optimizacion....como ves tu la posibilidad de reducir consultas a la db?? eske cada vez k carga hace unas 1200 consultas minimo...i alenta un poco la cosa...

    Lo dicho...Gracias! ;)



  • 3

    A ver, lo de mejor un campo q 4, por una razon bastante simple, estas repitiendo 2 constantemente, luego si los vas a repetir o los kitas o usas un solo campo, ademas la consulta es mas rapida (no es lo mismo pedir un campo q 4). El manejo es mas rapido, si tienes q buscar una ip en concreto, tendrias q ir preguntando, uniendo los campos,… amos, no se pero yo haria eso. Y para q la consulta sea mas rapida pos... pediria solo los campos q voy a mostrar, haria una buskeda por rango en paginas separadas, haria solo un select (espero q hagas un select y despues un fetch_row, pq si haces un select por id....:rolleyes: )

    Nu se, habria q ver algo el codigo para kitar lineas.

    SalU2

    KrHonHoS

    P.D. no me he mirao el codigo pq no e tenio tiempo. A ver si esta tarde :rolleyes:

    Editado:
    Si lo kieres hacer algo ams kuko, kita el id de la tabla ips y usa la ip como el id, pq al ser unica y no poder repetirse…. tmb puedes usar un numero para definirla (ej. 010024015002, q al leerlo le pones los puntos de 3 en 3 y tendrias 010.024.015.002 luego le kitas los 0 o al meterlo en variables de tipo int ya se te kita y listo ;)



  • 4

    utilizo el fetch_array, mas k nada pq es el que me ha dicoh un colega xD

    Utilizar la ip como id…pero entonces la ip siguendo como un solo campo? o lo dejo en 4?? mejor en uno como tu dices, no?

    Cuando veas el codigo ya me castigaras demasiado....toy preparandome para recibir la paliza maestro xD xD :risitas: jeje

    Pos eso cuando lo veas me dices que cambio i asi lo hago bien de una vez :rolleyes: jeje.

    Primero que la db este bien estructurada...luego ya se vera el tema proteccion para k nadie pueda borrar las cosas i tal, etc.

    Salu2!



  • 5

    Toy mirando el codigo y te voy a poner una pega, si lo corriges ganaras mucho tiempo de buskeda. Cada vez q listas una ip, (miremos solo el caso de una), consultas la tabla ip 3 veces. Seria mas facil y rapido si la consultases solo una.

    Si en lugar de hacer:

    $result = mysql_query("select ip_tipus from ip where ip_4 = $x AND ip_1 = $ip_1 AND ip_2 = $ip_2 AND ip_3 = $ip_3",$link);
    $result = mysql_query("select ip_propietari from ip where ip_4 = $x AND ip_1 = $ip_1 AND ip_2 = $ip_2 AND ip_3 = $ip_3",$link);
    $result = mysql_query("select ip_descripcio from ip where ip_4 = $x AND ip_1 = $ip_1 AND ip_2 = $ip_2 AND ip_3 = $ip_3",$link);
    

    hicieras

    $result = mysql_query ("select * from ip where ip_4 = $x AND ip_1 = $ip_1 AND ip_2 = $ip_2 AND ip_3 = $ip_3",$link);
    ```ya tendrias todos los datos buscados y solo harias una consulta no 3.
    
    Prueba a modificar eso y me cuentas si se reduce el tiempo o no.
    
    Cuando tenga un ratin mas, te lo miro con mas calma para depurarlo mas.


  • 6

    Ok ahora xungo, me piro 4 dias fuera, el lunes llegare, ya te dire algo, vale?

    Gracias tio!



  • 7

    Pos eso… q eres un fenomeno primo, siempre llevas algun preoyecto q otro entre manos.
    A ver ahora cuando aprenda "algo" de programación si te ayudo, me interesa el tema... pues estamos montando una red wireless por aqui, y vamos, soi yo el q está llevando el cotarro... saludos marcalj!!



  • 8

    jeje gracias tiu! xD

    Pa lo de la wireless cuenta conmigo para lo que sea (que sepa yo :p) jeje.

    Respecto al tema inicial:

    La tabla "ip" quedara con la ip en un solo campo, i el nombre directamente en ella para agilitar el tema i no hacer mas consultas.

    Se hara una sola consulta por cada fila de ips en la web.

    I bueno mas cosas….luego pongo otra vez el codigo actualizado.

    Salu2! i gracias por la ayuda i comentarios ;)



  • 9

    Buenas, me he vuelto a poner en ello, creo que esta vez progresamos satisfactoriamente…

    Tengo dos dudas:

    1.- El campo nombre no se si dejarlo tal como esta (una tabla a parte) o ponerlo todo el la tabla ip.
    2.- Esta funcion k tal la veis?

    El objetivo es que en la variable $c queden los 3 ultimos digitos de la variable $a.

    Ahora k se me ocurre…i si el rango solo tiene 2 caracteres? grrr, joder, tendre k remodelarla...

    Salu2!

    EDITADO: Nueva funcion:

    :sisi:



  • 10

    Buenas, ya he acabado de optimizar el codigo con los cambios que me comento KrHonHos :sisi:

    Se ha reducido considerablemente el tiempo de ejecucion :sisi:

    Salu2!



  • 11

    No es por joderte el codigo, pero hay una funcion en php q hace eso :p
    la bola seria poner algo asin:

    $a="10.34.216";
    ereg ("([0-9]{1,2,3}).([0-9]{1,2,3}).([0-9]{1,2,3}).([0-9]{1,2,3})", $a, $b);
    echo $b[1].".".$b[2].".".$b[3].".".$b[4];
    
    

    Eso en principio sera la bola. No lo e probado, pero mas o menos seria asi. Igual me e comido algun punto o algo, pero pruebalo q igual con eso reduces otro webo de lineas ;)

    Ya me contaras

    KrHonHoS



  • 12

    Graciaaaa!! merci tio!!

    Aunke has hecho un fallo…jeje```
    $a="10.34.216";
    ereg ("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})", $a, $b);
    echo $b[3];

    
    PD: yo lo que quiero tener en la variable es "216" nada mas, no toda la ip, es simplemente para saber el rango.
    
    Muchas gracias.


  • 13

    Bueeeeno, hoy tambien me he puesto en ello:

    Podreis observar un cambio de aspecto i mas rapideza.

    Codigo nuevo: AQUI
    web: AQUI

    He hecho un menu de adminstracion, en otro archivo por eso, aun esta sin terminar. Como todo igualmente, jeje.

    Salu2!



  • 14

    :o O_o si me a puesto como colaborador…. :o

    xD Ta bien, pero la parte de la izda se me monta echale un ojo q me parece q lo has echo para una resolucion un pelin alta.

    Por cierto, sigo pensando q deberias hacerlo por paginas, de 40 en 40 o algo asin, pa q no sea mu pesao de mover.

    d1

    KrHonHoS

    P.D: Ya veras como al final entre el eduard y tu termino hablando catalan xD



  • 15

    Resucito esta pagina para deciros que me he vuelto a poner con el tema, ya casi esta lista la version estable con lo minimo para trabajar con ella.

    Vosotros que version le pondriais? v0.1 o v1.0, no lo se, con que criterio se ponen los numeritos de las versiones :p

    Membris Khan me ayudara con la visualizacion de la web, o sea, que sea bonito jeje, que yo ni pajotera idea vamos, soy un negado en estas cosas…

    El tiempo de ejecucion le he rebajado considerablemente respecto a la version anterior, un punto a favor xD

    El nombre del "programa" creo que se llamará "xLAN IPv4 web manager". Tampoco tengo una idea muy clara, pero bueno, tiene buena pinta no? xD

    Os colgaria el codigo pero me kiero esperar un poco a que esten unos apartados listos. Creo que la db no la tocare ya (espero). Aun me falta hacer el asistente de instalacion e desinstalacion...

    Tambien poner lo de la licencia GNU/GPL en cada archivo i tal...

    Estara disponible en todos los idiomas posibles, simplemente necesitaria alguien que me traduciera los textos en cada idioma.

    Bueno, de momento podeis ver la parte visual en http://marcalj.net/RibesWireless/ips.php como siempre.

    La parte de administracion tengo que hacerla con cookies, pq sino es un lio. Estilo PHP-Nuke.

    Bueno, pronto tendreis noticias frescas xD

    Salu2!





Has perdido la conexión. Reconectando a Hardlimit.