13 noviembre, 2024
03 mayo, 2023
Pseudocode for an Ethernet switch
How does an Ethernet switch work? I'll explain it as far as I can understand, using the clearest way I can imagine (code). Hopefully I got it right.
Prerrequisites
The switch has a number of interfaces or ports. There are cables connected to some of them, that come from computers or other switches or network equipment.
The switch receives and sends ethernet packets (or frames) through its ports.
Each packets typically includes a couple mac addresses. A mac address is a 12 digit hexadecimal number (6 bytes) that is used to identify the sender or recipient of a packet. There several kind:
- Unicast: Every network card has a unique own address. Eg: a laptop could have 2 of them (one for LAN card, another for Wi-Fi). The 8th bit of this type is always 0.
- Non-Unicast:
- Broadcast: The mac ff:ff:ff:ff:ff:ff. Used to send packets to all the hosts in a LAN.
- Multicast: All macs that have 8th bit set to 1, but are not the broadcast mac. Used for multicast communication.
Every packet has these fields.
- Destination Mac Address: Identifies the recipient of the packet. It may be a host or a router, but it could also be multicast or broadcast.
- Source Mac Address: Identifies who sent the packet. Typically a host/router in the LAN.
- Ethernetype: Identifies the type of packet. Eg: An IP packet.
- Payload: Other headers (like TCP) and finally data.
The switch has an internal "bridge table" or "mac table". Which is used to tell on which interface is every mac address that it knows. It's fields are:
- Mac address
- Interface
- Timeout (after not seeing a packet with that mac address the entry is removed to save resources).
Pseudocode
22 diciembre, 2022
SOCAT cheat sheet
Remember that socat usually has 2 legs. Both are connected bidirectionally.
| Listen/Passive | Connect/Active | |
|---|---|---|
| TCPv4 | TCP4-LISTEN:8000,reuseaddr,fork | TCP4:192.168.1.5:8000 |
| OpenSSL | OPENSSL:192.168.1.5:1443,pf=ip4,verify=0, |
|
| Unix Socket | UNIX-LISTEN:mysqld.sock,mode=777,reuseaddr,fork | UNIX-CONNECT:mysqld.sock.orig |
| SOCKSv4 | SOCKS4:socks-server.local:10.1.2.3:22, (First IP is socks server, Second IP is destination server). |
|
| HTTP Proxy | PROXY:aproxy.local:example.com:80, |
|
| STDIO | - / STDIN | - / STDOUT / STDERR |
| Misc | EXEC:/bin/bash
FILE:/dev/null |
Example certificate file server.pem: [Click here to show]
-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDJMPk+QVoqNgj3 8QIwBRZU+UR2d4qmkpAz7XFz4Hi3gIiPJAG581bAueSalCzvRQ4G0/YAKN5/PEeW 3NAlBNSzXLX6sllO7E1hQQCdTXv0qhZaazz42Txky0jNWmSx7ZLZpK+9/hgsUBTG FgZ0YsCNivUoLlshDCxGrArE7kXMjYhS9csXPRyv6DeebjwjXmZoaFsnnkwod1ZR Dui3CgoJregfst3Sj82UfYtSZz6KwfOhepPazaLt1+Foa6LAzVuLgI0m1EG9hkbo mzySKkfoKj3yaiKg+l/6F6WfBuLcvI4B55bvFQcvb5cD97Toddwkegzb3ifn2mQL BdIynyMxAgMBAAECggEAS6kVMmpVRCaJ/OQv1Gs1WMNdEcgm5jmb7UtQLSmvfCLk OCBsXce7SkMeS1uKAnlPqxWvH6Q++E5tBbkItcM5UjJ9ZUgI+fs3pmlRl9Z51SrZ uSs3BMZ9RdKFEGT8FUWowhyC0sppwNBk35GM39v7Wb92LqQwNR9kzzcH3cNVkHTF bpWMLCMDPBvLPTKsA2PFiZAknS8Zaj+o9EpOJ9lAL5vR89M+J33EtqlvNCKY+t4W NQa1HMwZWDJaG5mONQmkhH3pDVRhAbEjc/QEc1FxfDus4cr4EbU0IkEeT2CdDyY/ nrMLq6RXTlQQEvyaoGV/I09eEQDSkkLnSBGEY8s8uQKBgQD/+66YO1bfKHWLn93x 4rX7AcP9V+hDqnxq4OQJ6P6DNU+d5y1kpey0eh0eeSaMTbjJ3l24Hm8yqRG/+ymU E0pOB121TlFra5CerYlBGxX2brCzxtP7Km5JEYQBaprXLApiFBfl5FA+VlRkj+np XCpWMdMZqtY2z/SIWYElLIhACwKBgQDJNF4K2enckH6qUnitkr0kfCA4XM/pW8EC dNluVPq4U1G0kUGVZhlnn/lIakzLxoIUD/e2c4r6FNSQwYrUy3hGj4QSKq3GHZYg K17XrZzWdApoOxXqq7yT+X6iBLG3uTh389mDj26vxEa8TL38G41nJvTMFzhkO7fO feLcdVbDMwKBgDWH404Qcq0+H76wEtDHkTjJeLvdC0RDPbt4BhgQclDr8BdcRcDb dfGT68z4ltgWVMNaTgz3yFc2xfB4zIwbsJk6rx0AIMSu/NJCBgbobCJZqXge5yuK BwAeupU1PuYqXo1+GDVKFoHCuelBsy/Kx0u5JaUjdaKGwGNXHEuy0VdbAoGAbNNV NjtNIU5KJGd8/CzM/sngR3vzvH0zNNfsrp9qCH6QR8D1HxBdF05Qb5mHNgSFYMKO MfHmroLLwgvcwmHXCRsgzQ6mdOyVwYqTvsYZeWjEJEIpBYej9MlSc+FkGkIlR8Pt 1xmiPZFEzR4Y+B4S6kMIzsaUaqpeLWKrbKBOsD8CgYB5F+V2FCLXI/3Ri2WR1/0q 7Ra2DlD9g0WOWwdBNb0qPkRuuL6xd8pNAKUenMsQS4hX12kKy/CvqTDVRJIWn0v/ LosE7P6U1+usdkZ5ZbVDLlV/QuKMFldwMXSJgsLMPwPJ8WopVK+/cZHnmvpBpGEW P4bG9UCCukn/FCAZQ0dtEw== -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDjTCCAnWgAwIBAgIUFJR+h8yozg0PHrJZqqR4Cfq7euEwDQYJKoZIhvcNAQEL BQAwVTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEOMAwGA1UEAwwFc29jYXQwIBcNMjQx MTAyMTg1MzU0WhgPMjEyMzEyMTQxODUzNTRaMFUxCzAJBgNVBAYTAkFVMRMwEQYD VQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBM dGQxDjAMBgNVBAMMBXNvY2F0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAyTD5PkFaKjYI9/ECMAUWVPlEdneKppKQM+1xc+B4t4CIjyQBufNWwLnkmpQs 70UOBtP2ACjefzxHltzQJQTUs1y1+rJZTuxNYUEAnU179KoWWms8+Nk8ZMtIzVpk se2S2aSvvf4YLFAUxhYGdGLAjYr1KC5bIQwsRqwKxO5FzI2IUvXLFz0cr+g3nm48 I15maGhbJ55MKHdWUQ7otwoKCa3oH7Ld0o/NlH2LUmc+isHzoXqT2s2i7dfhaGui wM1bi4CNJtRBvYZG6Js8kipH6Co98moioPpf+helnwbi3LyOAeeW7xUHL2+XA/e0 6HXcJHoM294n59pkCwXSMp8jMQIDAQABo1MwUTAdBgNVHQ4EFgQUiXdolR+gTwMJ kvyvw/hUgQ401wAwHwYDVR0jBBgwFoAUiXdolR+gTwMJkvyvw/hUgQ401wAwDwYD VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAP/RQ9eQa2dUHlCJTw54W nj1P4rv8my3K2uJEPoWyHK/fDStyXU+PBW85uEi7s+uIiiy/OzjacCPTS/Wvo/hu Iwp/RnawcK5eswSdHNQdwz2dVZ599/l2pxM14CUmDebJjWladzUZmcstCtG5tcvb YwSoG4HYlGSjUVhv1oHRYR0GMkmBnh6haoUL63gVXkso2mi72glJ2Xv0R7A+r77i tjFeW2qH65nnlpwVfsf+69KDdAxVRny1skFYM1IcXoC0zNJC40vXniVn2MPn7Ee4 D2UQx2CFVlW0L6VYygCvF7ZT8eSrys9zm+4karpXBO9pQO3lri0tJtzVhMStAqU2 uw== -----END CERTIFICATE-----
03 marzo, 2019
Navigate Google Earth like a Pro
04 agosto, 2017
[Idea] ThunderMonkey: GreaseMonkey for Thunderbird
The script editor window:
The main difference with Greasemonkey is that now we cannot match against an URL, but instead we have to match against email headers.
The scripts should also be able somehow to access all mail headers and body to do additional filtering.
Btw, I'm already used to writing user scripts, but not extensions.
Any thoughts or help is welcome :)
12 agosto, 2012
Upgrade Parrot CK3000 Evolution with a Max232 chip
In order to make the CK3000 work well with Android phones you will need to upgrade it to version 5.25c. You could do get this done by a professional, or you could buy a rather expensive official cable. I'm making the cable myself with the help of other people who made a similar one first.
First of all read the original post http://peter.holcroft.net/ck3000/
This is a simple application of the Max232 chip i have:
I also connected the required wire between pin 9 & 10 (not showing in this pic):
And now the software process. I used a laptop and a USB-to-serial adapter.
* Update process and symptoms:
- Select CK3000 Evolution.
- Select Serial update.
- Select 115200 baud.
- Wait for "XPRAM downloading". Progress bar should not move yet.
- If progress bar moves there may be something wrong.
- If it says something like "Cannot set baud rate" probably the wire between pin 9&10 is not ok.
- If it says something like "Cannot open port" disconnect the usb device, click back and next.
- Power on the parrot. After 1 to 5 seconds progress bar will start moving. It will take about 10 seconds to finish.
- If you get an error like "Cannot send data" there may be a bad cable.
- If the bar loops over and over something is wrong. Better try again.
The rest of the process is relatively fast except the "Flash programming" which takes more than one minute.
It can randomly stall or throw the "Cannot send data" error at any time. If it happens try again.
26 julio, 2011
The CRC32 of this string is 4A1C449B
Pues si, estaba aburrido y se me ocurrió si sería posible insertar el hash de un texto dentro del propio texto.
Viabilidad
Como no estaba muy seguro primero analicé la viabilidad. Si asumimos un formato de texto fijo, en el que sólo varía la parte del hash, la probabilidad no es baja.
Para un hash n bits, la probabilidad de acertar a la primera es:
1/(2^n)
Por tanto, la probabilidad que exista un resultado válido en todo el espacio es:
Por tanto es probable encontrar algún hash con estas características, y si no apareciera probaríamos con otra cadena base distinta.
Optimización
Lo siguiente que hice fue tomar un código de ejemplo de código de CRC32 basado en tabla de 8 bits, y precomputar una tabla de 24 bits (que debe ocupar unos 96MB en memoria).
Este código es capaz de calcular las 2^32 posibilidades en unos pocos minutos.
Habría estado bien hacer algún análisis que permitiera alguna optimización específica para este problema, pero no llego hasta ahí.
Resultado
Tras 2 minutos obtenemos:
"The CRC32 of this string is 4A1C449B"
Y poco más que decir, se puede verificar (es importante no añadir saltos de línea ni espacios al final) aquí:
Con un poco más de trabajo podemos obtener:
"I killed 56e9dee4 cows and all I got was..."
25 junio, 2010
No ajustes tu televisor, pero esto NO es 3D
«No ajustes tu televisor, no intentes activar el 3D, porque esto no es 3D»
El efecto que se ve en el anuncio consigue su objetivo, pero realmente no es 3D. Si fuera 3D habría un desfase horizontal en algunas de las imágenes, pero en ningún caso lo habría en vertical como se aprecia a lo largo de todo el anuncio.
03 abril, 2010
Multicargador para moviles (Mobile multicharger)
Uno de los últimos cacharros que me he comprado es un aparato muy versátil, un multicargador para teléfonos móviles.
Algunas de las cosas que permite hacer son:
- Cargar pilas alimentandose desde el PC, y posteriormente cargar el movil con ellas.
- Cargar el movil con el sol.
- Comprar pilas alcalinas y cargar el movil con ellas.
Y lo mejor de todo es que hay aparatos de estos desde 15€.
No es un gadget para llevar en el bolsillo, pero sí para ir de campo (si es que no queremos desconectarnos).
12 enero, 2010
La pila 802.11 para el sistema operativo
Como estaba aburrido he decidido hacer un diagrama de la pila IEEE802.11 desde el punto de vista del sistema operativo (Linux).
- En el caso de las tarjetas de tipo Software MAC, el driver se apoya en el la pila mac80211 del kernel para la conversión a 802.3 (ethernet) y las tramas de gestión.
- El modo monitor o rfmon no es lo mismo que el modo promiscuo, si entendemos por modo promiscuo la recepción (e inyección) de tramas a nivel 802.3. El modo monitor exige recibir (e inyectar) tramas completas con la cabecera original 802.11 (y opcionalmente otras cabeceras auxiliares como radiotap o prism).
11 agosto, 2009
SlideType Keyboard: deslizar para escribir en Android
Los teclados virtuales en pantalla de los teléfonos tienen varios problemas:
- Los teclados QWERTY tienen las teclas muy pequeñas.
- Otros teclados requieren pulsar las teclas varias veces o dependen de diccionarios, que no van bien.
Por ejemplo, si apretamos el dedo sobre la tecla etiquetada "2ABC", lo movemos a la izquierda y lo soltamos escribiremos la letra A. Si hubieramos movido hacia arriba hubiera sido la letra B, y a la derecha la C.
Demo en Javascript: http://www.latinsud.com/pub/slideType/
Download con QR-Code:
Visita el blog de SlideType Keyboard (inglés):
03 junio, 2009
Plugin para Gimp para hacer escalas de mapas
Ante la necesidad de hacer muchos mapas a medida y la curiosidad de aprender script-fu he decidido hacer este plugin. Con esta experiencia he aprendido varias cosas:
- Script-fu es relativamente potente.
- LISP/Schema/SCM es horroroso.
Los parámetros más importantes son Step(px) y Step(unit), que definen cada cuantos pixeles hay un cuadro, y qué distancia representa cada cuadro.
Algunos ejemplos:
http://registry.gimp.org/node/16532
http://www.latinsud.com/pub/mapscale/
30 mayo, 2009
Inteligencia o Daltonismo
Me encuentro uno de esos banners de publicidad que salen ahora de test de inteligencia. Hasta ahora me habían parecido incluso interesantes, pero esta vez la han cagado:
En segundo lugar las respuestas posibles son: 74 o 21 si eres daltónico. No creo que nadie sea capaz de ver un 75 o un 94 con independencia de su nivel intelectual o daltonismo.
Análisis
Por último, vamos a analizar lo que vería un daltónico:
- Las partes rojas se confunden con las verdes.
- Las partes azules quedarían igual.
- Convertir la imagen a RGB. (Imagen->Modo->RGB)
- Descomponer en los 3 colores. (Colores->Componentes->Descomponer).
- Vamos al diálogo de capas (Ctrl+L) y ocultamos la capa azul.
- Pinchamos en la capa de más arriba (rojo) y desplazamos la barra Opacidad al 50%.
- Pinchamos con el botón derecho en la capa roja le damos a Combinar hacia abajo.
- Componemos la imágen. (Colores->Componentes->Componer). Usamos la misma capa para rojo y verde, y la capa azul para el azul.
18 mayo, 2009
29 marzo, 2009
Adaptador USB Telsey de Tele2 en Linux
Hace tiempo que tengo dando vueltas un adaptador Telsey, que venía de regalo con un router de Tele2:
Datos técnicos:
Tras abrirlo y buscar información veo que es compatible con el driver P54.El interior viene a ser algo parecido a esto:
En mi caso el chip pone: GW3887AIKZFinalmente creo un parche para el driver p54usb. (En concreto para 2.6.29-wl [git]):
diff --git a/drivers/net/wireless/p54/p54usb.c
b/drivers/net/wireless/p54/p54usb.c
index da6640a..ef0fc55 100644
--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -75,6 +75,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
{USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */
{USB_DEVICE(0x413c, 0x8102)}, /* Spinnaker DUT */
{USB_DEVICE(0x413c, 0x8104)}, /* Cohiba Proto board */
+ {USB_DEVICE(0x1413, 0x5400)}, /* Telsey 802.11g USB2.0 Adapter */
{}
};
Confirmo que con ese parche funciona, aunque solo la he probado 2 minutos con un AP en abierto.
22 noviembre, 2008
Teclado MIDI en Linux
Hace unos años compré este teclado MIDI (MK-3701) en ebay. Es un teclado puramente MIDI, no tiene altavoz ni genera sonido alguno. Para utilizarlo es imprescindible conectarlo a un puerto MIDI como el que tenían las tarjetas de sonido antiguas.
Por otro lado tengo un PC viejo con una tarjeta de sonido Avance Logic ALS120 (semi-compatible con Sound Blaster 16).
- La primera opción era conectar directamente el teclado al sintetizador OPL3 de la tarjeta (mediante rosegarden). Pero por alguna razón no me funciona.
- La segunda opción era usar un sintetizador software (timidity) y utilizar la salida PCM. El problema es el uso de CPU (es un PC que tiene bus ISA...) y la calidad de sonido (esta tarjeta parece funcionar en 8 bits).
- La opción que me da mejor resultado es usar mi flamante portátil para sintetizar el sonido. Para ello tengo que enviar el protocolo MIDI por la red (al principio probé con rosegarden y multimidicast).
Primero ejecuto esto en el PC antiguo que tiene el teclado:
aseqnet & # Lanzar el servidor MIDI en red
aseqdump -l # Listar los dispositivos disponibles (16:0 Avance Logic, 128:0 Net Client)
aconnect 16:0 128:0 # Conectar la entrada del teclado al servidor MIDI.
A continuación ejecuto esto en el portátil:
aseqnet 192.168.1.10 & # Conectar a la IP del servidor MIDI
timidity -iA -Os1 -B 2,3 & # Lanzar el sintetizador software (Fijarse que le asigna el nº 128:0)
aseqdump -l # Listar los dispositivos disponibles (129:0 Net Client)
aconnect 128:0 129:0 # Conectar el cliente MIDI con el sintetizador
Tras esto ya puedo tocar el piano con baja latencia y alta calidad de sonido.
Si algo falla lo primero es comprobar que el sonido se esté enviando por la red: ejecutar ambos comandos aseqnet y medir el tráfico en la red al pusar las teclas (debe subir a ~1 KB/s).
20 octubre, 2008
Tira #13: Manifestación
Vale, es un juego de palabras muy tonto.
Todas las tiras. Feed RSS de todas las tiras
19 octubre, 2008
Tecla de inicio sin logotipo de windows
¿Por qué los teclados tienen que traer el logotipo de un sistema operativo, si además en muchos casos el ordenador no tiene ese sistema? Afortunadamente existe el disolvente universal para remediar esta incongruencia.
Basta empapar un bastoncillo de los oídos en disolvente y frotar la tecla. Luego secar con un pañuelo de papel. Hay que tener cuidado, la propia tecla se puede llegar a disolver, aplicar el disolvente en pequeñas cantidades y secar enseguida.























Marcador RSS