Chequear un webservice XML con curl

2 11 2009

Ale voy a poner un miniscript sacado de la punta de la …. que escribe en un log que luego podemos tratar con logparser o con sql  o como nos venga en gana.

 

#!/bin/bash
fechafichero=`date +%Y-%m-%d`;
cadenaverficacion="Cadena que verificamos , algo que nos devuelve el webservice cuando se ejecuta correctamente"
nombrefichero="webservice-login-$fechafichero.log";
maquina=`hostname`;
fecha=`date +%Y-%m-%d" "%H:%M:%S`;
hora=`date +%H:%M:%S`;
echo '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
 <Login xmlns="http://tempuri.org/Services/login">
 <UserLogin>ZZZZZ</UserLogin>
 <Password>XXXXXX</Password>
 <OrganizationCode />
 </Login>
 </soap:Body>
 </soap:Envelope>' |  if curl -m 30 -k -X POST -H 'Content-type: text/xml' -d @- https://www.zzz.com/login.asmx | grep $cadenaverficacion ; then echo "$fecha,0,$maquina,webservice-login" >> /mnt/$nombrefichero; else echo "$fecha,1,$maquina,webservice-login" >> /mnt/$nombrefichero ;fi 2> /dev/null >/dev/null

Esto y una metidita en el crond y todos tan amigos , para sacar el calculo de disponibilidad de su webservice favorito.


 






Graficas mas bonitas y mas faciles

28 10 2009

Si esta hartos de rrdtool para crear y guardar sus datos estadisticos por que es  una jocada cada vez que hay que crear un nuevo grafico recomiendo http://pchart.sourceforge.net/ el nuevo gnuplot de benimaclet.





Logparser

28 10 2009

Este programa como sabres es un grande del analisis de logs y el llamado por la peña “pro” data mining.

Basicamente este programa pilla una entrada de casi cualquier tipo y genera una salida tambien de casi cualquier tipo , sobre la entrada puedes ejecutar un select con lo que quieras obtener.

Pego tres ejemplos que me han venido bien ultimamente, desde lo mas basico hasta otros mas complicados.

Buscar X navegador y la ip que lo usa

SELECT cs(user-agent),c-ip FROM C:\XXXX\ex090510.log WHERE  cs(user-agent) LIKE ‘%Firefox.%’
GROUP BY cs(user-agent) , c-ip Order by c-ip

Agrupar por fecha y web service y cotar las conexiones que ha habido sobre ese webservice

logparser -i:IISW3C -o:nat “SELECT date, cs-uri-stem, c-ip, COUNT(*) FROM C:\XXX\*.log  where TO_TIME(time) BETWEEN  TIMESTAMP(‘22:10′, ‘hh:mm’) AND TIMESTAMP(‘22:15′, ‘hh:mm’)  GROUP BY date, cs-uri-stem,c-ip order by count(c-ip) desc “
AGRUPAR horas cada X tiempo  y contar conexiones que se han dado en ese tiempo.
LogParser -i:IISW3C -o:csv “SELECT quantize(time,60), count(*) as Frequency from E:\XXXX\dia.log GROUP BY quantize(time,60) order by quantize(time, 60)”
El tiempo va en segundos.
Bueno esto es todo igual a alguien le sirve esta morralla , recuerdo que logparser sirve para casi cualquier tipo de log:
IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID, HTTPERR, URLSCAN, CSV, TSV, W3C, XML, EVT, ETW, NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS




Permisos Visor de sucesos ( EventLOG) windows 2003

1 10 2009

Hola amigos que pasa cuando un colega programador te dice ,”ye loco que no puedo escribir en 2003 en el visor de suscesos con mi webservice en .net” , ¿como le concedemos permisos? … pues nada mas facil que esta explicacioncilla.

Editar la clave del registro CustomSD en HKLM\SYSTEM\CurrentControlSet\Services\EventLog\{logName}\
Establecer permisos para el usuario que ejecuta la aplicación que quiere escribir en la rama del árbol del registro.

Cadena por defecto

O:BAG:SYD:(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)

Cadena tuneada.

(D;;0xf0007;;;AN)     Deny everything to Anonymous

(D;;0xf0007;;;BG)     Deny everything to Builtin Guests

(A;;0xf0007;;;BA)     Allow everything to Builtin Administrators

(A;;0x7;;;SO)     Allow read, write, and clear to Server Operators

(A;;0x3;;;IU)     Allow read and write to Interactive Users

(A;;0x3;;;SU)     Allow read and write to Service Accounts*

(A;;0x3;;;S-1-5-3)     Allow read and write to Batch Accounts*

(A;;0x3;;;NS) to the end of the list and Network Service will be permitted read and write access to the event log.

(A;;0x3;;;AU) Authenticated users read and write access, which can be done using <-- Metida para que pueda escribir .Net con cualquier usuario autenticado.

--Es decir quedaria asi para poner en CustomSD

(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)(A;;0xf0007;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;NS)(A;;0x3;;;AU)

–Construccion de la ACL
Es tipo Unix Sumar bits.

0x0001 ELF_LOGFILE_READ Permission to read log files.

0x0002 ELF_LOGFILE_WRITE Permission to write log files.

0x0004 ELF_LOGFILE_CLEAR Permission to clear log files.

GRUPOS

"AN" SDDL_ANONYMOUS Anonymous logon. The corresponding RID is SECURITY_ANONYMOUS_LOGON_RID.
"AO" SDDL_ACCOUNT_OPERATORS Account operators. The corresponding RID is DOMAIN_ALIAS_RID_ACCOUNT_OPS.
"AU" SDDL_AUTHENTICATED_USERS Authenticated users. The corresponding RID is SECURITY_AUTHENTICATED_USER_RID.
"BA" SDDL_BUILTIN_ADMINISTRATORS Built-in administrators. The corresponding RID is DOMAIN_ALIAS_RID_ADMINS.
"BG" SDDL_BUILTIN_GUESTS Built-in guests. The corresponding RID is DOMAIN_ALIAS_RID_GUESTS.
"BO" SDDL_BACKUP_OPERATORS Backup operators. The corresponding RID is DOMAIN_ALIAS_RID_BACKUP_OPS.
"BU" SDDL_BUILTIN_USERS Built-in users. The corresponding RID is DOMAIN_ALIAS_RID_USERS.
"CA" SDDL_CERT_SERV_ADMINISTRATORS Certificate publishers. The corresponding RID is DOMAIN_GROUP_RID_CERT_ADMINS.
"CD" SDDL_CERTSVC_DCOM_ACCESS Users who can connect to certification authorities using Distributed Component Object Model (DCOM). The corresponding RID is DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP.
"CG" SDDL_CREATOR_GROUP Creator group. The corresponding RID is SECURITY_CREATOR_GROUP_RID.
"CO" SDDL_CREATOR_OWNER Creator owner. The corresponding RID is SECURITY_CREATOR_OWNER_RID.
"DA" SDDL_DOMAIN_ADMINISTRATORS Domain administrators. The corresponding RID is DOMAIN_GROUP_RID_ADMINS.
"DC" SDDL_DOMAIN_COMPUTERS Domain computers. The corresponding RID is DOMAIN_GROUP_RID_COMPUTERS.
"DD" SDDL_DOMAIN_DOMAIN_CONTROLLERS Domain controllers. The corresponding RID is DOMAIN_GROUP_RID_CONTROLLERS.
"DG" SDDL_DOMAIN_GUESTS Domain guests. The corresponding RID is DOMAIN_GROUP_RID_GUESTS.
"DU" SDDL_DOMAIN_USERS Domain users. The corresponding RID is DOMAIN_GROUP_RID_USERS.
"EA" SDDL_ENTERPRISE_ADMINS Enterprise administrators. The corresponding RID is DOMAIN_GROUP_RID_ENTERPRISE_ADMINS.
"ED" SDDL_ENTERPRISE_DOMAIN_CONTROLLERS Enterprise domain controllers. The corresponding RID is SECURITY_SERVER_LOGON_RID.
"HI" SDDL_ML_HIGH High integrity level. The corresponding RID is SECURITY_MANDATORY_HIGH_RID.
"IU" SDDL_INTERACTIVE Interactively logged-on user. This is a group identifier added to the token of a process when it was logged on interactively. The corresponding logon type is LOGON32_LOGON_INTERACTIVE. The corresponding RID is SECURITY_INTERACTIVE_RID.
"LA" SDDL_LOCAL_ADMIN Local administrator. The corresponding RID is DOMAIN_USER_RID_ADMIN.
"LG" SDDL_LOCAL_GUEST Local guest. The corresponding RID is DOMAIN_USER_RID_GUEST.
"LS" SDDL_LOCAL_SERVICE Local service account. The corresponding RID is SECURITY_LOCAL_SERVICE_RID.
"LW" SDDL_ML_LOW Low integrity level. The corresponding RID is SECURITY_MANDATORY_LOW_RID.
"ME" SDDL_MLMEDIUM Medium integrity level. The corresponding RID is SECURITY_MANDATORY_MEDIUM_RID.
"NO" SDDL_NETWORK_CONFIGURATION_OPS Network configuration operators. The corresponding RID is DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS.
"NS" SDDL_NETWORK_SERVICE Network service account. The corresponding RID is SECURITY_NETWORK_SERVICE_RID.
"NU" SDDL_NETWORK Network logon user. This is a group identifier added to the token of a process when it was logged on across a network. The corresponding logon type is LOGON32_LOGON_NETWORK. The corresponding RID is SECURITY_NETWORK_RID.
"PA" SDDL_GROUP_POLICY_ADMINS Group Policy administrators. The corresponding RID is DOMAIN_GROUP_RID_POLICY_ADMINS.
"PO" SDDL_PRINTER_OPERATORS Printer operators. The corresponding RID is DOMAIN_ALIAS_RID_PRINT_OPS.
"PS" SDDL_PERSONAL_SELF Principal self. The corresponding RID is SECURITY_PRINCIPAL_SELF_RID.
"PU" SDDL_POWER_USERS Power users. The corresponding RID is DOMAIN_ALIAS_RID_POWER_USERS.
"RC" SDDL_RESTRICTED_CODE Restricted code. This is a restricted token created using the CreateRestrictedToken function. The corresponding RID is SECURITY_RESTRICTED_CODE_RID.
"RD" SDDL_REMOTE_DESKTOP Terminal server users. The corresponding RID is DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS.
"RE" SDDL_REPLICATOR Replicator. The corresponding RID is DOMAIN_ALIAS_RID_REPLICATOR.
"RO" SDDL_ENTERPRISE_RO_DCs Enterprise Read-only domain controllers. The corresponding RID is DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS.
"RS" SDDL_RAS_SERVERS RAS servers group. The corresponding RID is DOMAIN_ALIAS_RID_RAS_SERVERS.
"RU" SDDL_ALIAS_PREW2KCOMPACC Alias to grant permissions to accounts that use applications compatible with operating systems previous to Windows 2000. The corresponding RID is DOMAIN_ALIAS_RID_PREW2KCOMPACCESS.
"SA" SDDL_SCHEMA_ADMINISTRATORS Schema administrators. The corresponding RID is DOMAIN_GROUP_RID_SCHEMA_ADMINS.
"SI" SDDL_ML_SYSTEM System integrity level. The corresponding RID is SECURITY_MANDATORY_SYSTEM_RID.
"SO" SDDL_SERVER_OPERATORS Server operators. The corresponding RID is DOMAIN_ALIAS_RID_SYSTEM_OPS.
"SU" SDDL_SERVICE Service logon user. This is a group identifier added to the token of a process when it was logged as a service. The corresponding logon type is LOGON32_LOGON_SERVICE. The corresponding RID is SECURITY_SERVICE_RID.
"SY" SDDL_LOCAL_SYSTEM Local system. The corresponding RID is SECURITY_LOCAL_SYSTEM_RID.
"WD" SDDL_EVERYONE Everyone. The corresponding RID is SECURITY_WORLD_RID.

Es posible adjuntar el del usuario o grupo como hace en esta entrada (A;;0×3;;;S-1-5-3) el SID se puede obetener con whoami /all

–Impersonar .Net con un usuario autenticado en el sistema modificando MachineConfig.
–Ejecutar Application pool con un usuario controlado , acordarse de meter el usuario en el grupo bulidin IIS_WPG para que el Application Pool pueda arrancar.

REF:
http://www.jameskovacs.com/blog/WritingToTheEventLogFromASPNETFailsWhenRunningOnWindowsServer2003SP1.aspx
http://msdn.microsoft.com/en-us/magazine/cc982153.aspx





Ojo al montar un failover cluster en Windows 2008

30 06 2009

Hola amigos! aqui estamos un día más en una nueva entrega de bricomania, con cierto retraso, por cierto.

A modo resumen, lo que os queria comentar, pues, es que cuando hayais añadido la caracteristica (feature) de Failover Clustering (cluster de comutacion por error) y tireis a lanzar la consola de administracion de la consola de Failover Cluster si no os aparece la opcion de crear un cluster nuevo y pasar el test de validacion de hardware no os volvais locos, pare que este aparezca habilitado teneis que haber inciado sesion con un usuario de un dominio.

Estoy ocurre seguro con Windows Server 2008 R2 RC, es posible que en otras versiones ocurra tambien, pero esto es lo que hemos probado aqui mientras grababamos el programa.





Windbg el arma perfecta contra el grillotopo

18 02 2009

Buenas noches , voy a dar algunos consejos utiles a la hora de utilizar windbg , una especie de guia rápida de emergencia, cuatro tonterias rapidas que hay que tener en cuenta cuando vamos a depurar algun dump en un caso de uso del 100% de cpu por un proceso no esperado.

!runaway — Muestra ordenados por tiempo de uso de CPU los hilos de ejecucion de ese proceso.

~ns — donde N es el número de hilo del proceso , nos muestra el detalle de este hilo , s es de select , con esto tambien podemos hacer otras operaciones.

!gle numerodehilo – - gle es el acronimo de get lasterrors muesta el ultimo error de un hilo.

!peb – nos muestra los procesos que se estaban ejecutando en el momento del dump.

Tan solo con esto ya podemos indagar sobre alguna petada debido al exceso de cpu , por ejemplo el tipico proceso XXX.exe de descarga ilegal de porno.

0:042> !runaway
 User Mode Time
  Thread       Time
  20:91c       0 days 18:26:16.953
  54:1890      0 days 4:51:45.859
  60:1f08      0 days 0:16:41.343
  58:1e08      0 days 0:16:32.750
  11:528       0 days 0:06:31.718
  39:1f40      0 days 0:05:51.140
  42:142c      0 days 0:05:03.406
  44:16b0      0 days 0:04:40.843

Con esto obtenemos un listado de los hilos que mas tiempo de CPU han gastado , en nuestro proceso de recoleccion XXX.exe vemos que el hilo 20 y 54 han gastado un gran tiempo de cpu asi que tenemos que averiguar que son.

0:042> ~54s
eax=00000033 ebx=02f94013 ecx=00000009 edx=02f3d4b8 esi=03870820 edi=02f94012
eip=607e02c3 esp=0302fec0 ebp=00000520 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246
Pacentocratico!DllRegisterISAPI+0x5094:
607e02c3 7417            je      Pacentocratico!DllRegisterISAPI+0x50ad (607e02dc) [br=1]

Santo cielo nos damos cuenta que este programa esta lincado a la maldita libreria pancetocratico.dll que peta mas que una escopeta de feria , puede que sea el motivo de nuestra petada , seguimos indagando y para ello hacemos lo siguiente:

0:054> !gle 54
LastErrorValue: (Win32) 0 (0) - La operaci n se ha completado correctamente.
LastStatusValue: (NTSTATUS) 0xc0000139 - {No se encuentra el punto de entrada}  No se encuentra el punto de entrada del procedimiento %hs en la biblioteca de v nculos din micos %hs.

Bien nos ha devuelto una first chance exception es decir una excepcion controlada que nos dice que no se encuentra el procedimiento al que llamamos puede que se este el orgien de todos nuestros males.

Asi que como nuestro programa XXX.net es totalmente modular procedemos a descargar la dll maliciosa obteniendo bonitos resultados y echando la bronca a nuestros amigos desarrolladores por usar esa esa porqueria de dll , asi una vez mas nos vamos tranquilos a casa.

Este pseudoarticulo no es mas que una mini-introduccion burda y poco fiel de como podemos usar un volcado para ver por que un proceso copa nuestra CPU al 100%. , existen alguna herramientas como debugdiag que facilitan bastante las cosas.

Por otro lado recordaros a todos que es interesante tener todos los simbolos de depuracion posibles para poder hacer este tipo de cosas , asi que es aconsajable que en windbg metais el siguiente path en el symbol path file:

SRV*http://msdl.microsoft.com/download/symbols

Un saludo y enhorabuena a los premiados.





¿Mas vale Unix en mano que windows volando?

30 01 2009

Buenos dias fijense muchas veces en unix las cosas son mucho mas faciles y logicas que en windows , bueno tambien es cierto que una buena shell hace mucho y CMD ha sido un ejemplo claro de una shell de mierda , menos mal que ha llegado powershell , que si es la ostia pero 20 años mas tarde de lo que debia haber llegado ;)

UNIX

 find /tmp  -ctime 4 | xargs  rm -rf

WINDOWS

Set fso = CreateObject("Scripting.FileSystemObject")
Folder = "C:\direct"
Set f = fso.GetFolder(Folder)
Set sf = f.SubFolders
For Each f1 in sf
  set subdir = fso.GetFolder(f1.path)
  if subdir.DateCreated < date()- 4  then
  WScript.Echo  subdir.name
  subdir.delete
 end if
next




¿Por que no depuramos un servicio windows a ver que pasa?

28 01 2009

Si en efecto amigos hoy hablaremos del maravilloso mundo del debug binario en windows, vamos a ver como depurar un servicio que esta corriendo como localsystem y nos esta cascando misteriosamente sin dejar rastro en logs o visor de sucesos

Lo primero que vamos a necesitar son las Debugging Tools for windows que las bajaremos e instalaremos en el directorio debuggers para que no seas mas facil luego encontrar y manejar la ruta, ya que por defecto te lo mete en el mismo infierno de las rutas siendo megaengorroso manejarlo.

¿Cual es el problema de debuggear con windbg un servicio?  pues basicamente que hay que arracar el servicio con el debugger attacheado como server por que si no lo hacemos asi al correr como localsystem el servicio no existe una consola donde mostrarnos el maravillos windbg.exe.

Para solucionar esto hay que lanzar el servicio con el debugger en modo servidor, vale ¿y como diablos hago eso? , sencillo amigo contacte con su servicio premier de microsoft , alli sabran atenderle , ah!  ¿ que no lo tiene contratado? , bien fiese usted de mi y haga lo siguiente:

Abra regedit  y entre en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ añada una nueva clave que cuelgue de esta ruta con el nombre del ejecutable del servicio a depurar , por ejemplo mssearch.exe.

Posteriormente dentro de esa clave cree un registro de texto con el nombre Debugger y con el contenido C:\debuggers\windbg.exe -G -Q -server tcp:port=1234 , una vez hecho esto ya tendra usted el debugger en modo servidor adjuntado al ejecutable mssearch.exe en modo servidor y cuando este arranque se lanzara junto al debugger.

Me parece correcto , ¿pero ahora como veo lo que esta sacando ese debugger ? , tan facil como ir windbg.exe , File –> Connect to remote session , en el campo podremos sin espacios  , tcp:server=NOMBREDELSERVER,port=1234 , con esto estableceremos una sesion con el debugger remoto y todos tan contentos , ya podemos empezar a hacer go , ./dump /ma  y analizar nuestros maravillosos volcados :D .

En breves capitulos hablaremos sobre el Time Travel Trace , otra utilidad de debug que puede servir para estos menesteres y como usarla.

¿Martín McFly esta por aqui?





Use VirtualBox y clone VM sin parar

26 01 2009

Oiga amigo use virtualbox aunque sean unos cabrones y no metan en la GUI una opcion de clonar VM.

Asi que en vez de tener clonar maquina virual en  el tipico menu contextual, tenemos que acer esta jugada y si no la sabes tienes que buscar en google y acabar en algun blog de mierda como este.

C:\Program Files\Sun\xVM VirtualBox>VBoxManage.exe clonevdi “D:\VMs\2008\2008-li
mpio.vdi” “D:\VMs\2008\2008-nodo2.vdi”
VirtualBox Command Line Management Interface Version 2.1.2
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

Un saludo amigos.





Terminal server muy leeeeentor desde VISTA

23 01 2009

Buenos dias , seguro que a mas de uno de vosotros alguna vez cuando ha reinstalado su flamante vista y ha conectado contra un windows 2003 le ha ido como el culo de lento, bien esto es debido en ciertas ocasiones al “autotunning” de la pila tcp/ip que trae windows vista , hacindolo de este modo compatible con la pila de TCP/IP de nuestro querido vista compatible con el RFC 1323 TCP Extensions for High Performance.  En ocasiones este tunning se puede volver en nuestra contra cuando los paquetes pasan por cierto tipo de firewalls o reglas y afectar tanto a la navegacion web como a otro tipo de servicios produciendo cortes o cargas extremadamente lentas.

Para evitar esta situacion podemos deshabilitar el autotunning desde una consola de administrador con:

netsh interface tcp set global autotuninglevel=disabled

Rollback  con:

interface tcp set global autotuninglevel=normal

Algunos de los KBs Relacionados con esta situacion son:

http://support.microsoft.com/kb/929868