Live in your World. Die in Mine.
Detesto programar!!; Enserio :wq
Detesto programar!!; Enserio :wq
18 ago
Si tienen acceso ssh fuera de su red y quiern hacer un proxy SOCKS rápido ejecuten
1 | ssh -D 7070 -f -N usuario@host-remoto |
esto creara un proxy SOCKS en su maquina local en el puerto 7070 cuyo otro extremo estará montado en el servidor host-remoto
el -f deja el comando en “foreground” osea en segundo plano
y el -N es obligatorio sino iniciaria una consola en el equipo remoto
luego configuren su maquina para usar proxy socks en el localhost puerto 7070 y están listos saliendo y encriptados por un túnel ssh
9 sep
Hoy mi tutor a la mala Burce. Me estubo explicando el por que de las cosas y el por que de los punteros. C tiene una manera bastante extraña de manejar los punteros,si bien siempre tuve una idea de como funcionaban hoy me lo explicaron bien.
El famoso *
1 | int * variable; |
En al definicion de una variable, si se le precede con un asterisco “*” le estaremos diciendo al compilador que esa variable, no sera una variable normal, sino que será un puntero, ahora, ¿que demonios es un puntero?
Un puntero es una asignacion de memoria para una variable, del tipo;
1 2 3 | int *a; //puntero para un int long *b; //puntero para un long; char *; //puntero para un char; |
¿Que hacemos con un puntero?
Si bien un puntero luce cool, si no hacemos nada con el, no nos servira de nada,
por lo usual uno cuando inicia un puntero uno lo “apunta” a una variable o direccion de memoria ya existente.
¿como sabemos o averiguamos una dirección de memoria ya existente?
Para eso C cuenta con un “conversor” o “traductor”
1 | & |
Este “traductor” devolvera la direccion de memoria de una variable cualquiera, entonces, cuando uno inicia un puntero y lo desea “apuntar” a una variable ya existente, seria algo asi.
1 2 3 4 5 | int variable = 21;// iniciamos variable con valor 21 //ahora crearemos un puntero del tipo int //y lo apuntamos a la misma variable int *puntero = &variable// ojo que solo iniciando un puntero esto se hace asi, //mas adelante para futuras referencias se realiza de otra forma |
Aqui se creo una variable del tipo entero y se le dio el valor 21, y luego se creo un puntero, y este se apunto a (una) variable,
&variable devolverá siempre la dirección de memoria inicial por ende ahora, variable y *puntero están unidos ya que están almacenados en la misma región de memoria, cualquier cambio realizado a variable afectara a *puntero y viceversa. Esto es bastante util cuando uno desea cambiar informacion de una variable desde una funcion a la que uno le pasa, en vez de el valor de esta, la direccion de memoria de esta.
1 2 3 4 5 6 7 8 9 10 11 12 13 | int main(){ int variable=21; int *puntero=&variable; suma(&puntero); printf("%d",*puntero); } int suma(int * otropuntero) { *otropuntero=*otropuntero+2; return(0); } |
La salida de este programa es
1 | 23 |
A la función se le entrega la posición de memoria del puntero(que originalmente apuntaba a “variable”) en la funcion se recibe la variable como un puntero que apunta a la misma region de memoria y a esta se le suma 2 (quedando en 23) luego se finaliza la funcion y se vuelve a main, cuando se imprime el contenido de *puntero, este viene ya modificado.
Esto tiene muchas otras utilizaciones, mañana explicare que pasa con los del tipo char (caracteres) y como hacer ** (puntero de punteros) y como asignar dinámicamente memoria para almacenar grandes grupos de datos.
Nos vemos
8 sep
Una de las cosas que mas quebraderos de cabeza me ha dado, ha sido el formato de las IP, en el forma que las utilizan las funciones de C (Ansi-C) en el caso de las IPv4, estas utilizan un formato Long Int (entero largo) esto quiere decir que la ip es representable en un entero largo (todas las ips de internet, me sorprendi un poco de eso) bueno en realidad segun la version y la arquitectura esto varia un poco, pero para x86 es igual, por ende salvo que usen SPARC u otras no sera distinto.
cuando uno desea utilizar las funciones de red de Ansi-C lo primero que uno como novato(que soy) es que se utiliza siempre la estructura sockaddr_in segun
1 2 3 4 5 6 | struct sockaddr_in { short sin_family; // e.g. AF_INET, AF_INET6 unsigned short sin_port; // e.g. htons(3490) struct in_addr sin_addr; // see struct in_addr, below char sin_zero[8]; // zero this if you want to }; |
y la subsiguiente estructura sin_addr
1 2 3 | struct in_addr { unsigned long s_addr; // load with inet_pton() }; |
y en el caso que yo quiera pasar una ip a una funcion por lo general se me pedira que utilize una funcion para ello,(inet_ntop e inet_ntoa), estas funciones pasan de la notacion “127.0.0.1″ a un unsigned long int “16777343″ equivalente, el fin de este post es explicar por que se pasa de ese numero a la ip “127.0.0.1″ y el por que se utiliza así,
Miremos el contenido del archivo /proc/net/tcp
1 2 3 4 5 6 | sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 00000000:2742 00000000:0000 0A 00000000:00000000 00:00000000 00000000 500 0 8126 1 ffff810012231300 3000 0 0 2 -1 1: 00000000:21C9 00000000:0000 0A 00000000:00000000 00:00000000 00000000 104 0 7477 1 ffff81001504d2c0 3000 0 0 2 -1 2: 00000000:1355 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 8088 1 ffff810012231900 3000 0 0 2 -1 3: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 7397 1 ffff81001504d8c0 3000 0 0 2 -1 4: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 7586 1 ffff81001504ccc0 3000 0 0 2 -1 |
Miremos el siguiente numero exadecimal “0100007F” (el numero 4 en la columna “local_address”)
adivinen cual es la notacion decimal de ese numero hexadecimal, no saquen la calculadora, es 16777343
ahora como pasar ese hexadecimal a su notacion 127.0.0.1,
simple, separen los 8 numeros en 4 pares de 2 numeros hexadecimales, luego nos quedaria algo asi
1 | 01 00 00 7F |
Lo que se convierte a
1 | 1 0 0 127 |
eso es 127.0.0.1 al revés.
Este método es el mismo para todos las IPSv4 almacenadas en el kernel de linux.
un ejemplo para utilizar las funciones puede ser,
imaginemos que declaramos tmp como
1 2 3 4 5 6 | sockaddr_in tmp; //declaramos la estructura char ip_str[INET_ADDRSTRLEN]; tmp_ip.sin_addr.in_addr=16777343 /indicamos la ip en su formato decimal inet_ntop(AF_INET,tmp_ip.sin_addr,ip_str,INET_ADDRSTRLEN); //adivino que esta funcion toma la ip // la pasa a hex y luego la descompone para devolver el valor en ip_str printf("%s \n", ip_str) //imprimimos 127.0.0.1 |
Según todos los archivos de la pseudo sistema de archivos /proc las ips se almacenan y son entregadas de esa forma seguramente para facilitar su manipulación, osea, al fin y al cabo para una direccion ip se utilizan 4 bytes, y no toda la cadena que significarian “255.255.255.255″ osea 8 bytes X 12 caracteres, y eso es mucho mas caro para el sistema.
IPv6 es parecido, pero en otro orden, Lo explicare en otro Post
12 may
HAproxy es un herramienta de balaneceo que creo que mas de uno ha encontrado util. Sin embargo un problema reciente provoco una seguidilla de revisiones por mi parte hasta encontrar al culpable.
Si a haproxy un backend en modo http le responde algún header incorrecto o malformado. Haproxy responde con un lindo error 502
El tema se arregla agregando
option accept-invalid-http-response
En su defincion de backends.
Con esto los backend pueden responder basura en sus headers y no sera tomado como error.
sin embargo hay que tener cuidado. headers malformados pueden ser tomados y utilizados para otros fines mas maleficos. asi que es preferible estandarizar los headers en vez de esta opción.
7 abr
Cuando me despidieron de mi trabajo anterior (la semana pasada) comenze a trabajar para mi nuevo empleador, una empresa que comienza a surgir, se ve muy bien el cuento, el caso es que por todos lados veo este letrero “No estacionar, SOLO RESIDENTES” en este caso me dije “bueno yo trabajo aquí mismo, por ende SOY residente”. Y cual fue el resultado?
CUEK.
Un lindo parte pegado en mi ventana bajo el parabrisas.
Ahora me complica el cuento, ¿Como se decreta quien es residente y quien no? Ya que mi jefe estaba estacionado frente a mi camioneta y a él no lo partearon, sin embargo el no sabe de nada respecto a dicho parte ósea, es como que ven mas seguido su auto por ende era residente? el viernes iremos a averiguar a la Municipalidad de Santiago ya que como estoy recien trabajando de nuevo no tengo suficiente poder adquisitivo como para andar pagando partes a diestra y siniestra. sin contar el hecho que fue mi primer parte.
25 mar
En el mundo del encargado de servidores linux, a más de uno le ocurrio que debio cambiar la contraseña de acceso de mas de un servidor (pongamos unos 100 o 300) a mi en lo personal no, pero a un amigo si (mi amigo Sendoh) bueno, el tema es que le dije “mira creo que con expect puedo hacer algo para ti” y en un rato logre hacer esto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/expect -f set ip [lindex $argv 0] spawn ssh root@$ip expect "connecting" send "yes\r" expect "password:" send "password_antigua\r" expect "\@" send "ls\r" send "echo \"password_nueva\" | passwd root --stdin\r" expect "all authentication tokens updated successfully" expect eof |
Lo crean con un nombre, ej. CambiaPassword.expect y le dan permisos de ejecución (chmod u+x CambiaPassword.expect)
este script necesita que borren el archivo ~/.ssh/known_hosts o lo vacíen ya que contestara “yes” cuando ssh pregunte “Are you sure you want to continue connecting (yes/no)?” y eso solo pasa si nunca se han conectado por ssh o si en su archivo ~/.ssh/known_hosts no esta o no hay nada.
Para finalizar si son buenos muchachos y dejan un archivo de texto con la lista de ips de servidores solo les falta hacer un
1 | cat archivoconips.txt | xargs CambiaPassword.expect |
Recuerden cambiar password_antigua y password_nueva para que se ajuste a sus necesidades.
11 mar
Hoy mismo en la madrugada me llamaron por que un ESX dejo de funcionar y al reiniciarlo no levanto nada, incluso la interfaz de administración quedo DOWN, por ende tuve que partir al trabajo (esto de estar de turno en la empresa)
Bueno, los servidores son algo desactualizados. ESX 3.0.0
Al ver la consola me encontré con la gracia que el servidor indicaba que la interfaz de administración se accedía vía
HTTP://0.0.0.0/
E indicaba un error
ALERT: Init: 1586: Invalid vmkernel id: 0. Distributed vmfs locking may not work
ademas de eso el modulo vmfs2 no queria levantar por ende dejando al esx sin acceso a los servidores virtuales. Despues de darle artas vueltas al cuento me encontre con este blog que dieron con el problema, el cual era que si no tenia ip configurada el vmkernelid asignaba un valor nulo y el vmfs2 no era iniciado. para lo cual habia que asignarle una ip. sin embargo a diferencia de lo que el blog dice, en mi caso la interfaz vswif0 no existia, asi que la cree usando el mismo comando pero agregando la -a
esxcfg-vswif -a vswif0 -i 192.168.10.2 -n 255.255.255.0 -p “switch conectado a la intefaz”
de “switch ” lo obtienen con el comando
esxcfg-switch -l
Revisan cual es virtual vswitch que tiene la puerta hacia su red de administracion y luego de eso podrán reiniciar, si por algún motivo no tienen rutas. agregenlas en el archivo
/etc/sysconfig/network-scripts/vswif0
agreguen la linea GATEWAY=ip.del.gate.way
Después otro reinicio funciono filete.
Pase por altos altercados antes de eso.
además NO SE LES OCURRA EDITAR EL ARCHIVO /etc/vmware/esx.cfg POR NINGUN MOTIVO. Miren que me puse a jugar con el y deje la media escoba que me costo arto reponer.
1 mar
Hola
Que manera de terminar mis vacaciones. Todo lindo este viernes mientras veia una pelicula con mi hermana y su pololo, “la guia del viajero intergalactico” y en la parte que el planeta era destruido empezo a temblar, cuando se puso un poco rudo, mi hermana fue por sus hijos al segundo pizo, en el momento que comenzo el remezon final (el que destruyo parte de mi pieza enterro mi tele de 32″ recien comprada y mi play station 3 juto con mi macbook)
cuando se detuvo un poco bajamos a mis sobrinos y nos quedamos en la parte ancha del patio y yo entre a la casa de mis padres, a la cocina y desconecte los balones de gas. ayudamos a mi tia a bajarse del segudo piso y la camioneta que salto por la calle estaba intacta ,la estacione y puse la radio. Mis sobrinos quedaron en el asiento de atras y cada replica que había yo movía el auto para que no se dieran cuenta que estaba temblando , termine durmiendo en la camioneta y mis sobrinos en su casa que aguanto el terremoto como ni una otra casa que vi cerca, luego al otro día fui a ver mi habitacion encontrandome con esto

Por el lado derecho, abajo de todo eso esta mi tele de 32″ recien comprada y mi play station 3 XD.
También desenterré mi mac como les habia dicho.
No reportamos ni una baja por ninguno de mis familiares o amigos y a algunos con suerte se les cayo un lapicero.
Cuando comenze a ordenar mi pieza, desentarrar mis cosas y probarlas. las play parecia estar lista y en perfectas condiciones, bueno ayer quize jugar y me encontre con esta yayita. y no me deja jugar nada que use trofeos D:
Una de las cosas que en su momento me dio miedo fue que estaba algo nublado y mientras terremoteaba el cielo se aclaro dejando ver la luna llena mas grande que vi en años.
en mi hogar ahora hay internet (lento) telefono, luz y agua, ahora solo falta que sony arregle la cagadita para poder ser feliz nuevamente.
27 ene

¿Que auto es este?
Lo vi en el movicenter pero no tengo claro que modelo es. solo que tiene un estilo que necesito.
21 ene
Acaba de salir el ultimo numero del comic de berserk, numero 310 y esta increíble.
Esta donde siempre así que disfrutenlo.