[PHP] ayuda en codigo

hola primero decir que no tengo ni idea de programación en general (algun pequeño script hace tiempo) y menos de php asi que estoy perdidisomo...

os comento rapidamente, estamos trabajando con la aplicación libre de inventario ocsinventory y con los agentes apple mac nos encontramos que se nos aparecen las maquinas sin mac address, esto es debido a que la aplicación detecta por ejemplo el firewire como tarjeta de red, entoces...estamos viendo de modificar la parte de codigo de los agentes para que solo envie los datos de las conexiónes que tengan la conexión 'up'

esta es la función:
// {{{ _doNetworks()

function _doNetworks()
{
$s_macNodeName = $this->_is10_4 ? 'MAC Address' : 'ethernet_address';
$s_maskNodeName = $this->_is10_4 ? 'SubnetMasks' : 'subnet_mask';
$s_routerNodeName = $this->_is10_4 ? 'Router' : 'router_address';

$s_node = $this->_getDataNode('SPNetworkDataType');
preg_match_all('/^\t{3}<dict>.*?^\t{3}<\/dict>/ms', $s_node, $a_matches);
foreach ($a_matches[0] as $i => $s_node) {
$s_ip = $this->_getValByKey('ip_address', $s_node);
$s_updown = ($s_ip == 'N/A') ? 'Down' : 'Up';
$s_name = $this->_getValByKey('_name', $s_node) . ' - ' . $this->_getValByKey('interface', $s_node);
$s_mask = $this->_getValByKey($s_maskNodeName, $s_node);
if ($s_updown == 'Up') {
$s_subnet = long2ip(ip2long($s_ip) & ip2long($s_mask));
}
else {
$s_subnet = 'N/A';
}

$this->_data['CONTENT']['NETWORKS'][$i]['DESCRIPTION'] = $s_name;
$this->_data['CONTENT']['NETWORKS'][$i]['TYPE'] = $this->_getValByKey('type', $s_node);
$this->_data['CONTENT']['NETWORKS'][$i]['MACADDR'] = $this->_getValByKey($s_macNodeName, $s_node);
$this->_data['CONTENT']['NETWORKS'][$i]['STATUS'] = $s_updown;
$this->_data['CONTENT']['NETWORKS'][$i]['IPADDRESS'] = $s_ip;
$this->_data['CONTENT']['NETWORKS'][$i]['IPMASK'] = $s_mask;
$this->_data['CONTENT']['NETWORKS'][$i]['IPGATEWAY'] = $this->_getValByKey($s_routerNodeName, $s_node);
$this->_data['CONTENT']['NETWORKS'][$i]['IPDHCP'] = 'Unknown';
$this->_data['CONTENT']['NETWORKS'][$i]['IPSUBNET'] = $s_subnet;
$this->_data['CONTENT']['NETWORKS'][$i]['SPEED'] = $this->_getValByKey('MediaSubType', $s_node);
}
}

// }}}


en un principio pensamos que si cambiábamos el codigo por lo siguiente funcionaria:
// {{{ _doNetworks()

function _doNetworks()
{
$s_macNodeName = $this->_is10_4 ? 'MAC Address' : 'ethernet_address';
$s_maskNodeName = $this->_is10_4 ? 'SubnetMasks' : 'subnet_mask';
$s_routerNodeName = $this->_is10_4 ? 'Router' : 'router_address';

$s_node = $this->_getDataNode('SPNetworkDataType');
preg_match_all('/^\t{3}<dict>.*?^\t{3}<\/dict>/ms', $s_node, $a_matches);
foreach ($a_matches[0] as $i => $s_node) {
$s_ip = $this->_getValByKey('ip_address', $s_node);
$s_updown = ($s_ip == 'N/A') ? 'Down' : 'Up';
$s_name = $this->_getValByKey('_name', $s_node) . ' - ' . $this->_getValByKey('interface', $s_node);
$s_mask = $this->_getValByKey($s_maskNodeName, $s_node);
if ($s_updown == 'Up') {
$s_subnet = long2ip(ip2long($s_ip) & ip2long($s_mask));
$this->_data['CONTENT']['NETWORKS'][$i]['DESCRIPTION'] = $s_name;
$this->_data['CONTENT']['NETWORKS'][$i]['TYPE'] = $this->_getValByKey('type', $s_node);
$this->_data['CONTENT']['NETWORKS'][$i]['MACADDR'] = $this->_getValByKey($s_macNodeName, $s_node);
$this->_data['CONTENT']['NETWORKS'][$i]['STATUS'] = $s_updown;
$this->_data['CONTENT']['NETWORKS'][$i]['IPADDRESS'] = $s_ip;
$this->_data['CONTENT']['NETWORKS'][$i]['IPMASK'] = $s_mask;
$this->_data['CONTENT']['NETWORKS'][$i]['IPGATEWAY'] = $this->_getValByKey($s_routerNodeName, $s_node);
$this->_data['CONTENT']['NETWORKS'][$i]['IPDHCP'] = 'Unknown';
$this->_data['CONTENT']['NETWORKS'][$i]['IPSUBNET'] = $s_subnet;
$this->_data['CONTENT']['NETWORKS'][$i]['SPEED'] = $this->_getValByKey('MediaSubType', $s_node);
}
else {
$s_subnet = 'N/A';
}

}


pero el muy jodio me sigue mostrando una conexión firewire
tb se me ha ocurrido (no se como hacerlo) de poner un if de que si la ip empieza por tal rango continue
if ($s_ip == 192.*) no se yo si esto funcionaria...

muchas gracias!
[beer]
0 respuestas