Category: Networking and Internet

Siproxd – a masquerading SIP proxy

Reading time: 1 – 2 minutes

De ben segur que en la mesura que Movilpoint ho permeti em sentireu parlar molt de VoIP, ja que fa temps que en Xoli i jo hi remenem coses que amb el temps i una canya podrien arribar a ser grosses, mentrestant aquí teniu aquesta utlitat tan interessant: Siproxd

Siproxd is a proxy/masquerading daemon for the SIP protocol. It handles registrations of SIP clients on a private IP network and performs rewriting of the SIP message bodies to make SIP connections work via an masquerading firewall (NAT).

It allows SIP software clients (like kphone, linphone) or SIP hardware clients (Voice over IP phones which are SIP-compatible, such as those from Cisco, Grandstream or Snom) to work behind an IP masquerading firewall or NAT router.

SIP (Session Initiation Protocol, RFC3261) is the protocol of choice for most VoIP (Voice over IP) phones to initiate communication. By itself, SIP does not work via masquerading firewalls as the transfered data contains IP addresses and port numbers. There do exist other solutions to traverse NAT existing (like STUN, or SIP aware NAT routers), but such a solutions has its disadvantages or may not be applied to a given situation. Siproxd does not aim to be a replacement for these solutions, however in some situations siproxd may bring advantages.

Entenent l’opció -d del tcpdump

Reading time: 2 – 3 minutes

[ Original ] Segons el man el tcpdump -d diu:

-d Dump the compiled packet-matching code in a human readable form to standard output and stop.

Imagineu-vos que volem veure els paquets que venen de 162.129.225.192 tan del tipus TCP com UDP. L’ordre tcp per fer això seria la que escric a continuació i a més gràcies a l’article citat, us descrit la interpretació del BPF filter (codi que genera el tcpdump per aplicar el que li hem demanat a la comanda).

# tcpdump -d src host centernet.jhuccp.org and \( ip proto \\tcp or \\udp \)
(000) ldh [12]
(001) jeq #0x800 jt 2 jf 8
(002) ld [26]
(003) jeq #0xa281e1c0 jt 4 jf 8
(004) ldb [23]
(005) jeq #0x6 jt 7 jf 6
(006) jeq #0x11 jt 7 jf 8
(007) ret #96
(008) ret #0

Interpretació del codi:

Carreguem els 2 bytes de més pes (big-endian) amb un offset de 12 bytes des de l’inici del paquet. En un paquet de tipus ethernet això correspont al camp de la capçalera on s’indica el tipus i la mida. Un cop tenim aquests bytes els comparem amb 0x0800, que és el codi dels paquets de tipus IPv4. Si és igual saltem a la instrucció 8, que retorna 0 ( reject this packet ).

Seguidament carreguem els 4 bytes de més pes amb un offset de 26bytes des de l’inici del paquet IPv4 en sobre ethernet, aquests 4 bytes corresponen a la IP origien i després els comparem amb 0xa281e1c0 (o sigui, 162.129.225.192). Si no és igual, saltem a la instrucció 8 ( reject this packet).

Ara carreguem 1 byte amb un offset de 23 bytes des de l’origen del paquet, el qual correspon al tipus de transport que conté el paquet IPv4. Si aquest byte és igual a 6 és un paquet TCP, si és igual a 7 saltem a la instrucció 7, la qual retorna 96, que vol dir accepta aquest paquet i agafa els primers 96bytes (accept this packet ang get its first 96 bytes). Si no és igual a 6, fem la mateixa comprobació que no sigui igual a 17, que correspon al codi de transport UDP.

El que he comentat en aquest post, que consti que no ho he deduït jo, sinó que ho he tret de la font citada. Però per la gent que treballa amb xarxes i entorns Linux, com jo, pot ser molt interessant així que aquí queda per si pot ajudar a algú.

Netwox – eines de xarxa

Reading time: < 1 minute

[ Via Caballe.com ] Netwox és una col·lecció d’eines (més de 150) per detectar i solucionar problemes de xarxa. Per exemple: sniffers, generadors de paquets, clients i servidors de diferents protocols, detecció de configuracions, PINGs (TCP, ICMP, UDP, ARP) i traceroute, escanejadors, eines SNMP. Disponible per Linux, Mac OS X, OpenBSD, Solaris i Windows. Si voleu veure un screenshot.

Doing things periodically – Using CRON

Reading time: 5 – 8 minutes

crontab.gif

Em vaig trobar un article sobre una eina molt bàsica per tots els que usem Linux, el crontab, una eina que tothom es pensa que domina i sovint ens trobem que no sabem programar algunes tasques que són ben fàcils d’automatitzar. Adjunto aquest article des de migraineheartache. M’agrada l’article perquè no és llarg i és molt pràctic. O sigui, que malgrat estar en anglès crec que és molt útil com a eina de consulta o d’instroducció/formació sobre aquest tema.

On a UNIX system there is always some things that should be done periodically, for example backups, locatedb updates and such things. This makes life easier, as you don’t have to keep all the things you should do in your head, or on silly little notes on your desk. Not to mention the fact that you don’t want to sit up all night doing backups.

The CRON daemon

The nice program that makes this possible is the cron daemon. It runs all the time the system is up and every minute it wakes up to see if there is something that should be done. If there is, it spawns a shell that executes some command. I’ll describe the most used cron package on Linux systems, Vixie Cron. Check out http://www.vix.com for some more interesting software.

Crontab’s

To instruct the crond when to do what, you use crontabs. Like many other programs, cron has a system and a per user crontab. They both have a similar format, with some small differences. What you do in the crontab is to give the minute, hour, day of month and/or day of week a specific command should be run.

The system crontab

The system wide crontab is most often called /etc/crontab. This file should have only important jobs, the file is only writable by root. Mine looks something like this:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/etc/ppp
# m h dom mon dow user command
44 5 * * * root run-parts /etc/cron.daily
07 5 * * 7 root run-parts /etc/cron.weekly
00 5 1 * * root run-parts /etc/cron.monthly

As you can see, there is seven fields with information. They are, in correct order: minute, hour, day-of-month, month, day-of-week, user and command. Some of the fields contain stars (*) which means any value will fit. The first line of my file tells cron that every day (the fields day-of-month, month and day-of-week have stars, so cron doesn’t care about them) at 05:44 in the morning I want the command “run-parts /etc/cron.daily” to be run. The command run-parts checks a directory for files that are executable by the user specified in the user field. It runs all of them, in some kind of order 🙂 This is a good way of getting a lot of small things done without writing a big script. Makes it a lot easier maintaining the jobs. My /etc/cron.daily have the following files:

calendar* standard* sysklogd* find* man* netbase* smail* tetex-bin*

So every morning at 05:44 my computer starts doing things like rotating my logs, updating the manual index files, updating the updatedb database and other things that is quite good if you do once a day. At 05:44 I usually don’t use my computer anyway (I do actually sleep sometimes ! 😉 ) so these jobs don’t use any CPU – time I could need. The other lines work just as the first, executing things every week and every month. There is a user field, if you put another user than root there, it will run the command with other rights than root. That is often recommendable by security reasons.

The per – user crontab

Every user on the system may write his own crontab. The job will be executed even though the user is not logged on. The format is similar to the system crontab, though there is not user field, since a user’s cron commands will always be executed as that user. My personal crontab looks like this:

    10 5 * * 0 futility tool "+delete" "keep+1300" ; futility pack
    5 3 * * * /home/erik/bin/mirroring
    15 0-23/1 * * * /usr/bin/fscan

As you can see, it has three jobs. The first one goes every Sunday (Day of week field has the value 0, which is Sunday. I could write ‘Sun’ there too) and does some packing of my fidonet message base. The second goes every day at 5 minutes past 3 in the morning and mirrors some ftp archives. The third executes 5 minutes past every hour 24 hours a day. The syntax 0-23/1 tells cron it should do it once an hour from hour 0 to hour 23. 0-14/2 would mean twice an hour from 00:00 to 14:00 in the afternoon.

The crontab command

When a user wants his own crontab, he has to install it. This is done with the command crontab. The syntax is quite simple, crontab name-of-crontab will install the file you specified as your new crontab. The command crontab has some other switches, to list, edit or remove crontabs, but the basic syntax is actually all you need to know – If you want to edit you crontab, do so and reinstall it with a new crontab command.

Environment variables and file rights.

There are a few things one should think of when trying to master cron. First cron doesn’t read your login files to set the path you’re used to, so a command that executes just fine when you test it may not run at all because cron can’t find some file. There are two solutions to this problem, the first is to use only absolute filenames (ie give the whole path to the files), the second to include something like this:

    PATH = /usr/local/bin:/home/foo/bar

That way you set the environment variable PATH, so your scripts will find the files. Another environment variable of interest is MAILTO. If you set that variable (the same way as you set PATH) cron will mail the output of your commands to the address specified. Cron will by default mail the output to the user the crontab belongs to, but if you want the mail to go somewhere else you may specify it in the variable. You may also give an empty MAILTO variable (by writing “MAILTO=” in your crontab). Cron won’t mail any mails to an empty address. File rights can sometimes be a problem. If cron doesn’t want to execute your scripts or programs, try giving the group or world execution rights to the file. That may solve the problem. The irritating thing is cron won’t tell you it can’t execute, it just sits there doing nothing.

dir2ogg de MP3,MP4 i WAV a OGG

Reading time: < 1 minute

dir2ogg: Un script fet en python que ens permet convertir formats d’audio de: MP3, M4A, i WAV a OGG. És important destacar que manté els ID3 tags que puguin tenir els fitxers. Requereix oggenc (part of the vorbis-tools package) i mpg123 (or mpg321 with the appropriate symlink).

Devilspie: obrir programes sempre a un workspace a les X’s

Reading time: 1 – 2 minutes

Doncs jo sempre treballo amb 5 workspaces al GNOME, els uso per:

  • Consoles
  • Misc
  • Aplicaciones d’oficina, editors, etc.
  • Navegar
  • Correu

El problema és que sempre havia d’anar al workspace per obrir els mateixos aplicatius als espais que jo volia. Això amb KDE ho sabia controlar, però amb GNOME no sabia com. Així que he buscat una aplicació que permet gestionar això i d’altres propietats més de les aplicacions quan es llencen. Aquest aplicatiu és Devilspie, no he trobat massa ajuda de com configurar-la malgrat que amb les quatre coses que explica la gentoo quan s’instal·lat n’he tingut prou per crear el fitxer de configuració. Si voleu veure el fitxer de configuració que de moment tinc fet, l’únic que heu de fer és col·locar aquest fitxer amb vostre home i ja ta. ( ~/.devilspie.xml)

IOzone – estadístiques d’accés a disc

Reading time: < 1 minute

El IOzone és una utlitat d’estadístiques dels accessos a disc. Les operacions que monitoritza són les següents:

Read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write

Podem fer cosetes tan mones com aquestes:

iozone.gif

Mini-guia de com usar l’ImageMagick

Reading time: 4 – 6 minutes

imagemagick.png
Es tracta de manipular imatges a través de la línia de comandes, la potència de l’Imagemagick és brutal, així doncs aquí no veurem ni l’1% de tot el que és capaç de fer. Però intentaré fer una petita guia amb algunes funcions força útils. Si voleu aprofundir més amb el tema: Examples of ImageMagick Usage (version 6). Concretament les eines del Imagemagick que usaré són el convert i el composite. Els textos que veureu a continuació estan inspirats també en un parell d’articles d’IBM: Graphics from the command line i l’altre: More graphics from the command line.

Sempre usem la mateixa imatge origen en tots els exemples: (mussols.jpg)

mussols.jpg

Creem marcs a les imatges

Creem un marc amb una doble ralla negre i un fons blanc de 3pixels entre les dues ralles negres d’1pixel al voltant de la imatge origen.

Codi:

convert -mattecolor black -frame 1x1 mussols.jpg mussols-11.jpg
convert -mattecolor white -frame 3x3 mussols-11.jpg mussols-12.jpg
convert -mattecolor black -frame 1x1 mussols-12.jpg mussols-13.jpg

Resultat:

mussols-13.jpg

Haureu vist que al portal uso un codi CSS que em fa apareixer un marc de color gris a una distància de 4 pixels del contorn de la imatge. Doncs bé a continuació us explico com podriem incrustar aquest marc en la propia imatge.

Codi CSS que uso per fer l’efecte:

.imatge img {background-color: #fff;border: 1px solid #a9a9a9;margin: 5px 5px 5px -5px;padding: 4px;line-height:0px;}

Com fer-ho amb Imagemagick:

convert -mattecolor white -frame 4x4 mussols.jpg mussols-7.jpg
convert -mattecolor "#a9a9a9" -frame 1x1 mussols-7.jpg mussols-8.jpg

Resultat:

mussols-8.jpg

Per acabar amb el tema dels marcs, com arrodonir els contorns de la imatge i a més afegir un contorn blanc de 4px i un marc gris d’1px. Aquesta tècnica l’he tret d’un document anomenat: Cutting up Images.

Codi: ( ronded-ne.png, ronded-nw.png, ronded-sw.png i ronded-se.png )

composite -gravity NorthEast rounded-ne.png mussols.jpg mussols-1.jpg
composite -gravity NorthWest rounded-nw.png mussols-1.jpg mussols-2.jpg
composite -gravity SouthWest rounded-sw.png mussols-2.jpg mussols-3.jpg
composite -gravity SouthEast rounded-se.png mussols-3.jpg mussols-4.jpg
convert -mattecolor white -frame 4x4 mussols-4.jpg mussols-5.jpg
convert -mattecolor "#a9a9a9" -frame 1x1 mussols-5.jpg mussols-6.jpg

Resultat:

mussols-6.jpg

Escribint sobre una imatge

Simplement vull afegir una nota de l’autoria i la llicència (autor: Mussols i llicència:”Creative Commons”) de la foto a la part inferior dreta de la imatge, amb lletra arial i mida 20, amb una separació de 2px per sota i per la dreta del marc de la foto.

Codi:

convert -font /usr/X11R6/lib/X11/fonts/truetype/arial.ttf -fill white -pointsize 20 -draw 'gravity SouthEast text 2,2 "(cc) Mussols"' mussols.jpg mussols-9.jpg

Resultat:

mussols-9.jpg

Canviant la mida de les imatges (resize & scale)

Una altre cosa que necessitava fer era canviar de mides les imatges, però sense perdre la geometria de les mateixes. Això ho he trobat al document ImageMagick v6 Examples — Resize or Scaling.Podem mirar aquest exemple, agafem com sempre la imatge origen ‘mussols.jpg’:

convert -resize 320x320 mussols.jpg mussols-10.jpg

Resultat:

mussols-10.jpg

Això no converteix la imatge a 320×320 sinó a 320×240 que és la proporció real de la imatge origen. O sigui que no perd la geometria de la imatge origen. Això és molt útil, perquè podem posar 1024×768 per exemple, i no tindrem mai una imatge més ampla de 1024 ni més alta de 768. Per imatges que han de ser usades en aplicatius que corren sobre una pantalla pot ser molt útil.

També hi ha formes de perdre la gemotria però pel meu cas no era necessari, així que no ho he comentat, però ho podeu mirar al document que he referenciat més amunt i trobareu com fer-ho.

Extensions de Firefox que uso

Reading time: 3 – 5 minutes

firefox.png

Per win ja fa temps que uso Firefox i totes les versions que han anat sortint fins a la versió 1, que tan soroll va fer fa uns dies. Però al linux fins avui usava el Mozilla, així que finalment m’he decidit a instal·lar la versió 1.0 de Firefox i disfrutar de les seves millores sobretot a nivell de velocitat. També he notat que usa una serie de fonts que no són iguals que les que em sortien en Mozilla, molt més boniques, és clar. Bé doncs com no li he posat algunes extensions que em són molt útils:

  • Linky permet administrar enllaços existens dis d’una pàgina, encara que no estiguin marcats com a tal en el codi HTML. La utilitat més interessant que li trobo és permetre verificar que tots els enllaços inclosos en un post publicat al weblog són vàlids. Per això només cal seleccionar l’entrada, primer el botó dret del ratolí­ i seleccionar l’opció Linky -> Open Selected Links in Tabs. D’aquesta forma tots els enllaços que tenim dins el text seleccionat es previsualitzen i, si volem, s’obren en pestanyes separades la qual cosa ens permet verificar que realment funcionen d’una forma encara més comode.
  • BUGMENOT ens dona un usuari i un pass en milers de pàgines que ho requereixen, sobre tot les més famoses. Tot i que jo dec ser gafe perquè al NYT no m’ha funcionat mai.
  • MozEx podem editar una ‘textarea’ amb l’editor que volguem. Aquesta extensió la vaig coneixer a partir del forum del Blog:CMS, concretament en aquest article, on es parla del mozex de mozilla.
  • Web Developer es tracta d’una barra de botons, que no tinc sempre carregada, però que és molt útil quan alguna de les webs personals que mantinc dona algún que altre problema de codi, és realment útils si toqueu webs a nivell de codi, o su uns ‘fisgons’.
  • AdBlock simplement una extensió que intenta bloquejar-nos tots els anuncis que porten les webs d’avui en dia, un ‘incordio’ realment. No va malament del tot.
  • Bloglines Toolkit permet sindicar-se als RSS a través de bloglines mentre estas navegant.
  • SiteBar aquesta extensió em permet usar el SiteBar a la sidebar del Firefox. Si no coneixeu el SiteBar, jo el trobo molt més útil que el del.icio.us. Fa temps vaig escriure sobre el SiteBar: SiteBar: Servidor de Bookmarks/Favoritos

Si busqueu alguna extensió més ‘rara’ que jo no uso, podeu passar-vos per la part d’extensions de la web de mozilla, concretament al producte firefox. Per altra banda també he trobat una pàgina amb una recopilació de les extensions que esta molt bé: Extensions Room de mozdev.org. Si algú vol desenvolupar extensions per Firefox he trobat una guia ràpida.

Una cosa que no sé fer amb el firefox i que m’agradaria saber fer, per si algú ho sap, és aconseguir que es guardin les pàgines de tots els tabs quan tanqui el navegador de forma que quan el torni a obrir es tornin a carregar automàticament.

Linux Tips: Modules, Who Are They, And How Do They Work?

Reading time: 2 – 3 minutes

[ Via Migraine Heartache ] A very nice feature of the Linux kernel is the modules. Modules are pieces of software that can be loaded and unloaded from the kernel at runtime. That way you can save kernel memory (and that’s important for small machines, since kernel memory is never swapped out on disk), and keep your kernel clean when you’re not working with some of your hardware.

Especially sound and network cards are really good to compile as modules, since sometimes they are a bit hard to configure, and when you have a module, you don’t have to recompile and reboot your kernel to configure some irq or io setting.

The Tools Used

The tools you use to handle modules are all located in /sbin. They are insmod, modprobe, lsmod, depmod and rmmod.. Notice the names, and compare them to some often used unix commands such as ls and rm and you’ll immediatelly understand what each command will do for you. As always I recommend reading the manual pages. Anyway, here’s what they do:

  • lsmod – List the modules currently loaded. A completely harmless command, even a normal user can run it.
  • rmmod – Removes a loaded module from memory. Checks dependencies, ie if a module needs another module, the other module may not be unloaded before the first one.
  • insmod – Inserts a specific module in memory. You may give a path, or just a filename with or without extension. In the latter case, insmod will search some standard module paths to find the module.
  • modprobe – Inserts a module in memory, but checks dependencies. If you modprobe module A, and module A needs module B to run, modprobe will insert module B and then module A.
  • depmod – Calculates dependencies between modules needed by the other module commands. This is most probably done by your init scripts at system startup, but some time you may need to execute a depmod -a.
  • modinfo – ens dona informació sobre les funcions del mòdul, els paràemtres que suporta, etc.(se l’havien deixat)

How do I make modules?

When you compile your kernel, you choose to make things as modules, instead of into the kernel itself.

The modules will be installed when you do a make modules ; make modules_install after your kernel is compiled. They will reside in a directory called /lib/modules/xx.yy.zz where xx.yy.zz is your kernel version.

Scroll to Top