Hola, soy nuevo en el foro y en Perl. Estuve investigando y éste es uno de los mejores lenguajes para manejar cadenas de texto.
Tengo la siguiente necesidad: Para la configuración de unos puntos de acceso inalámbrico (AP) debo agregar una lista de direcciones MAC (en algunos casos más de 2000), para restringir los accesos de clientes no autorizados.
El problema es que la interfaz de configuración del AP no permite ingresarlos todos al tiempo, sino que debo hacerlo uno por uno. Adicionalmente las direcciones MAC del archivo de texto aparecen de la forma AA-BB-... y no de la forma AA:BB:... que requiere el archivo de configuración XML.
Se me ocurrió la idea de exportar el archivo de configuración del AP (genera un XML) y agregarle las direcciones MAC desde el archivo de texto y volver a cargar la configuración con todas estas direcciones.
He intentado múltiples
scripts en Perl, sin éxito, y debido a la premura para configurar estos equipos, ya no tengo tiempo de seguir probando. Por eso recurro a su valiosa ayuda.
Dentro del archivo XML se encuentra una sección como la que sigue (que puede estar ubicada en posiciones diferentes al inicio o final del archivo XML):
Using xml Syntax Highlighting
<bss name="wlan1bssvap14">
<description>Virtual Access Point 14 - Radio 2</description>
<radio>wlan1</radio>
<beacon-interface>wlan1vap14</beacon-interface>
<ignore-broadcast-ssid>off</ignore-broadcast-ssid>
<mac-acl-auth-type>disable</mac-acl-auth-type>
<mac-acl-name>default</mac-acl-name>
<global-radius>off</global-radius>
<radius-ip>192.168.1.1</radius-ip>
<radius-ip-network>ipv4</radius-ip-network>
<radius-ipv6>::</radius-ipv6>
<encrypted-radius-key>1111111</encrypted-radius-key>
<radius-own-ip-interface>brtrunk</radius-own-ip-interface>
<radius-accounting>off</radius-accounting>
<required-vlan-id>off</required-vlan-id>
<radius-port>1812</radius-port>
<radius-accounting-port>1813</radius-accounting-port>
<vlan-tagged-interface>brtrunk</vlan-tagged-interface>
<open-system-authentication>on</open-system-authentication>
<shared-key-authentication>off</shared-key-authentication>
<wpa-cipher-tkip>off</wpa-cipher-tkip>
<wpa-allowed>off</wpa-allowed>
<wpa2-allowed>on</wpa2-allowed>
<rsn-preauthentication>on</rsn-preauthentication>
<broadcast-key-refresh-rate>0</broadcast-key-refresh-rate>
<session-key-refresh-rate>0</session-key-refresh-rate>
<syslog>8</syslog>
<wpa-cipher-ccmp>on</wpa-cipher-ccmp>
<status>down</status>
<mac-acl-mode>deny-list</mac-acl-mode>
</bss>
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
y necesito encontrar la línea que contiene "<mac-acl-mode>deny-list</mac-acl-mode>" para agregarle un retorno de carro y después las líneas:
Using xml Syntax Highlighting
<mac-acl name="default">
<mac>AA:AA:AA:09:09:09</mac>
</mac-acl>
<mac-acl name="default">
<mac>BB:BB:BB:10:10:10</mac>
</mac-acl>
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
para obtener algo como:
Using xml Syntax Highlighting
<bss name="wlan1bssvap14">
<description>Virtual Access Point 14 - Radio 2</description>
<radio>wlan1</radio>
<beacon-interface>wlan1vap14</beacon-interface>
<ignore-broadcast-ssid>off</ignore-broadcast-ssid>
<mac-acl-auth-type>disable</mac-acl-auth-type>
<mac-acl-name>default</mac-acl-name>
<global-radius>off</global-radius>
<radius-ip>192.168.1.1</radius-ip>
<radius-ip-network>ipv4</radius-ip-network>
<radius-ipv6>::</radius-ipv6>
<encrypted-radius-key>11111111</encrypted-radius-key>
<radius-own-ip-interface>brtrunk</radius-own-ip-interface>
<radius-accounting>off</radius-accounting>
<required-vlan-id>off</required-vlan-id>
<radius-port>1812</radius-port>
<radius-accounting-port>1813</radius-accounting-port>
<vlan-tagged-interface>brtrunk</vlan-tagged-interface>
<open-system-authentication>on</open-system-authentication>
<shared-key-authentication>off</shared-key-authentication>
<wpa-cipher-tkip>off</wpa-cipher-tkip>
<wpa-allowed>off</wpa-allowed>
<wpa2-allowed>on</wpa2-allowed>
<rsn-preauthentication>on</rsn-preauthentication>
<broadcast-key-refresh-rate>0</broadcast-key-refresh-rate>
<session-key-refresh-rate>0</session-key-refresh-rate>
<syslog>8</syslog>
<wpa-cipher-ccmp>on</wpa-cipher-ccmp>
<status>down</status>
<mac-acl-mode>deny-list</mac-acl-mode>
<mac-acl name="default">
<mac>AA:AA:AA:09:09:09</mac>
</mac-acl>
<mac-acl name="default">
<mac>BB:BB:BB:10:10:10</mac>
</mac-acl>
</bss>
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Como ya les dije, tengo a parte un archivo de texto que contiene las MAC AA:AA:AA:09:09:09 y BB:BB:BB:10:10:10 y muchas otras más, que está con el siguiente formato:
Using text Syntax Highlighting
AA-AA-AA-09-09-09
BB-BB-BB-10-10-10
...
XX-XX-XX-YY-YY-YY
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
En resumen, necesito encontrar la línea que contiene "<mac-acl-mode>deny-list</mac-acl-mode>" y después de esta agregarle el texto:
Using xml Syntax Highlighting
<mac-acl name="default">
<mac>AA:AA:AA:09:09:09</mac>
</mac-acl>
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
donde "AA:AA:AA:09:09:09" es el parámetro que voy a tomar desde el archivo de texto que no tiene como separadores dos puntos (:), sino guiones (-) y debo hacerlo por cada una de las direcciones MAC que contiene el archivo de texto.
De antemano, agradezco su colaboración.