18 junho, 2007
gnetinfo - estatisticas de downloads
Se fôr dono de um site da net terá alguma dificuldade em saber qual o throughput que o seu servidor está a ter de upload; eventualmente se gerir uma empresa que tenha uma ligação T1 a um provider de luxo, quererá atestar que a ligação é fiável, permanente, e com velocidade aceitável.
Todos estes tópicos demoram tempo a monitorizar, e custam dinheiro. Ter alguém que faça isso por si, ao melhor preço, é o que procuram oferecer várias empresas com portais online.
Diferentes ferramentas, em diferentes alturas, providenciam diferentes valores.
No exemplo de cima, usamos dois snarfers de páginas HTML, que poderão atestar se o seu servidor em Londres está em cima, e consegue transmitir dados a uma taxa aceitável.
gnetinfo é um snarfer de HTML que apresenta mais algumas estatísticas do que os programas habituais, e implementa um compasso de HTTP adequado ao servidor -- por vezes é mais lento, mas ajusta a sua velocidade.
Todos estes tópicos demoram tempo a monitorizar, e custam dinheiro. Ter alguém que faça isso por si, ao melhor preço, é o que procuram oferecer várias empresas com portais online.
Diferentes ferramentas, em diferentes alturas, providenciam diferentes valores.
gnetinfo "http://frog.moreira.dnsalias.net/~guest/vmware-FROG.JPG" -o @@ --statsNo entanto é bastante difícil saber se realmente o seu site (suponhamos remoto, em Londres) está inacessível devido a uma falha do computador que faz a prova (probe), na rede pelo caminho, ou realmente no site que alugou por muitas libras...
Stats (in miliseconds):
Total: CPU_used=140 ms, elapsed=20212 ms
Total octets: 92790
Head reply: 152 ms, content reply: 20101 ms, client pace: 0 ms
Throughput (Octets/s): in=4.6
snarf "http://frog.moreira.dnsalias.net/~guest/vmware-FROG.GIF" bla.gif
http://frog.moreira.dnsalias.net/~guest/vmware-FROG.GIF (129K)
bla.gif [########################] 129K | 26.31K/s
132935 bytes transferred in 4.94 sec (26.29k/sec)
[henrique@fuji snarf-7.0]$ ssh -l guest frog
Linux frog.moreira.dnsalias.net 2.6.8-2-386 #1 Thu May 19 17:40:50 JST 2005 i686 GNU/Linux
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.
guest@frog:~$ ls public_html/
Thumbs.db vmware-FROG.bmp vmware-FROG.GIF vmware-FROG.JPG
guest@frog:~$ ls -l !$
ls -l public_html/
total 1852
-rw-r--r-- 1 guest guest 17920 2006-11-04 04:49 Thumbs.db
-rw-r--r-- 1 guest guest 1630838 2006-11-04 04:46 vmware-FROG.bmp
-rw-r--r-- 1 guest guest 132935 2006-11-04 04:46 vmware-FROG.GIF
-rw-r--r-- 1 guest guest 92316 2006-11-04 04:49 vmware-FROG.JPG
No exemplo de cima, usamos dois snarfers de páginas HTML, que poderão atestar se o seu servidor em Londres está em cima, e consegue transmitir dados a uma taxa aceitável.
gnetinfo é um snarfer de HTML que apresenta mais algumas estatísticas do que os programas habituais, e implementa um compasso de HTTP adequado ao servidor -- por vezes é mais lento, mas ajusta a sua velocidade.
gbhtml/gBHttp.cpp: Pace of server respected (acc.RFC2616, ch.8.2.4)Se quiser medir com rigor o throughput do seu Apache server de uma entidade exterior, acho que é uma boa escolha.
17 junho, 2007
Passwords em Unix/Linux
No início dos tempos do Unix/Linux não havia shadowed passwords. Hoje em dia, qualquer distribuição Linux vem por default com shadowed passwords.
Basicamente significa que o ficheiro que guarda as passwords dos utilizadores, encriptadas (via crypt -- veja man 3 crypt), '/etc/passwd', por definição world-wide-readable, não as contém directamente. Em vez da password encriptada está apenas um caracter, 'x'. O ficheiro que realmente contém as passwords encriptadas é '/etc/shadow{,-}'.
Um exemplo de uma string de uma password guardada: '6Iz.AWMwalbdc'; esta string tem 13 caracteres. Os caracteres têm que pertencer ao conjunto '[a-zA-Z0-9./].' -- letras de A a Z, digitos, o ponto e a barra (dot and slash) -- perfazem uma base de 64. Os dois primeiros caracteres desta sequência de 13 digitos é denominada sal (do inglês, salt). Através desta string esquisita não é humanamente possível obter qual a password que lhe deu origem, sem ser por tentativas. Ainda que haja alguém que consiga, por acidente, ver esta sequência, terá que passar um bom bocado até ter a palavra que lhe deu origem!
Vejamos em detalhe como é o processo de geração desta string, denominada encriptação.
Em todos os sistemas Linux usa-se a função crypt, que gera uma chave assimétrica.
Para dar apenas dois exemplos: RedHat 7.2 usa como sal "$1", o Freesco "pB".
Vejamos um exemplo:
Basicamente significa que o ficheiro que guarda as passwords dos utilizadores, encriptadas (via crypt -- veja man 3 crypt), '/etc/passwd', por definição world-wide-readable, não as contém directamente. Em vez da password encriptada está apenas um caracter, 'x'. O ficheiro que realmente contém as passwords encriptadas é '/etc/shadow{,-}'.
% grep shadow /etc/*Vejamos melhor como as passwords são, de facto, guardadas.
...
/etc/pwdb.conf: unix+shadow
[root@fuji etc]# ls -l -d passwd* shadow*
-rw-r--r-- 1 root root 1944 Jun 17 16:01 passwd
-rw-r--r-- 1 root root 1944 Jun 17 12:35 passwd-
-rw-r--r-- 1 root root 1944 Jun 17 14:09 passwd.OLD
-r-------- 1 root root 1592 Jun 17 14:09 shadow
-r-------- 1 root root 1550 Jun 17 12:35 shadow-
-r-------- 1 root root 1592 Jun 17 13:32 shadow.OLD
% grep . /etc/shadow- | sed 's/^\([^:]*\):\([^:]*\).*/\1 \2/'
Um exemplo de uma string de uma password guardada: '6Iz.AWMwalbdc'; esta string tem 13 caracteres. Os caracteres têm que pertencer ao conjunto '[a-zA-Z0-9./].' -- letras de A a Z, digitos, o ponto e a barra (dot and slash) -- perfazem uma base de 64. Os dois primeiros caracteres desta sequência de 13 digitos é denominada sal (do inglês, salt). Através desta string esquisita não é humanamente possível obter qual a password que lhe deu origem, sem ser por tentativas. Ainda que haja alguém que consiga, por acidente, ver esta sequência, terá que passar um bom bocado até ter a palavra que lhe deu origem!
Vejamos em detalhe como é o processo de geração desta string, denominada encriptação.
Em todos os sistemas Linux usa-se a função crypt, que gera uma chave assimétrica.
- crypt (char* textPassword, char salt[2]) => outputs a 13 character base64 string
Para dar apenas dois exemplos: RedHat 7.2 usa como sal "$1", o Freesco "pB".
Vejamos um exemplo:
sal="6I"; crypt("x",sal) => 6Iz.AWMwalbdc
sal="$1"; crypt("vaca",sal) => $1vyWKSEliITE
16 junho, 2007
mp3infos e mp3checks
A verificação da consistência de ficheiros de áudio comprimidos tem enorme interesse na comunidade de partilha de músicas.
Já o mp3info permite editar tags (ID3 v1 apenas!), ou visualizar a informação contida no mp3.
O menu interactivo é mostrado em baixo (a fonte fixa não ficou muito bem neste blog...).
Comecemos pelo mp3_check (Eric Bullen): foi desenvolvido até 2000, e desde aí o projecto no SourceForge parou a actividade. (Guardei as sources no CVS local em hprog/forge_contrib/mp3check/mp3_check-1.98, sendo que a versão 1.99 contém apenas os ficheiros de compilação e o README.) Consideremos uma música:
Este mp3_check é eventualmente picky no tipo de erro que encontra, mas penso ser bastante rápido e fiável.
Analisemos agora o ID3 v1 (que se situa nos últimos 128 bytes do ficheiro):
- mp3check, by Klaus Kettner (http://jo.ath.cx/soft/mp3check/)
- mp3_check, by Eric Bullen (www.thedeepsky.com/)
- mp3info by Ricardo Cerqueira (http://freshmeat.net/projects/mp3info/), maintained currently by Cedric Tefft
- mp3-info, source grabbed in the net (around 2000) and reworked by Steve (http://www.steve.org.uk/Software/mp3-info/), and me.
mp3infos
Comecemos pelo último: mp3-info é um programa de teste que foi publicado algures na internet, e modificado pelo Steve Kemp: o criador do gnump3d, que permite ver o tempo de um mp3 de forma bastante exacta. É a fonte mais fiável que encontrei até agora para mostrar a duração das músicas!Já o mp3info permite editar tags (ID3 v1 apenas!), ou visualizar a informação contida no mp3.
mp3info -x -r a ~/public_html/mp3/COPY/jam.mp3 -p "%0.3r\n"O comando em cima mostra a bit-rate média (com 3 casas decimais, similar ao printf com argumento "%0.3f"), enquanto o de baixo mostra toda a informação do arquivo. Neste caso o primeiro tem bit-rate fixa (192 Kb/s), enquanto o segundo é variável
mp3info -x jam-fixedrate.mp3 jam.mp3
jam-fixedrate.mp3 does not have an ID3 1.x tag.
File: jam-fixedrate.mp3
Media Type: MPEG 1.0 Layer III
Audio: 192 KB/s, 44KHz (dual channel)
Emphasis: none
CRC: No
Copyright: No
Original: No
Padding: Yes
Length: 0:02
jam.mp3 does not have an ID3 1.x tag.
File: jam.mp3
Media Type: MPEG 1.0 Layer III
Audio: Variable KB/s, 44KHz (stereo)
Emphasis: none
CRC: No
Copyright: No
Original: No
Padding: No
Length: 0:03
O menu interactivo é mostrado em baixo (a fonte fixa não ficou muito bem neste blog...).
MP3Info 0.8.5a
┌──────────────────────────────────────────────────────────────────────────────────────────────┐
│Song Title: │
│Artist Name: │
│Album Name: │
│Year: │
│Comment: │
│Track: │
│Genre: │
└─── (1/1) /home/henrique/public_html/mp3/COPY/jam.mp3 ─────────────────── Press ^C to quit ───┘
┌──────────────────────────────────────────────────────────────────────────────────────────────┐
│Song Title: │
│Artist Name: │
│Album Name: │
│Year: │
│Comment: │
│Track: │
│Genre: │
└─── (1/1) /home/henrique/public_html/mp3/COPY/jam.mp3 ─────────────────── Press ^C to quit ───┘
mp3info Kylie_-_hit.mp3
File: Kylie_-_hit.mp3
Title: Can't Get You Out Of My Head Track: 3
Artist: Kylie Minogue
Album: Fever Year: 2001
Comment: Genre: [255]
mp3checks
Os mp3checks por seu lado verificam a consitência do conteúdo guardado num ficheiro de áudio, geralmente aplicável aos mp3s. Outros formatos podem ter verificadores de consistência (WMx, x=A(udio)/V, etc), mas geralmente são pagos. A vantagem óbvia do formato mp3 é ter milhares de programas freeware que os manipulam.Comecemos pelo mp3_check (Eric Bullen): foi desenvolvido até 2000, e desde aí o projecto no SourceForge parou a actividade. (Guardei as sources no CVS local em hprog/forge_contrib/mp3check/mp3_check-1.98, sendo que a versão 1.99 contém apenas os ficheiros de compilação e o README.) Consideremos uma música:
mp3_check Doors,\ The\ -\ Riders\ on\ the\ storm.mp3Esta música foi guardada com uma bit-rate de 128 KB/s (relativamente baixa), tem 6.6 Mb, 7:11 (sete minutos, mais precisamente 07:10.99), e foi analisada usando apenas 0.39s do processador (Intel Mendocino, 300MHz); num processador mais rápido (AMD Athlon 64 Processor 3500+, 2500 MHz) usou apenas 0.03s!
Possible ID3v2 frame found, skipping
FILE_NAME Doors, The - Riders on the storm.mp3
GOOD_FRAMES 16499
BAD_FRAMES 0
LAST_BYTE_CHECKED 6897956
SONG_LENGTH 07:10.99
USER_TIME 0.39s
SYS_TIME 0.65s
Este mp3_check é eventualmente picky no tipo de erro que encontra, mas penso ser bastante rápido e fiável.
Analisemos agora o ID3 v1 (que se situa nos últimos 128 bytes do ficheiro):
dd bs=1 skip=6897664 <> /tmp/repFinalmente, a fonte mais recente de análise de mp3, não estou certo que a melhor, mas pelo menos a com mais features: o mp3check.
128+0 records in
128+0 records out
[henrique@fuji mp3copy12]$ dd bs=1 skip=6897664 <> /tmp/rep
128+0 records in
128+0 records out
[henrique@fuji mp3copy12]$ strings !$
strings /tmp/rep
TAGRiders on the storm
The Doors
Greatest Hits
[henrique@fuji mp3copy12]$ yshowtext -f !$
yshowtext -f /tmp/rep
TAGRiders on the storm[00][00][00][00][00][00][00][00][00][00][00]The Doors[00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]Greatest Hits[00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][05][0C]
mp3check -e Doors,\ The\ -\ Riders\ on\ the\ storm.mp3Enjoy!
Doors, The - Riders on the storm.mp3:
2048 bytes of junk before first frame header
valid id3 tag trailer v1.1 found
frame 16499/ 7:10: file truncated, 292 bytes missing for last frame
09 junho, 2007
gsinlistd publicado
Irei publicar o gsinlistd como LGPL (Lesser GNU GPL), sendo que irei ter um pedaço de código protegido -- a parte que implementa a comunicação encriptada (blow-stream).
A primeira versão pública será v0.4.
A primeira versão pública será v0.4.
