source: admin/WebConsole/includes/RecopilaIpesMacs.php @ 3b5fb9d

Last change on this file since 3b5fb9d was a35b7c4, checked in by OpenGnSys Support Team <soporte-og@…>, 5 years ago

#990 Use client broadcast address on WoL

Some universities have computers in a different subnet where the
ogServer is, but ogServer WoL functionality only supported to send
packet to its own subnets. This commit solves this.

Now ogServer sends two WoL packets per client, one with the broadcast
address of the interface indicated in the config file, the other with
the broadcast address calculated with the address and netmask of the
client.

To ensure that the second WoL works correctly you must configure
correctly the IP and netmask of the clients. Also, you have to configure
the network of your organization to route WoL packet to the correct
subnet.

  • Property mode set to 100644
File size: 6.5 KB
Line 
1<?php
2// *************************************************************************************************************************************************
3// Aplicación WEB: ogAdmWebCon
4// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
5// Fecha Creación: Año 2009-2010
6// Fecha Última modificación: Agosto-2010
7// Nombre del fichero: RecopilaIpesMacs.php
8// Descripción :
9//              Recopila las IPes, las Macs y los identificadores de ordenadores de un ámbito determinado
10//
11// Especificaciones:
12//              Esta Función recibe tres parámatros:
13//                      cmd : Un objeto comando totalmente operativo
14//                      ambito:  Ámbito
15//                       idambito: Identificador del ámbito
16//
17//      Devuelve:
18//              Todas los identificadores de ordenadores , las ipes y las macs de los ordenadores que componen el ámbito
19//              Para ellos habrá que tener declarada tres variables globales :
20//                              $cadenaid, $cadenaip y $cadenamac
21// *************************************************************************************************************************************************
22function RecopilaIpesMacs($cmd,$ambito,$idambito,$filtroip=""){
23        global $cadenaid;
24        global $cadenaip;
25        global $cadenamac;
26
27        global $AMBITO_CENTROS;
28        global $AMBITO_GRUPOSAULAS;
29        global $AMBITO_AULAS;
30        global $AMBITO_GRUPOSORDENADORES;
31        global $AMBITO_ORDENADORES;
32
33        $cadenaid="";
34        $cadenaip="";
35        $cadenamac="";
36
37        $rs=new Recordset;
38               
39        if(!empty($filtroip)){
40                $filtroip="'".str_replace(";","','",$filtroip)."'"; // Cambia caracter ; para consulta alfanumérica
41                $cmd->texto="SELECT ip, mac, nombreordenador, idordenador, agentkey
42                               FROM ordenadores
43                              WHERE ip IN (".$filtroip.")";
44                RecorreOrdenadores($cmd);
45        }
46        else{
47                switch($ambito){
48                        case $AMBITO_CENTROS :
49                                $cmd->texto="SELECT idcentro,nombrecentro FROM centros WHERE idcentro=".$idambito;
50                                RecorreCentro($cmd);
51                                break;
52                        case $AMBITO_GRUPOSAULAS :
53                                $cmd->texto="SELECT idgrupo,nombregrupo   FROM grupos WHERE idgrupo=".$idambito." AND tipo=".$AMBITO_GRUPOSAULAS;
54                                RecorreGruposAulas($cmd);
55                                break;
56                        case $AMBITO_AULAS :
57                                $cmd->texto="SELECT idaula,nombreaula  FROM aulas WHERE idaula=".$idambito;
58                                RecorreAulas($cmd);
59                                break;
60                        case $AMBITO_GRUPOSORDENADORES :
61                                $cmd->texto="SELECT idgrupo,nombregrupoordenador   FROM gruposordenadores WHERE idgrupo=".$idambito;
62                                RecorreGruposOrdenadores($cmd);
63                                break;
64                        case $AMBITO_ORDENADORES :
65                                $cmd->texto="SELECT ip, mac, nombreordenador, idordenador, agentkey
66                                               FROM ordenadores
67                                              WHERE idordenador=".$idambito;
68                                RecorreOrdenadores($cmd);
69                                break;
70                        default: // Se trata de un conjunto aleatorio de ordenadores
71                                $cmd->texto="SELECT ip, mac, nombreordenador, idordenador, agentkey
72                                               FROM ordenadores
73                                              WHERE idordenador IN (".$idambito.")";
74                                RecorreOrdenadores($cmd);
75                }
76        }
77        $cadenaid=substr($cadenaid,0,strlen($cadenaid)-1); // Quita la coma
78        $cadenaip=substr($cadenaip,0,strlen($cadenaip)-1); // Quita la coma
79        $cadenamac=substr($cadenamac,0,strlen($cadenamac)-1); // Quita la coma
80}
81//________________________________________________________________________________________________________
82function RecorreCentro($cmd){
83        global $AMBITO_GRUPOSAULAS;
84        $rs=new Recordset;
85        $rs->Comando=&$cmd;
86        if (!$rs->Abrir()) return; // Error al abrir recordset
87        $rs->Primero();
88        if(!$rs->EOF){
89                $idcentro=$rs->campos["idcentro"];
90                $cmd->texto="SELECT idgrupo,nombregrupo  FROM grupos WHERE idcentro=".$idcentro." AND grupoid=0  AND tipo=".$AMBITO_GRUPOSAULAS;
91                RecorreGruposAulas($cmd);
92                $cmd->texto="SELECT idaula,nombreaula   FROM aulas WHERE idcentro=".$idcentro." AND grupoid=0";
93                RecorreAulas($cmd);
94        }
95        $rs->Cerrar();
96}
97//________________________________________________________________________________________________________
98function RecorreGruposAulas($cmd){
99        global $AMBITO_GRUPOSAULAS;
100        $rs=new Recordset;
101        $rs->Comando=&$cmd;
102        if (!$rs->Abrir()) return; // Error al abrir recordset
103        $rs->Primero();
104        while (!$rs->EOF){
105                $idgrupo=$rs->campos["idgrupo"];
106                $cmd->texto="SELECT idgrupo,nombregrupo   FROM grupos WHERE grupoid=".$idgrupo. "  AND tipo=".$AMBITO_GRUPOSAULAS;
107                RecorreGruposAulas($cmd);
108                $cmd->texto="SELECT idaula,nombreaula   FROM aulas WHERE  grupoid=".$idgrupo;
109                RecorreAulas($cmd);
110                $rs->Siguiente();
111        }
112        $rs->Cerrar();
113}
114//________________________________________________________________________________________________________
115function RecorreAulas($cmd){
116        $rs=new Recordset;
117        $rs->Comando=&$cmd;
118        if (!$rs->Abrir()) return; // Error al abrir recordset
119        $rs->Primero();
120        while (!$rs->EOF){
121                $idaula=$rs->campos["idaula"];
122                $cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposordenadores WHERE idaula=".$idaula." AND grupoid=0";
123                RecorreGruposOrdenadores($cmd);
124                $cmd->texto="SELECT ip, mac, nombreordenador, idordenador, agentkey
125                               FROM ordenadores
126                              WHERE idaula=".$idaula." AND grupoid=0";
127                RecorreOrdenadores($cmd);
128                $rs->Siguiente();
129        }
130        $rs->Cerrar();
131}
132//________________________________________________________________________________________________________
133function RecorreGruposOrdenadores($cmd){
134        $rs=new Recordset;
135        $rs->Comando=&$cmd;
136        if (!$rs->Abrir()) return; // Error al abrir recordset
137        $rs->Primero();
138        while (!$rs->EOF){
139                $idgrupo=$rs->campos["idgrupo"];
140                $cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposordenadores WHERE grupoid=".$idgrupo;
141                RecorreGruposOrdenadores($cmd);
142                $cmd->texto="SELECT ip, mac, nombreordenador, idordenador, agentkey
143                               FROM ordenadores
144                              WHERE grupoid=".$idgrupo;
145                RecorreOrdenadores($cmd);
146                $rs->Siguiente();
147        }
148        $rs->Cerrar();
149}
150//________________________________________________________________________________________________________
151function RecorreOrdenadores($cmd){
152        global $cadenaid;
153        global $cadenaip;
154        global $cadenamac;
155        global $cadenaoga;
156        $rs=new Recordset;
157        $rs->Comando=&$cmd;
158        if (!$rs->Abrir()) return; // Error al abrir recordset
159        while (!$rs->EOF){
160                $cadenaid.=$rs->campos["idordenador"].",";
161                $cadenaip.=$rs->campos["ip"].";";
162                $cadenamac.=$rs->campos["mac"].";";
163                $cadenaoga.=(is_null($rs->campos["agentkey"])?"":$rs->campos["agentkey"]).";";
164                $rs->Siguiente();
165        }
166        $rs->Cerrar();
167}
168
169function get_netmasks($cmd, &$macs, &$netmasks){
170        $macs = str_replace(";", "','", $macs);
171        $cmd->texto="SELECT mac, mascara
172                     FROM ordenadores
173                     WHERE mac IN ('".$macs."')";
174        $rs=new Recordset;
175        $rs->Comando=&$cmd;
176        if (!$rs->Abrir()) return;
177        $macs = "";
178        while (!$rs->EOF){
179                $macs.=$rs->campos["mac"].";";
180                $netmasks.=$rs->campos["mascara"].";";
181                $rs->Siguiente();
182        }
183        $rs->Cerrar();
184        $macs = substr($macs, 0, -1);
185        $netmasks = substr($netmasks, 0, -1);
186}
Note: See TracBrowser for help on using the repository browser.