Vbs conexion a SQL server / Vbs SQL server connection

3 12 2009

Mira estoy hasta los cojones que se me olvide siempre como hacer un insert en SQL server usando seguridad integrada cuando estoy trabajando con un script en VBS asi que lo voy a postear aqui para encontrarlo facil y por si a alguien mas le sirve.

Esta es una funcion que insertaria los parametos en la base de datos XXXX

Sub recordevent(www,ddd,zzz,ppp)
 efecha=day(date()) & "-" & month(date()) & "-" & year(date()) & " "& hour(ehora)&":"&minute(ehora)&":"&second(ehora)
 Set objConnection = CreateObject("ADODB.Connection")
 objConnection.Open "PROVIDER=SQLOLEDB;DATA SOURCE=SERVIDORSQL;Integrated Security=SSPI;DATABASE=BBDD"
 'WScript.Echo objconnection.state
 objConnection.execute = "Insert into TABLA (www,ddd,zzz,ppp) VALUES ('" & www & "','" & ddd & "','" & zzz & "','" & ppp & "')"
 objConnection.close
End sub

Un saludo cabrones!!





Correo desde linea comandos en windows

19 11 2009

Desgraciadamente en windows no disponemos del maravilloso comando sendmail o mail.

En windows tenemos varias opciones todas con una pinta de mierda , pero “funcionan”.

Postie es una de ellas funciona a partir de windows xp , no esta mal.

Luego tenemos el famoso Blat que no me mola ni el nombre xD.

Y finalmente hemos usado el bmail que si funciona en windows NT/2000 es una autentica mierda de 17 KB pero hace su funcion correctamente.





Pequeño script matutino

19 11 2009

Tiene un arbol de directorios llenos de ficheros de log  creados hoy y quiere saber en que archivo esta el log o el dato de texto que necesita, a mi me ha pasado eso mismo esta mañana y me hecho este aborto de script:

'Busca una ocurrencia de texto en ficheros de logs dentro de un arbol de directorios dados.
'
'
'
basedir="E:\XXXXXX\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set FSO = CreateObject("Scripting.FileSystemObject")
ShowSubfolders FSO.GetFolder(basedir)

Sub ShowSubFolders(Folder)
 For Each Subfolder in Folder.SubFolders

 Set objFolder = objFSO.GetFolder(Subfolder.Path)
 searchfile(objFolder)
 ShowSubFolders Subfolder
 Next
 Set Objfolder = Nothing
End Sub

Sub searchfile(folders)
 Set colFiles = folders.Files
 For Each objFile In colFiles
 Set found = objFSO.GetFile(objFile.path)
 foundcreated=found.DateLastModified
 extension=Split(found.path,".")
 If  day(date()) = day(foundcreated) AND month(date()) = month(foundcreated) AND year(date()) = year(foundcreated) Then
 If extension(1) = "log" Then
 'Busca en un path una ocurrencia de texto.
 search_text(found)
 End if
 End if
 Next

End sub 

Sub search_text(filefind)
'    wscript.echo filefind.path
 match="Error"
 Set objFSO_search = CreateObject("Scripting.FileSystemObject")
 Set objFile_search = objFSO_search.OpenTextFile( filefind.path , 1)
 strSearchString = objFile_search.ReadAll
 objFile_search.Close
 matched=InStr(strSearchString, match)
 If matched > 0 Then
 wscript.echo "Error encontrado en: " & filefind.path 'Blat aqui para avisarnos
 End if
 Set objFSO_search = Nothing
 set objFile_search = Nothing
 set matched = Nothing
End sub

Espero que les sea de utilidad algun dia para alguien….





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







Seguir

Get every new post delivered to your Inbox.