Having that same proble on RB1200. I used this command to clear the user manager log and got 36% of my space back.
/tool user-manger database clear-log
Then rebuild the db with
/tool user-manager database rebuild
lunes, 23 de diciembre de 2013
miércoles, 18 de diciembre de 2013
miércoles, 6 de noviembre de 2013
martes, 5 de noviembre de 2013
como borrar cola de postfix
Como mostrar y vaciar la cola de postfix
10 Jul 2008
Tip rapidísimo de postfix.
Para mostrar que emails están en cola, osea, aun no se han enviado:
Para mostrar que emails están en cola, osea, aun no se han enviado:
mailq
Para borrar un email de la cola:postsuper -d queue_id
Para borrar todos esos emails de la cola:postsuper -d ALL
http://pablasso.com/200807/como-mostrar-y-vaciar-la-cola-de-postfix/
martes, 22 de octubre de 2013
jueves, 17 de octubre de 2013
Cambiar opciones en equipos airmax desde ssh
Para cambiar el listado de frecuencias a automático
sed -i s/`grep wireless.1.scan_list.channels /tmp/system.cfg`/wireless.1.scan_list.channels=0/g /tmp/system.cfg
Para cambiar el ancho de banda de una antena cliente, de lo que tenga a "10"
XM.v5.5.6# sed -i s/`grep radio.1.chanbw /tmp/system.cfg`/radio.1.chanbw=10/g /tmp/system.cfg | grep chanbw
radio.1.chanbw=10
XM.v5.5.6#
Luego se aplica la configuración con el comando "cfgmtd -w -f /tmp/system.cfg"
XM.v5.5.6# cfgmtd -w -f /tmp/system.cfg
Found Active on[1] ...
Found Backup1 on[2] ...
Storing Active[2] ... [%100]
Active->Backup[1] ... [%100]
XM.v5.5.6#
y tras guardar los cambios, hacer un reboot de la antena
Activar telnet
sed -i s/`grep telnetd.status /tmp/system.cfg`/telnetd.status=enabled/g /tmp/system.cfg
De esta forma, podriamos cambiar por ejemplo el ancho de banda de 20mhz a 10mhz en varias antenas cliente de un plumazo. Por ejemplo, teniendo el telnet activo en las antenas o habiendo establecido relaciones de confianza por ssh se podrian ejecutar estos comandos de forma automática.
Otra opción, sería hacerlo desde el aircontrol, con la opcion de "ejecutar comando remoto"
sed -i s/`grep telnetd.status /tmp/system.cfg`/telnetd.status=enabled/g /tmp/system.cfg &
cfgmtd -w -f /tmp/system.cfg & reboot
lunes, 7 de octubre de 2013
Buscar ficheros que ocupan mucho espacio en Linux
sudo find / -type f -size +100000k -exec ls -lh {} \; | awk '{ print $0 ": " $5 }'
fuente: http://ubuntulife.wordpress.com/2010/05/06/tip-como-encontrar-ficheros-que-ocupan-mucho-espacio-en-linux/
fuente: http://ubuntulife.wordpress.com/2010/05/06/tip-como-encontrar-ficheros-que-ocupan-mucho-espacio-en-linux/
jueves, 3 de octubre de 2013
Backup y restore de todas las bases de datos en mysql
Para hacer el backup, el dump de todas las bases de datos:
Fuente: http://stackoverflow.com/questions/4749448/mysql-dump-all-databases-and-create-or-recreate-them-on-import
mysqldump -h server -u root -p --all-databases > all_dbs.sql
Para hacer el restore del dump de todas las bases de datos:mysql -u root -p < all_dbs.sql
Fuente: http://stackoverflow.com/questions/4749448/mysql-dump-all-databases-and-create-or-recreate-them-on-import
miércoles, 14 de agosto de 2013
asterisk voicemail multiple email addresses
Teniendo instalado postfix en el mismo servidor que está asterisk hay que modificar el fichero main.cf
virtual_alias_domains = pbxfulano.es
virtual_alias_maps = hash:/etc/postfix/virtual
Se crea el fichero /etc/postfix/virtual
lista@pbxfulano.es pepe@fulano.es, pepa@fulano.es, juan@fulano.es, david@gmail.com
como email para enviar el mensaje del voicebox de asterisk se utiliza lista@pbxfulano.es, de esta forma este mensaje se reenvía a través de postfix a las demás direcciones
Para cargar la configuración
postmap /etc/postfix/virtual
service postfix reload
y para probar que funciona...
echo "prueba" | mail -s "prueba" lista@pbxfulano.es
virtual_alias_domains = pbxfulano.es
virtual_alias_maps = hash:/etc/postfix/virtual
Se crea el fichero /etc/postfix/virtual
lista@pbxfulano.es pepe@fulano.es, pepa@fulano.es, juan@fulano.es, david@gmail.com
como email para enviar el mensaje del voicebox de asterisk se utiliza lista@pbxfulano.es, de esta forma este mensaje se reenvía a través de postfix a las demás direcciones
Para cargar la configuración
postmap /etc/postfix/virtual
service postfix reload
y para probar que funciona...
echo "prueba" | mail -s "prueba" lista@pbxfulano.es
jueves, 18 de julio de 2013
Configurar router edgemax lite con coovachilli hotspot
Pasos seguidos:
1- En el siguiente enlace se puede descargar la última versión hasta el momento del firmware de ubiquiti
para actualizar el arbol una vez metidos los repositorios:
sudo apt-get update
- Actualizar a la última versión de firmware
- Meter los repositorios de Debian
- Descargar hasrel
- Instalar librería que tiene la dependencia de hasrel
- Descargar deb de coova-chilli 1.3.0 para mips
- Editar fichero de configuración de chilli
- Activar DNS cache en el router
- Activar NAT masquerading
1- En el siguiente enlace se puede descargar la última versión hasta el momento del firmware de ubiquiti
Para actualizar el firmware, hay que acceder al router por ssh o desde el CLI.
$add system image fichero_de_imagen.tar
Mas info en este enlace: actualizar firmware
2- Una vez actualizado el firmware, hay que meter los repositorios de Debian en el router
Se pueden seguir las instrucciones en el siguiente link: debian repos
Comandos a seguir:
configure set system package repository squeeze components 'main contrib non-free' set system package repository squeeze distribution squeeze set system package repository squeeze url http://http.us.debian.org/debian set system package repository squeeze-security components main set system package repository squeeze-security distribution squeeze/updates set system package repository squeeze-security url http://security.debian.org commit save exit
para actualizar el arbol una vez metidos los repositorios:
sudo apt-get update
3- Antes de instalar coovachilli, este necesita una dependencia "hasrel", que se puede
descargar de los repositorios de debian
aquí dejo un enlace haserl_0.9.29-3_mips.deb
una vez descargado se instala con
# dpkg -i haserl_0.9.29-3_mips.deb
este dará fallo.. ya que necesita la siguiente dependencia que se puede bajar directamente
del repositorio "liblua5.1-0".
Con el siguiente comando se puede instalar la dependencia sin problema
#apt-get install liblua5.1-0
4 - Decargar el paquete de coovachilli
foro
coova-chilli_1.3.0_mips.deb
coova-chilli_1.3.0_mips.deb
para instalarlo
#dpkg -i coova....
5- Edición del fichero /etc/chilli/default
HS_WANIF=eth1 # El eth1 esta por dhcp conectado a un router HS_LANIF=eth2 # En eth2 conectarían los usuarios del portal cautivo HS_NETWORK=10.11.0.0 # HotSpot Network (must include HS_UAMLISTEN) HS_NETMASK=255.255.255.0 # HotSpot Network Netmask HS_UAMLISTEN=10.11.0.1 # HotSpot IP Address (on subscriber network) HS_UAMPORT=3990 # HotSpot UAM Port (on subscriber network) HS_UAMUIPORT=4990 # HotSpot UAM "UI" Port (on subscriber network, for embedded portal) HS_DNS1=10.11.0.1 # he puesto esta DNS para hacer la cache HS_DNS2=8.8.8.8 HS_NASID=nas01 HS_RADIUS=97.14X.XXX.XX HS_RADIUS2=97.14X.XXX.XX HS_UAMALLOW=www.coova.org HS_RADSECRET=8U8W2CPTvVcD # esta es mi clave de radius HS_UAMSECRET=change-me # Set to be your UAM secret HS_UAMALIASNAME=chilli HS_UAMSERVER=$HS_UAMLISTEN HS_UAMFORMAT=http://\$HS_UAMLISTEN:\$HS_UAMUIPORT/www/login.chi HS_UAMHOMEPAGE=http://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html HS_MODE=hotspot HS_TYPE=chillispot HS_WWWDIR=/etc/chilli/www HS_WWWBIN=/etc/chilli/wwwsh HS_PROVIDER=Coova HS_PROVIDER_LINK=http://www.coova.org/ HS_LOC_NAME="My HotSpot" # WISPr Location Name and used in por
también hay que editar /etc/default/chilli para poner start_chilli=1
root@ubnt:/home/ubnt# cat /etc/default/chilli START_CHILLI=1 CONFFILE="/etc/chilli.conf" HS_USER="chilli"
6- Hacer que el rotuer tenga cache dns
he puesto que escucha en el eth2 para que los clientes de coovachilli sean los que tengan
acceso al cache de dns
7- Activar masquerading NAT
Buenos pues con todo esto, ya debería ser una guía suficiente para empezar a probar
el edgeos router con coovachilli
8- Editar wwwsh, por algun motivo no funciona bien el fichero que viene por defecto
#!/bin/sh # (c) 2007 David Bird; Released under GPL. # This simple script dispatches the <file>.chi embedded CGI scripts. # If <file>.chi exists, and we have haserl, then we run "haserl file.chi" # Otherwise, we look for <file>.chi.sh files to run as shell scripts. file=$(basename $1) dir=$(dirname $1) haserl=$(which haserl 2>/dev/null) cd $dir # should be make a bit safer! if [ -z "$haserl" ]; then if [ -e "$file.sh" ]; then sh $file.sh else echo "<p>You need to install haserl to serve pages with this wwwsh script!</p>" echo "<p>see <a href='http://haserl.sourceforge.net/'>http://haserl.sourceforge.net/</a></p>" fi exit fi $haserl $file
jueves, 20 de junio de 2013
viernes, 14 de junio de 2013
Cambiar la hora en esxi 5.1 desde la shell
esxcli system time set -d 10 -H 09 -m 17 -M 1 -s 00 -y 2012
date --> 2012-1-10 9:17:00
date --> 2012-1-10 9:17:00
jueves, 13 de junio de 2013
Crear alertas de email a partir de un pattern en un fichero de log
Descargar los paquetes
apt-get install libmailtools-perl libunix-syslog-perl libfile-tail-perl libproc-daemon-perl
Agregar los módulos a CPAN
for m in Mail::Mailer Proc::Daemon Unix::Syslog File::Tail;
do
perl -MCPAN -e "install $m";
done
Descargar el script de aquí http://unixlore.net/downloads/logmon.pl.txt
#!/usr/bin/perl -wT
#
# Parses given logfile, looking for specified pattern, sends alert or
# logs message.
#
# Copyright (c) 2012 Doug Maxwell <doug@unixlore.net>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
#
# Sample syslog error we want to alert on and usage:
#
# Jul 17 08:02:49 kaylee mysqld[1532]: 110717 8:02:49 [ERROR] /usr/sbin/mysqld: Table './mysql/user' is marked as crashed and should be repaired
#
# logmon.pl -p 'mysqld.+?table.+?crashed' -m you@example.com -u nobody -g adm -f /var/log/syslog -i 120
#
# Needs Mail::Mailer, Proc::Daemon, Unix::Syslog and File::Tail
# installed - the others are core modules.
#
# On Debian/Ubuntu:
# apt-get install libmailtools-perl libunix-syslog-perl libfile-tail-perl libproc-daemon-perl
#
# On Fedora
# yum install perl-MailTools perl-Unix-Syslog perl-File-Tail perl-Proc-Daemon
#
# CPAN:
#
# for m in Mail::Mailer Proc::Daemon Unix::Syslog File::Tail; do perl -MCPAN -e "install $m"; done
#
use strict;
use File::Tail;
use Mail::Mailer;
use Proc::Daemon;
use Unix::Syslog qw(:subs);
use Unix::Syslog qw(:macros);
use Getopt::Std;
use Sys::Hostname;
use POSIX qw(setuid setgid);
use English;
our ($opt_m,$opt_f,$opt_p,$opt_u,$opt_g,$opt_i,$opt_h,$opt_d,$opt_v);
getopts('hdvm:f:p:u:g:i:');
usage() && exit if ( $opt_h || !$opt_p);
sub usage {
print "\n$0 synopsis: Daemon that periodically checks logfile for a pattern and send alerts\n";
print "Pattern is always required. If no other options are given, defaults to syslog alerts and monitors /var/log/messages for given pattern.\n";
print "Usage: $0 -p pattern [-m alerts\@example.com] [-f logfile] [-u run as user] [-g run as group] [-i max interval] [-v] [-d] [-h]\n";
print "-m: Email destination for alerts\n-f: logfile to monitor\n-p: Pattern to match against lines in logfile (Perl regexp, match is case-insensitive)\n-u: Run with permissions of user\n-g: Run with permissions of group\n-i: Max time to sleep between checks\n-d: Debug output to STDERR, do not daemonize\n-v: Verbose logging (use with caution or you may have endless alerts)\n-h: This help text\n\n";
}
my $DEBUG = 1 if ( $opt_d );
if ( !$DEBUG ) {
# Fork and detach
log_alert("Forking and detaching from controlling terminal...");
Proc::Daemon::Init;
}
# Drop privileges if needed.
if ( $opt_g && $UID == 0 ) {
setgid( scalar getgrnam $opt_g ) or log_alert($!);
log_alert("Now running with permissions of group $opt_g") if ( $GID );
}
if ( $opt_u && $UID == 0 ) {
setuid( scalar getpwnam $opt_u ) or log_alert($!);
log_alert("Now running with permissions of user $opt_u") if ( $UID );
}
# Clean up our environment for taint mode
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
$ENV{PATH} = "/bin:/usr/bin";
# Source of email alerts
my $from = 'root@example.com';
# The logfile we are monitoring. Make sure we can read it and that it
# exists.
my $logfile = "/var/log/messages";
if ( $opt_f ) {
if ( ! -r $opt_f ) {
log_alert("Logfile $opt_f does not exist or is not readable");
die;
} else {
$logfile = $opt_f;
}
}
# Pre-compile the regexp we are using
my $pattern = qr/$opt_p/io;
# Mail recipient for alerts
my $recipient = $opt_m if ( $opt_m );
# Max time to wait between checks. File::Tail uses an adaptive
# algorithm to vary the time between file checks, depending on the
# amount of data being written to the file. This is the maximum
# allowed interval.
my $maxinterval = 60;
$maxinterval = $opt_i if ( $opt_i );
my $file = File::Tail->new(name=>$logfile, maxinterval=> $opt_i, adjustafter=>3) or ( log_alert($!) && die );
( $opt_v ) ? log_alert("Running and monitoring $logfile for $pattern") : log_alert("Running and monitoring $logfile");
# Loop as long as we keep getting lines from the file
while (defined(my $line = $file->read)) {
if ( $line =~ /$pattern/ ) {
chomp($line);
if ( $opt_m ) {
send_mail_alert($from,$recipient,$line);
} else {
( $opt_v ) ? log_alert("Matched $pattern against '$line' in $logfile") : log_alert("$logfile matched!");
}
}
}
# Send an email alert using sendmail on the localhost
sub send_mail_alert {
my ($from,$recipient,$body) = @_;
my $hostname = hostname();
my $subject = "Alert from $0 on $hostname while monitoring $logfile for $pattern";
my $mailer = Mail::Mailer->new("sendmail");
$mailer->open({ From => $from,
To => $recipient,
Subject => $subject,
})
or log_alert($!);
print $mailer $body or log_alert($!);
$mailer->close( );
log_alert("Sent email alert to $recipient");
return;
}
# Log a message to this system's syslog. If debugging is enabled, we
# are not a daemon and we just print to STDERR.
sub log_alert {
my $text = shift;
if ( $DEBUG ) {
print STDERR "$0: $text\n";
return;
}
openlog ("$0", LOG_PERROR|LOG_CONS , LOG_LOCAL7);
syslog (LOG_INFO, "$text\n");
closelog();
return;
}
Chequear que la sintaxis es correcta con el comando:
perl -cwT ./logmon.pl
Copiar el fichero en sbin con sus permisos con el siguiente comando
install -m 755 logmon.pl /usr/local/bin/
Para ejecutar el comando se puede hacer con:
logmon.pl -p 'pattern buscada' -m pepe@gmail.com -u nobody -g adm -f /var/log/kern.log -i 120
para ejecutarlo en modo debur -dv (debug + verbose)
para matar el demonio pkill logmon
Fuente: http://www.unixlore.net/articles/monitoring-alerting-patterns-linux-logfiles.html
Etiquetas:
alert,
bash,
howto,
logs,
monitoring,
notifications,
tips
martes, 11 de junio de 2013
Comandos de control de sipwise desde consola
ngcp-kamctl lb and ngcp-sercmd lb
for querying kamailio functions, for example:
ngcp-sercmd lb htable.dump ipban.
for querying kamailio functions, for example:
ngcp-sercmd lb htable.dump ipban.
miércoles, 5 de junio de 2013
proxy transparente con squid en debian
http://parbaedlo.wordpress.com/2013/03/08/configurar-proxy-squid-transparente-en-linux-debian-squeeze/
Ahora configuraremos proxy transparente pero para poder comenzar
previamente tenemos que configurar las tarjetas de red y el DHCP.
para configurar las tarjetas de red editar el archivo /etc/network/interfaces para que quede de la siguiente manera
configurar proxy squid transparente en linux debian squeeze
Publicado por parbaedlo el marzo 8, 2013
Publicado en: Uncategorized.
Etiquetado: configurar proxy, instalar proxy, instalar proxy transparente.
Dejar un comentario
para configurar las tarjetas de red editar el archivo /etc/network/interfaces para que quede de la siguiente manera
auto lo eth0 eth1
iface lo inet loopback
#Configuracion para interfaz con red eth0 con internet
allow-hotplug eth0
iface eth0 inet static
address 172.16.2.111
netmask 255.255.255.0
gateway 172.16.2.1
network 172.16.2.0
broadcast 172.16.2.255
dns-nameservers 8.8.8.8 #esto también se puede configurar en /etc/resolv.conf
#Configuracion para interfaz eth1 con red lan interna privada
allow-hotplug eth1
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
Ahora instalamos y configuramos el servidor DHCP que nos servira para proporcionar ips automaticos a las pc’s de la red lan # aptitude install isc-dhcp-server
Configuramos el servicio de DHCP para que este disponible en la red
interna y acepte las conexiones en dicha red, en este caso es la
interfaz eth1, esto se configura en el archivo
/etc/default/isc-dhcp-serverINTERFACES="eth0"
Ahora tenemos que modificar algunas lineas el archivo /etc/dhcpd.conf
para especificar rango de ips y tiempo que se le proporcionara el ip a
la maquina clienteoption domain-name "example.org";
option domain-name-servers 8.8.8.8, 4.4.4.4;
default-lease-time 600;
max-lease-time 7200;
#SubNet red lan.
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.101 192.168.2.199;
#option domain-name-servers 8.8.8.8; #similar a la parte superior
#option domain-name "example.org"; #similar a la parte superior
option routers 192.168.2.1;
option broadcast-address 192.168.2.255;
#default-lease-time 86400; #similar a la parte superior
#max-lease-time 172800; #similar a la parte superior
}
Con el servidor DHCP se puede asignar un ip especifica a una
determinada mac-address, estas direcciones fijas no deben estar en la
gama de las direcciones reservadas para la distribución dinámica.host desktop {
hardware ethernet 01:23:45:67:89:10;
fixed-address 192.168.2.2;
}
host laptop {
hardware ethernet 01:23:45:67:89:11;
fixed-address 192.168.2.3;
}
Reiniciar el servicio de dhcp:# /etc/init.d/isc-dhcp-server restart
Ahora el ultimo paso instalación y configuración de squid, procedemos a la instalacion con el siguiente comando # aptitude install squid
Ahora vamos a hacer unos cambios en el fichero de configuración de
squid (/etc/squid/squid.conf). Primero localizamos la línea con el
puerto de entrada de squid (por defecto http_port 3128) y añadimos el
parámetro transparente. Debe de quedarnos algo así:http_port 3128 transparent
A continuación de esto, y en el mismo fichero, añadimos las siguientes líneas:acl redlan src 192.168.2.0/24
http_access allow redlan
Ahora sólo nos queda configurar la máquina como router y direccionar
el tráfico web (puerto 80) que recibe por el interfaz interno (eth1) al
puerto 3128 que es el que usa squid. Esto lo hacemos gracias a IPtables
(que vienen instaladas en Debian por defecto) el script que se detalla a
continuación, se debe configurar para que se ejecute de forma
automática.#!/bin/sh
# squid server IP
SQUID_SERVER="192.168.2.1"
# Interface connected to Internet
INTERNET="eth0"
# Interface connected to LAN
LAN_IN="eth1"
# Squid port
SQUID_PORT="3128"
# DO NOT MODIFY BELOW
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
#modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# set this system as a router for Rest of LAN
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
# DROP everything and Log it
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP
Para guarde el anterior script nos creamos la carpeta
/etc/iptables-script y dentro de ahi colocamos el script con el nombre
de proxy.sh, de damos permisos de ejecución: # chmod +x /etc/iptables-script/proxy.sh
Y le indicamos al SO que ejecute dicho script al iniciar el sistema
para esto editamos el archivo /etc/rc.local, y antes de exit colocamos
la siguiente linea:sh /etc/iptables-script/proxy.sh
Load Balancer - Balancero de Carga con dos Wan usando router EdgeMax de ubiquiti
set protocols static route 0.0.0.0/0 next-hop 192.168.2.1
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static table 1 mark 1
set protocols static table 1 route 0.0.0.0/0 next-hop 192.168.2.1
set protocols static table 2 mark 2
set protocols static table 2 route 0.0.0.0/0 next-hop 192.168.1.1
set firewall modify balance rule 10 action modify
set firewall modify balance rule 10 description 'restore mark from connection'
set firewall modify balance rule 10 modify connmark restore-mark
set firewall modify balance rule 20 action accept
set firewall modify balance rule 20 description 'accept the packet if the mark isnt zero'
set firewall modify balance rule 20 mark !0
set firewall modify balance rule 30 action modify
set firewall modify balance rule 30 description 'for new connections mark 50% with mark 1'
set firewall modify balance rule 30 modify mark 1
set firewall modify balance rule 30 protocol tcp_udp
set firewall modify balance rule 30 state new enable
set firewall modify balance rule 30 statistic probability 50%
set firewall modify balance rule 40 action modify
set firewall modify balance rule 40 description 'for packets with mark zero, mark with 2'
set firewall modify balance rule 40 mark 0
set firewall modify balance rule 40 modify mark 2
set firewall modify balance rule 40 protocol tcp_udp
set firewall modify balance rule 40 state new enable
set firewall modify balance rule 50 action modify
set firewall modify balance rule 50 description 'save the packet mark to the connection mark'
set firewall modify balance rule 50 modify connmark save-mark
set interfaces ethernet eth2 firewall in modify balance
set firewall modify ISP1_IN rule 1 description 'use mark 1 for new ISP1 connections'
set firewall modify ISP1_IN rule 1 action modify
set firewall modify ISP1_IN rule 1 log enable
set firewall modify ISP1_IN rule 1 modify connmark set-mark 1
set firewall modify ISP1_IN rule 1 protocol tcp_udp
set firewall modify ISP1_IN rule 1 state new enable
set firewall modify ISP2_IN rule 1 description 'use mark 2 for new ISP2 connections'
set firewall modify ISP2_IN rule 1 action modify
set firewall modify ISP2_IN rule 1 log enable
set firewall modify ISP2_IN rule 1 modify connmark set-mark 2
set firewall modify ISP2_IN rule 1 protocol tcp_udp
set firewall modify ISP2_IN rule 1 state new enable
set interfaces ethernet eth0 firewall in modify ISP1_IN
set interfaces ethernet eth1 firewall in modify ISP2_IN
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set protocols static table 1 mark 1
set protocols static table 1 route 0.0.0.0/0 next-hop 192.168.2.1
set protocols static table 2 mark 2
set protocols static table 2 route 0.0.0.0/0 next-hop 192.168.1.1
set firewall modify balance rule 10 action modify
set firewall modify balance rule 10 description 'restore mark from connection'
set firewall modify balance rule 10 modify connmark restore-mark
set firewall modify balance rule 20 action accept
set firewall modify balance rule 20 description 'accept the packet if the mark isnt zero'
set firewall modify balance rule 20 mark !0
set firewall modify balance rule 30 action modify
set firewall modify balance rule 30 description 'for new connections mark 50% with mark 1'
set firewall modify balance rule 30 modify mark 1
set firewall modify balance rule 30 protocol tcp_udp
set firewall modify balance rule 30 state new enable
set firewall modify balance rule 30 statistic probability 50%
set firewall modify balance rule 40 action modify
set firewall modify balance rule 40 description 'for packets with mark zero, mark with 2'
set firewall modify balance rule 40 mark 0
set firewall modify balance rule 40 modify mark 2
set firewall modify balance rule 40 protocol tcp_udp
set firewall modify balance rule 40 state new enable
set firewall modify balance rule 50 action modify
set firewall modify balance rule 50 description 'save the packet mark to the connection mark'
set firewall modify balance rule 50 modify connmark save-mark
set interfaces ethernet eth2 firewall in modify balance
set firewall modify ISP1_IN rule 1 description 'use mark 1 for new ISP1 connections'
set firewall modify ISP1_IN rule 1 action modify
set firewall modify ISP1_IN rule 1 log enable
set firewall modify ISP1_IN rule 1 modify connmark set-mark 1
set firewall modify ISP1_IN rule 1 protocol tcp_udp
set firewall modify ISP1_IN rule 1 state new enable
set firewall modify ISP2_IN rule 1 description 'use mark 2 for new ISP2 connections'
set firewall modify ISP2_IN rule 1 action modify
set firewall modify ISP2_IN rule 1 log enable
set firewall modify ISP2_IN rule 1 modify connmark set-mark 2
set firewall modify ISP2_IN rule 1 protocol tcp_udp
set firewall modify ISP2_IN rule 1 state new enable
set interfaces ethernet eth0 firewall in modify ISP1_IN
set interfaces ethernet eth1 firewall in modify ISP2_IN
martes, 4 de junio de 2013
lunes, 3 de junio de 2013
wifi chillispot roaming with radius
http://www.chillispot.info/chilliforum/viewtopic.php?id=107
http://robin.forumup.it/about2471-0.html
http://lists.freeradius.org/pipermail/freeradius-devel/2011-August/006263.html
Pues según he podido investigar en varios sitios, para hacer roaming en varios APs, una forma (no se si la mejor o la peor pero no deja de ser una solución) es tras autenticarse con el ticket, añadir el usuario en rackcheck con la mac, de la siguiente forma
1º En el radius (en mi caso freeradius con backend de mysql) se crean los usuarios usando como username la MAC del dispositivo que se quiere autenticar sin preguntar en el portal cautivo. Como atributo, Password y como Value, un password arbitrario que será para todos el mismo. Este password se ve en el segundo paso, porque hay que configurarlo en el chilli.conf
mysql> select * from radcheck where attribute='Password';
+------+-------------------+-----------+----+---------+
| id | username | attribute | op | value |
+------+-------------------+-----------+----+---------+
| 1829 | 64-A7-69-81-10-ED | Password | := | pass123 |
| 1831 | 98-0C-82-96-2F-0C | Password | := | pass123 |
+------+-------------------+-----------+----+---------+
La mac del cliente se puede obtener despues de la primera autenticación existosa de la tabla radacct
en el campo callingstationid
| radacctid | acctsessionid | acctuniqueid | username | groupname | realm | nasipaddress | nasportid | nasporttype | acctstarttime | acctstoptime | acctsessiontime | acctauthentic | connectinfo_start | connectinfo_stop | acctinputoctets | acctoutputoctets | calledstationid | callingstationid | acctterminatecause | servicetype | framedprotocol | framedipaddress | acctstartdelay | acctstopdelay | xascendsessionsvrkey |
+-----------+------------------+------------------+-------------------+-----------+-------+--------------+-----------+-----------------+---------------------+--------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-------------------+-------------------+--------------------+-------------+----------------+-----------------+----------------+---------------+----------------------+
| 139 | 51b0a3c100000005 | 21b6a99e5ed39028 | 64-A7-69-81-10-ED | | | 0.0.0.0 | 5 | Wireless-802.11 | 2013-06-06 16:59:47 | NULL | 0 | | | | 0 | 0 | 00-27-22-C4-29-3D | 64-A7-69-81-10-ED | | | | 192.168.182.7 | 0 | 0 | |
+-----------+------------------+------------------+-------------------+-----------+-------+--------------+-----------+-----------------+---------------------+--------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-------------------+-------------------+--------------------+-------------+----------------+-----------------+----------------+---------------+----------------------+
2ª parte
añadir a las opciones de chillispot los parametros de macauth y macpassword = pass123 (en mi caso)
Mi fichero de chillispot es el siguiente:
coaport 3799
lease 600
dhcpif ath0
radiusserver1 10.0.1.254
radiusserver2 10.0.1.254
radiusauthport 1812
radiusacctport 1813
dns1 8.8.8.8
net 192.168.182.0/24
uamserver http://10.0.1.254/hotspotlogin.php
radiusnasid ubiquiti
radiussecret 1964os
uamallowed 192.168.182.0/24,10.0.1.254,8.8.8.8
uamsecret 1964os
macauth
macpasswd pass123
3º Meter un trigger para que cuando se autentique alguien, meta en radcheck la mac
DELIMITER |
CREATE TRIGGER mac_radcheck AFTER INSERT ON radpostauth
FOR EACH ROW BEGIN
INSERT INTO radcheck (username,attribute,op,value) VALUES('mac','Password',':=','pass123');
END
|
mac hay que sustituirlo por la consulta que me da la mac del usuario autenticado
select callingstationid from radacct where username='vitoria' order by acctstarttime desc limit 1;
y todo junto sería...
DELIMITER |
CREATE TRIGGER mac_radcheck AFTER INSERT ON radpostauth
FOR EACH ROW BEGIN
INSERT INTO radcheck (username,attribute,op,value) VALUES((select callingstationid from radacct where username=NEW.username order by acctstarttime desc limit 1),'Password',':=','pass123');
END
|
delimiter ;
------
El trigger no funciona bien, he decidido poner un cron con alguna query como la siguiente
select distinct radpostauth.username,radacct.callingstationid from radpostauth,radacct where radpostauth.username=radacct.username and radpostauth.username not like '%-%';
http://robin.forumup.it/about2471-0.html
http://lists.freeradius.org/pipermail/freeradius-devel/2011-August/006263.html
Pues según he podido investigar en varios sitios, para hacer roaming en varios APs, una forma (no se si la mejor o la peor pero no deja de ser una solución) es tras autenticarse con el ticket, añadir el usuario en rackcheck con la mac, de la siguiente forma
1º En el radius (en mi caso freeradius con backend de mysql) se crean los usuarios usando como username la MAC del dispositivo que se quiere autenticar sin preguntar en el portal cautivo. Como atributo, Password y como Value, un password arbitrario que será para todos el mismo. Este password se ve en el segundo paso, porque hay que configurarlo en el chilli.conf
mysql> select * from radcheck where attribute='Password';
+------+-------------------+-----------+----+---------+
| id | username | attribute | op | value |
+------+-------------------+-----------+----+---------+
| 1829 | 64-A7-69-81-10-ED | Password | := | pass123 |
| 1831 | 98-0C-82-96-2F-0C | Password | := | pass123 |
+------+-------------------+-----------+----+---------+
La mac del cliente se puede obtener despues de la primera autenticación existosa de la tabla radacct
en el campo callingstationid
| radacctid | acctsessionid | acctuniqueid | username | groupname | realm | nasipaddress | nasportid | nasporttype | acctstarttime | acctstoptime | acctsessiontime | acctauthentic | connectinfo_start | connectinfo_stop | acctinputoctets | acctoutputoctets | calledstationid | callingstationid | acctterminatecause | servicetype | framedprotocol | framedipaddress | acctstartdelay | acctstopdelay | xascendsessionsvrkey |
+-----------+------------------+------------------+-------------------+-----------+-------+--------------+-----------+-----------------+---------------------+--------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-------------------+-------------------+--------------------+-------------+----------------+-----------------+----------------+---------------+----------------------+
| 139 | 51b0a3c100000005 | 21b6a99e5ed39028 | 64-A7-69-81-10-ED | | | 0.0.0.0 | 5 | Wireless-802.11 | 2013-06-06 16:59:47 | NULL | 0 | | | | 0 | 0 | 00-27-22-C4-29-3D | 64-A7-69-81-10-ED | | | | 192.168.182.7 | 0 | 0 | |
+-----------+------------------+------------------+-------------------+-----------+-------+--------------+-----------+-----------------+---------------------+--------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-------------------+-------------------+--------------------+-------------+----------------+-----------------+----------------+---------------+----------------------+
2ª parte
añadir a las opciones de chillispot los parametros de macauth y macpassword = pass123 (en mi caso)
Mi fichero de chillispot es el siguiente:
coaport 3799
lease 600
dhcpif ath0
radiusserver1 10.0.1.254
radiusserver2 10.0.1.254
radiusauthport 1812
radiusacctport 1813
dns1 8.8.8.8
net 192.168.182.0/24
uamserver http://10.0.1.254/hotspotlogin.php
radiusnasid ubiquiti
radiussecret 1964os
uamallowed 192.168.182.0/24,10.0.1.254,8.8.8.8
uamsecret 1964os
macauth
macpasswd pass123
3º Meter un trigger para que cuando se autentique alguien, meta en radcheck la mac
DELIMITER |
CREATE TRIGGER mac_radcheck AFTER INSERT ON radpostauth
FOR EACH ROW BEGIN
INSERT INTO radcheck (username,attribute,op,value) VALUES('mac','Password',':=','pass123');
END
|
mac hay que sustituirlo por la consulta que me da la mac del usuario autenticado
select callingstationid from radacct where username='vitoria' order by acctstarttime desc limit 1;
y todo junto sería...
DELIMITER |
CREATE TRIGGER mac_radcheck AFTER INSERT ON radpostauth
FOR EACH ROW BEGIN
INSERT INTO radcheck (username,attribute,op,value) VALUES((select callingstationid from radacct where username=NEW.username order by acctstarttime desc limit 1),'Password',':=','pass123');
END
|
delimiter ;
------
El trigger no funciona bien, he decidido poner un cron con alguna query como la siguiente
select distinct radpostauth.username,radacct.callingstationid from radpostauth,radacct where radpostauth.username=radacct.username and radpostauth.username not like '%-%';
domingo, 2 de junio de 2013
Balanceadores de carga
http://linuxpoison.blogspot.com.es/2008/09/opensource-load-balancing-software.html
http://www.linuxforu.com/2009/05/balancing-traffic-across-data-centres-using-lvs/
http://www.linuxforu.com/2009/05/balancing-traffic-across-data-centres-using-lvs/
jueves, 30 de mayo de 2013
Edgemax de ubiquiti - documentación de vyatta 6.3
http://ftp.het.net/iso/vyatta/vc6.3/docs/
Balanceador de carga
http://ftp.het.net/iso/vyatta/vc6.3/docs/Vyatta_HA_R6.3_v01.pdf
Política de enrutado (Esta versión de vyatta no soporta
Balanceador de carga
http://ftp.het.net/iso/vyatta/vc6.3/docs/Vyatta_HA_R6.3_v01.pdf
Política de enrutado (Esta versión de vyatta no soporta
Policy-based routing
http://ftp.het.net/iso/vyatta/vc6.3/docs/Vyatta_RoutingPolicies_R6.3_v01.pdf
miércoles, 29 de mayo de 2013
Como hacer debug del dhcp usando tcpdump
http://www.cyberciti.biz/faq/linux-unix-dhcpdump-monitor-dhcp-traffic/
How Do I Use tcpdump To Capture DHCP Output?
Type the command as follows:
# tcpdump -lenx -i eth0 -s 1500 port bootps or port bootpc
How Do I Use tcpdump To Capture DHCP Output?
Type the command as follows:
# tcpdump -lenx -i eth0 -s 1500 port bootps or port bootpc
lunes, 27 de mayo de 2013
autenticar usuario usando radclient shell
select username, min(authdate) from radpostauth group by username having min(authdate) > NOW() - INTERVAL 12 HOUR
echo "User-Name=test,Password=mypass" | radclient localhost:1812 auth s3cr3t
domingo, 26 de mayo de 2013
script para desconectar clientes con ccq malo o señal mala en antenas ubiquiti
Ojito que el script va en ash y no en bash, no hay que dejar espacios en el margen o fallará el cat > EOF..
EOF
# cat /etc/persistent/banbadccq.sh
#!/bin/ash
ravi=ccq
badcpe=75
while :
do
ARRAY=`wstalist |egrep '(mac|'$ravi'")'| sed -e 's/"mac": //g' -e "s/$ravi//g" -e 's/ ://g' -e 's/,//g' -e 's/-//g' -e 's/"//g'`
for j in $ARRAY; do
if [ ${#j} -gt 3 ];
then
MAC=$j
continue
else
CCQ=$j
echo $MAC $CCQ
if [ $CCQ -lt $badcpe ];
then
/usr/bin/iwpriv ath0 maccmd 2
/usr/bin/iwpriv ath0 addmac $MAC
logger "MAC:" $MAC "is below threshold at "$CCQ
echo "MAC:" $MAC "is below threshold at "$CCQ
/usr/bin/iwpriv ath0 kickmac $MAC
CPE_MAC=$(echo $MAC |sed s/://g)
echo $CPE_MAC
tmp_file="/var/tmp/restore_${CPE_MAC}"
cat <<endKat >/$tmp_file
#!/bin/ash
sleep 300
/usr/bin/iwpriv ath0 delmac $MAC
rm $tmp_file
endKat
chmod +x $tmp_file
sh $tmp_file &
else
echo "do nothing"
fi
fi
done
sleep 600
done
Para ejecutar el script en el inicio hay que modificar el fichero /etc/persistent/rc.prestart
# cat rc.prestart
/etc/persistent/banbadccq.sh&
y para guardar la configuración
cfgmtd -w -p /etc/
reboot
EOF
# cat /etc/persistent/banbadccq.sh
#!/bin/ash
ravi=ccq
badcpe=75
while :
do
ARRAY=`wstalist |egrep '(mac|'$ravi'")'| sed -e 's/"mac": //g' -e "s/$ravi//g" -e 's/ ://g' -e 's/,//g' -e 's/-//g' -e 's/"//g'`
for j in $ARRAY; do
if [ ${#j} -gt 3 ];
then
MAC=$j
continue
else
CCQ=$j
echo $MAC $CCQ
if [ $CCQ -lt $badcpe ];
then
/usr/bin/iwpriv ath0 maccmd 2
/usr/bin/iwpriv ath0 addmac $MAC
logger "MAC:" $MAC "is below threshold at "$CCQ
echo "MAC:" $MAC "is below threshold at "$CCQ
/usr/bin/iwpriv ath0 kickmac $MAC
CPE_MAC=$(echo $MAC |sed s/://g)
echo $CPE_MAC
tmp_file="/var/tmp/restore_${CPE_MAC}"
cat <<endKat >/$tmp_file
#!/bin/ash
sleep 300
/usr/bin/iwpriv ath0 delmac $MAC
rm $tmp_file
endKat
chmod +x $tmp_file
sh $tmp_file &
else
echo "do nothing"
fi
fi
done
sleep 600
done
Para ejecutar el script en el inicio hay que modificar el fichero /etc/persistent/rc.prestart
# cat rc.prestart
/etc/persistent/banbadccq.sh&
cfgmtd -w -p /etc/
reboot
Manipulating the MAC white/black list
Use:
- iwpriv ath0 maccmd 3 To clear the MAC list.
- iwpriv ath0 maccmd 1 To make the list a whitelist.
- iwpriv ath0 maccmd 2 To make the list a blacklist.
- iwpriv ath0 addmac 00:11:22:33:44:55 To add a mac address to the list.
- iwpriv ath0 delmac 00:11:22:33:44:55 To delete a mac from the list.
- iwpriv ath0 kickmac 00:11:22:33:44:55 To send a disassociation frame to an associated station.
sábado, 25 de mayo de 2013
tickets prepago o vouchers en freeradius
En radgroupreply
73 | 12H | Acct-Interim-Interval | := | 60 | |||||
74 | 12H | WISPr-Bandwidth-Max-Up | := | 32000 | |||||
75 | 12H | WISPr-Bandwidth-Max-Down | := | 512000 | |||||
76 | 12H | Idle-Timeout | := | 180 | |||||
77 | 12H | Session-Timeout | := | 43200 |
editar /etc/mysql/my.cnf
[mysql]
user=root
password=elpassword
luego hacer un script para ejecutar las querys
#!/bin/bash
`mysql radiuspt -e "delete from radcheck where username in (select username from radacct where acctterminatecause='Session-Timeout')"`
`mysql radiuspt -e "delete from radusergroup where username in (select username from radacct where acctterminatecause='Session-Timeout')"`
y colocar un cron que ejecute el script cada cierto tiempo para borrar los usuarios de las tablas radcheck y en radusergroup para limpiar
Consultas:
delete from radcheck where username in (select username from radacct where acctterminatecause='Session-Timeout');
delete from radusergroup where username in (select username from radacct where acctterminatecause='Session-Timeout');
Consulta para borrar usuarios a los que se les ha caducado el ticket o voucher
mysql> select username,timediff(now(),acctstarttime) resta from radacct;
select username,timediff(now(),acctstarttime) from radacct where timediff(now(),acctstarttime) between '00:00:01' and '12:00:00';
root@radiuspt:/etc/cron.d# cat /etc/freeradius/delete_expired.sh
#!/bin/bash
`mysql radiuspt -e "delete from radcheck where username in (select username from radacct where acctterminatecause='Session-Timeout')"`
`mysql radiuspt -e "delete from radusergroup where username in (select username from radacct where acctterminatecause='Session-Timeout')"`
`mysql radiuspt -e "delete from radcheck where username in (select username from radacct where timediff(now(),acctstarttime) between '00:00:01' and '12:00:00')"`
`mysql radiuspt -e "delete from radcheck where username in (select username from radacct where timediff(now(),acctstarttime) between '00:00:01' and '12:00:00')"`
jueves, 9 de mayo de 2013
activar ssh en cisco
Setting SSH on Cisco devices
1) 3560G Switch
Follow these commands to configure ssh2 on newer cisco switches:enable configure terminal aaa new model username example-user secret example-password ip domain name example-domain.com crypto key generate rsa general-keys modulus 1024 ip ssh version 2 line vty 0 X (X-last vty) transport input ssh end wr mem
2) UBR7246
Follow these commands to configure ssh1 on older cisco CMTS.Warning only ssh 1 and DES supported!!
enable configure terminal aaa new model username example_user secret example_password ip domain name example_domain.com generate rsa general-keys label ssh_key modulus 2048 ip ssh rsa keypair-name ssh_key line vty 0 255 transport input ssh end wr mem
martes, 7 de mayo de 2013
Borrar logs en Mikrotik
Estos dos comandos borran los logs que se guardan en memoria y en el disco respectivamente. Para ver el resultado hay que salir del winbox y volver a entrar
system logging action set memory memory-lines=1
system logging action set disk disk-lines=1
Aquí se vuelven a activar las 100 líneas (que tiene de máximo) el log
system logging action set memory memory-lines=100
system logging action set disk disk-lines=100
miércoles, 1 de mayo de 2013
trim en bash
trimmed=$([[ " test test test " =~ [[:space:]]*([^[:space:]]|[^[:space:]].*[^[:space:]])[[:space:]]* ]]; echo -n "${BASH_REMATCH[1]}")
lunes, 29 de abril de 2013
PHP y Consola - 10 trucos útiles
http://gnoma.es/blog/10-cosas-que-quizas-no-sabias-de-php-en-la-shell/
Todos sabemos lo fantástico que es PHP como lenguaje de
programación de páginas web. Lo que no muchos saben es que es igualmente
fantástico como lenguaje para realizar programas multiplataforma para
la shell. No todo es bash, Python, perl o Microsoft Powershell. Vamos a
ver algunas de las cosas que quizás no sabías que podemos hacer con PHP
en la consola.
Nota: Toda esta información está disponible en el manual de documentación de PHP.
$ php test.php — parametro1 parametro2
$ ./test.php parametro1 parametro2
En el primer ejemplo ejecutamos el binario php y le pasamos como parámetro el nombre del script, por lo que en este caso añadimos los caracteres “–”. En cambio, en el segundo no es necesario, ya que el script tiene permisos de ejecución.
En sistemas Windows, como vimos arriba, habría que crear un fichero por lotes .bat, que para que pasara los parámetros a nuestro script quedaría así:
Nota: Toda esta información está disponible en el manual de documentación de PHP.
1. Ejecutar un script
Podemos crearnos nuestros propios programas simplemente creando un fichero .php y ejecutándolo con el binario CLI php. Por ejemplo:<?php echo "hola mundo!n"; ?>Y ahora para ejecutarlo sólo tendríamos que llamar al binario php (php.exe en Windows) seguido del nombre del script. Supongamos que el ejemplo de arriba lo guardamos en un fichero que se llama test.php. Sería así:
$ php test.phpY en sistemas Windows:
> php.exe test.phpDe esta forma, los dos mostrarían en pantalla el texto “hola mundo!”. Fácil, verdad?
2. Hacer que el script se sea ejecutable
En Windows tendremos que asociar la extensión .php al binario php.exe. De esa forma, al hacer doble clic sobre un fichero, este se ejecutará. Sin embargo, si quisiéramos que se pudiera ejecutar desde la consola, tendríamos que crear un fichero por lotes .bat que realice la llamada.@echo OFF "C:phpphp.exe" test.phpEn sistemas Unix es más sencillo. Tenemos que añadir en la primera línea la ruta al binario que ejecuta el script, y posteriormente otorgamos permisos de ejecución al fichero. Y ya está, ya es ejecutable desde la consola y desde el entorno gráfico. El fichero quedaría así:
#!/usr/bin/php <?php echo "hola mundo!n"; ?>Y después damos permisos de ejecución, y ya podremos ejecutarlo:
$ chmod +x test.php $ ./test.php
3. Pasar parámetros al programa
Supongamos un comando cualquier de la consola, por ejemplo “ls”. Este comando acepta numerosos parámetros para controlar su comportamiento. En PHP también podemos pasar parámetros. Sólo tenemos que tener en cuenta una cosa: Si el script no tiene permisos de ejecución, hay que pasar los parámetros tras los caracteres “–”. Es así para prevenir que el binario php los considere parámetros suyos. Veamos un ejemplo de cómo hacerlo:$ php test.php — parametro1 parametro2
$ ./test.php parametro1 parametro2
En el primer ejemplo ejecutamos el binario php y le pasamos como parámetro el nombre del script, por lo que en este caso añadimos los caracteres “–”. En cambio, en el segundo no es necesario, ya que el script tiene permisos de ejecución.
En sistemas Windows, como vimos arriba, habría que crear un fichero por lotes .bat, que para que pasara los parámetros a nuestro script quedaría así:
@echo OFF "C:phpphp.exe" test.php %*Bien, ya sabemos cómo enviar parámetros al script. Sólo nos queda saber cómo manejarlos. Pues muy sencillo. Hay dos variables globales para manejarlos:
- $argc – Contiene el número de parámetros que recibe el script
- $argv – Es un array con los parámetros en sí
4. Usar PHP en como consola interactiva
Al igual que ocurre con Python, PHP también puede ejecutarse en modo interactivo. Esto es, introducimos a mano los comandos en una “consola PHP”, y ésta los ejecuta al vuelo. Sólo hay que poner el parámetro “-a”. Por ejemplo:$ php -a Interactive shell php > echo 5+8; 13 php > function sumarDos($n) php > { php { return $n + 2; php { } php > var_dump(sumarDos(2)); int(4) php >Además, pulsando el botón tabulador, tendrás autocompletado de variables, funciones, clases, constantes, método estáticos y constantes de clases.
5. Ejecutar una línea de código PHP al momento
Podemos ejecutar el código que queramos usando el modificador “-r”. Imaginemos que queremos aplicar un hash md5 a un fichero de texto, y no tenemos en nuestro sistema el comando md5sum. Podríamos hacer lo siguiente:php -r 'echo md5(file_get_contents("fichero.txt"));'Lo que hacemos es ejecutar los comandos que hay entre las comillas simples:
- Cargamos el contenido de ‘fichero.txt’.
- Le aplicamos el hash md5.
- Lo mostramos en pantalla.
6. Pasar contenidos a PHP por tuberías
Muchas veces vemos comandos como:echo "hola mundo" | wc -cEn este sencillo ejemplo lo que hemos hecho es en la salida estándar el texto “hola mundo”, que a su vez se envía a la entrada estándar del comando “wc -c”, que se encarga de contar el número de caracteres. ¿Cómo hacemos esto en PHP? Consultando la entrada estándar. En la versión CLI de PHP ponen a nuestra disposición 3 útiles constantes:
- STDIN – Stream a la entrada estándar.
- STDOUT – Stream a la salida estándar.
- STDERR – Stream a la salida de errores.
echo "hola mundo" | php -r 'echo strlen(fgets(STDIN));'
7. Mostrar un fichero PHP sin comentarios ni espacios
¿Nunca te has preguntado cuántos caracteres útiles tiene un gran proyecto? Con el modificador “-w” puedes verlo, pues eliminará todos los caracteres en blanco innecesarios (incluidos tabulares, retornos de carro, cambios de línea, etc), y todos los comentarios. Además, también podrás así minimizar el tamaño de los ficheros. Por ejemplo:$ php -w fichero.php
8. Consultar documentación desde la consola
Supón que deseas conocer los parámetros de una función, o los métodos de una clase… Puedes consultarlo desde la consola, siempre y cuando tu versión de PHP esté compilada con la extensión Reflection. Esta familia de modificadores nos da 4 opciones:- “–rf” – Muestra información de una función o de un método de una clase.
- “–rc” – Muestra información de una clase (sus métodos, atributos, constantes…).
- “–re” – Muestra información de una extensión (directivas .ini, funciones, constantes, clases, etc).
- “–ri” – Muestra información sobre la configuración de una extensión. Esto es, lo mismo que devuelve phpinfo() para cada extensión. Si queremos ver la información general, usaremos “main” como nombre de extensión.
$ php --rf md5 Function [ <internal:standard> function md5 ] { - Parameters [2] { Parameter #0 [ <required> $str ] Parameter #1 [ <optional> $raw_output ] } }Una opción estupenda cuando no tenemos acceso a internet, ni nos hemos descargado la documentación de PHP a nuestro equipo.
9. Decorar la sintaxis de nuestro código
PHP nos ofrece una forma sencillísima de generar una versión HTML de nuestro código, coloreando y destacando cada parte. Sólo tendremos que ejecutarlo con el modificador “-w”. Una vez hecho esto, podremos exportarla al formato que queramos (PDF, Word, XHTML, etc). Muy útil cuando queremos imprimir un código fuente.$ php -w fichero.phpAdemás, al estar disponible desde el propio binario de php, es muy fácil generar una versión HTML coloreada de cada fichero.
10. La joya de la corona: definir código inicial, final, y para cada línea
Si no tenías suficiente con sed o awk, ahora con PHP vas a poder hacer maravillas. Tenemos estos cuatro modificadores:- “-B” – Código PHP a ejecutar antes que todo lo demás.
- “-F” – Código PHP a ejecutar cuando finalice todo lo demás.
- “-R” – Código PHP a ejecutar por cada línea. Tendremos $argn con la línea que se está procesando, y $argi con el número de línea.
- “-F” – Fichero con el código PHP a ejecutar por cada línea.
$ find . | php -B '$lineas=0;' -R '$lineas += count(@file($argn));' -E 'echo "Total de líneas: $lineasn";'Veámoslo paso a paso:
- En primer lugar ejecutamos el comando “find” de la consola de Linux. Nos mostrará (recursivamente) todos los ficheros del directorio actual.
- El resultado se lo pasamos por la entrada estándar al binario php, el cual realiza lo siguiente:
- En el modificador “-B” especificamos el código inicial. Simplemente inicializamos la variable $lineas a cero.
- En el modificador “-R” decimos lo que se hará por cada línea
recibida por la entrada estándar. En este caso, cada línea se
corresponde con la ruta a un fichero:
- Como vimos arriba, $argn contiene el texto que se está procesando. Contiene la ruta a un fichero
- Pasamos esa ruta a la función file(), que genera un array donde cada índice contiene una fila del fichero leído.
- Consultamos el tamaño del array, es decir, el número de líneas del fichero.
- Incrementamos la variable $lineas con el valor obtenido en el paso anterior.
- Finalmente, el modificador ‘-E’ se ejecuta al finalizar todo lo demás, y nos muestra como resultado el número total de líneas de texto que hay en todos los ficheros de la carpeta actual.
miércoles, 24 de abril de 2013
eliminar dialog de guardar firma en ssh, eliminar "Are you sure you want to continue connecting (yes/no)?"
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@172.16.1.123
martes, 23 de abril de 2013
lunes, 22 de abril de 2013
Introducir clave rsa en antena ubiquiti de forma permanente desde ssh
>ssh ubnt@192.168.1.20
#echo "echo 'La clave va a aquí' >> /etc/dropbear/authorized_keys" > /etc/persistent/rc.prestart
#cfgmtd -w -p /etc/
#reboot
miércoles, 6 de marzo de 2013
ubiquiti desde cli
http://www.arg-wireless.com.ar/index.php/topic,952.0.html
01.- Escanear redes aproximas:
02.- Lista de estaciones proximas:
03.- Saber el rango de potencia soportado y la potencia actual en uso:
04.- Saber la lista de canales soportados y cual esta en uso actualmente:
05.- Saber el bitrate actual:
06.- Saber las autentificaciones y especificaciones:
07.- Información sobre la red actual conectada:
08.- Ver las interfaces actuales:
09.- Ver las interfaces actuales y su uso:
10.- Cambiar la potencia actual del equipamiento en uso:
Para verificar hacemos: iwlist ath0 txpower
11.- Ver el contenido de la carpeta actual:
ejemplo:
12.- Cambiar contraseña de usuario actual:
13.- Limpiar pantalla:
14.- Encontrar equipamientos conectados entre si: Similar a UBNT Discovery
o
15.- Testeo del Equipamiento:
opciones:
16.- Hacer Ping v4
17.- Hacer Ping v6
01.- Escanear redes aproximas:
Código: [Seleccionar]
iwlist ath0 scan
02.- Lista de estaciones proximas:
Código: [Seleccionar]
iwlist ath0 peers/ap
03.- Saber el rango de potencia soportado y la potencia actual en uso:
Código: [Seleccionar]
iwlist ath0 txpower
04.- Saber la lista de canales soportados y cual esta en uso actualmente:
Código: [Seleccionar]
iwlist ath0 frequency/channel
05.- Saber el bitrate actual:
Código: [Seleccionar]
iwlist ath0 bitrate/rate
06.- Saber las autentificaciones y especificaciones:
Código: [Seleccionar]
iwlist ath0 auth
07.- Información sobre la red actual conectada:
Código: [Seleccionar]
iwlist ath0 genie
08.- Ver las interfaces actuales:
Código: [Seleccionar]
ifconfig
09.- Ver las interfaces actuales y su uso:
Código: [Seleccionar]
iwconfig
10.- Cambiar la potencia actual del equipamiento en uso:
Código: [Seleccionar]
iwconfig ath0 txpower <XXdBm>
Código: [Seleccionar]
Potencia Linea Nanostation M:
10 dBm (10 mW)
16 dBm (39 mW)
18 dBm (63 mW)
20 dBm (100 mW)
22 dBm (158 mW)
24 dBm (251 mW)
26 dBm (398 mW)
28 dBm (630 mW)
Para verificar hacemos: iwlist ath0 txpower
11.- Ver el contenido de la carpeta actual:
Código: [Seleccionar]
ls
ejemplo:
Código: [Seleccionar]
cd /bin/
ls
12.- Cambiar contraseña de usuario actual:
Código: [Seleccionar]
passwd
Nuevo password
Confirmar password
13.- Limpiar pantalla:
Código: [Seleccionar]
clear
14.- Encontrar equipamientos conectados entre si: Similar a UBNT Discovery
Código: [Seleccionar]
ubntbox discover
o
Código: [Seleccionar]
discover
15.- Testeo del Equipamiento:
Código: [Seleccionar]
factorytest
opciones:
Código: [Seleccionar]
setup
flash
rssi
throughput
ethernet
led
16.- Hacer Ping v4
Código: [Seleccionar]
ping <IPv4>
17.- Hacer Ping v6
Código: [Seleccionar]
ping <IPv6>
Suscribirse a:
Entradas (Atom)