Bash One Liners #4

Em: 01/07/2008 Tags: tail, w3m, awk, Bash Comentários (0) Referencie do seu blog (Trackback)

Este é trivial: com w3m e tail podemos descobrir nosso número IP. O one liner é o seguinte:

w3m -dump http://www.ip-adress.com/ | tail -1

O ip-address.com, como o nome indica, é um site que indica qual o número IP que você está utilizando. É a partir do conteúdo da página inicial desse site que vamos chegar ao nosso one liner.

Com a opção -dump do w3m indicamos que queremos que a página seja impressa na saída padrão, sem tags HTML, de uma forma que uma pessoa ache agradável de ler. Essa saída é sempre a mesma, com exceção da última linha, que indica (ta-dá!) seu IP:

Counter

my ip address IP-a[S:d:S]dress.com - What is my IP address?
An IP address (Internet Protocol Address) is a logical address of a
network adapter. The IP address is unique and identifies computers on a
network. An IP address can be private, for use on a LAN, or public, for
use on the Internet or other WAN.
Too many bots are spidering our site. Therefore this small frontpage
version. IP address Tracer / Locator

My IP address:
200.32.10.11

Como o dado que queremos está exatamente (e sempre) na última linha da saída, não ficou muito difícil escolher qual programa vai extrai-la: o tail. Com a opção -1 pegamos exatamente a última linha, finalizando nosso one liner.

Como tenho usado esse site constantemente achei útil criar um atalho myip para o meu usuário. Basta adicionar em ~/.bashrc a linha:

alias myip='w3m -dump http://www.ip-adress.com/ | tail -1'

Depois recarregue a configuração:

source ~/.bashrc

Atualização (2/7/2008): Hoje o one liner já deixou de funcionar, pois a estrutura do site se modificou. Agora a linha que imprime o IP não é mais a última, mas sim uma no meio do documento. Talvez o w3m simplesmente não tenha carregado a página completamente ontem, quando escrevi o artigo, e por isso havia sido tão fácil. Agora seria necessário utilizar o awk para chegar até a linha que diz “My IP Adress:”, em seguida pular para a próxima linha, e então imprimi-la e sair do programa. O novo one liner é, portanto, menos simples, mas ainda trivial:

w3m -dump http://www.ip-adress.com/ | awk '/My IP address/ { getline; print $1; exit }'

Não garanto que esse one liner vai continuar funcionando, afinal eu não mantenho esse site. Ao menos a modificação rendeu mais um one liner…