segunda-feira, 3 de setembro de 2012

Aplicando OU, E e NÃO no comando grep

Em um ambiente Linux, é muito comum usarmos o comando grep para busca de palavras em arquivos de texto. O grep realiza a pesquisa linha a linha em busca de uma ou mais palavras informadas pelo usuário. A linha que conter a palavra, é retornada na saída padrão.

Combinando comandos e algumas opções do comando grep, podemos aplicar os conceitos dos operadores lógicos OU, E e NÃO em uma linha de comando. O grep possui opções que simulam os operadores OU e NÃO, o operador E pode ser simulado com o uso de canalização.


OU

A opção -e do comando grep pode ser usada para especificar múltiplas palavras-chave em uma mesma linha de comando. Como retorno, o grep exibe as linhas que contiverem uma ou mais palavras especificadas. É o efeito do operador lógico OU não exclusivo;

grep -e palavra1 -e palavra2 -e palavra3 arquivo.txt


E

O comando grep não possui opção que simule a operação E, porém podemos simular usando uma canalização. Para isto, realizamos a busca informando somente a primeira palavra e canalizando a saída para uma nova busca com a segunda palavra, assim sucessivamente. O retorno final serão as linhas que contiverem todas as palavras especificadas:

grep palavra1 arquivo.txt | grep palavra2 | grep palavra3


NÃO

A opção -v do comando grep pode ser usada para inverter o sentido da busca, serão retornadas as linhas que não contiverem a palavra especificada. É o efeito do operador lógico de negação:

grep -v palavra arquivo.txt


Podemos combinar os operadores lógicos para atuarem em uma mesma expressão de busca. A seguir algumas das combinações e suas respectivas descrições lógicas dos comandos de exemplo:


OU com NÃO

grep -v -e palavra1 -e palavra2 arquivo.txt

(busca por linhas que não contenham a palavra1 ou palavra2)


E com NÃO

grep palavra1 arquivo.txt | grep palavra2 | grep -v palavra3

(busca por linhas que contenham a palavra1 e palavra2 mas não contenham a palavra3)


E com OU

grep palavra1 arquivo.txt | grep -e palavra2 -e palavra3

(busca por linhas que contenham a palavra1 e a palavra2 ou palavra3)


Claro que existem as expressões regulares para gerar um padrão de busca, com o caractere | como operador OU etc. Entretanto não há, por exemplo, uma operação E eficiente sem usar o operador OU em conjunto. Creio que estas simples aplicações de comandos grep com canalizações e algumas opções possui um entendimento mais fácil. Se desejar, saiba mais sobre expressões regulares com o grep em http://dan-scientia.blogspot.com.br/2012/07/expressoes-regulares-com-o-grep_22.html

quarta-feira, 29 de agosto de 2012

Aplicativos Google para sistema Android

O Android (http://www.android.com/) é um sistema operacional completo com base no kernel Linux, para dispositivos móveis incluindo celulares e tablets. Este sistema ganhou força quando o Google comprou a empresa recém-criada Android Inc no ano de 2005, pois estava interessado em desenvolver uma plataforma para telefonia móvel. Atualmente, o Android é desenvolvido por uma aliança de dezenas de empresas, denominada Open Handset Alliance (http://www.openhandsetalliance.com), que inclui importantes empresas de telefonia, software e hardware, mas principalmente o Google.

O Google, famoso por seu mecanismo de busca, é uma grande empresa de produção de software, especialmente softwares para computação em nuvem. Além de softwares para a plataforma PC, existe também a linha de aplicativos para telefones móveis. Seus melhores aplicativos do Google Celular (http://www.google.com/mobile/) também estão disponíveis para telefones que usam o sistema operacional Android (http://www.google.com/mobile/android/).

Os telefones equipados com Android costumam vir com boa parte dos aplicativos do Google pré-instalados. Os aplicativos ausentes podem ser instalados pela loja online Google Play (https://play.google.com/store), que fornece os aplicativos do Google e também aplicativos de outras empresas. Muitos são gratuitos.

A seguir uma lista dos melhores aplicativos do Google para Android:

Google Search
O famoso mecanismo de busca para pesquisa no Google e nos contatos e aplicativos do telefone.

Google Goggles
Pesquisa na web usando uma fotografia tirada pelo celular, com a fotoleitura da imagem em análise das cores, contornos e texturas.

Google Earth
Explore o mundo em um globo virtual com imagens, mapas e terrenos via satélite.

Google Maps
Visualização dos mapas de todas as cidades do mundo, com localização por GPS e informações sobre o trânsito.

Google Maps Navigation
Sistema de navegação GPS conectado à Internet e guiado por voz.

Google Latitude
Permite ver a localização atual dos amigos em um mapa e compartilhar sua localização.

Os Meus Percursos (Minhas Trilhas)
Aplicativo que registra no mapa o caminho percorrido, além da velocidade, distância e altitude enquanto anda à pé, de bicicleta ou veículo.

Google SkyMap
Mapa da esfera celeste sincronizado com sua localização no globo terrestre.

Gmail
O cliente de e-mail para contas do Google Mail.

YouTube
Acesso ao imenso repositório de vídeos compartilhados por pessoas de todo o mundo.

Google Talk
Para bater papo na web por voz, vídeo e enviar mensagens instantâneas.

Blogger
Interface para acessar e publicar postagens em blogs.

Google+
Compartilhamento de conteúdos múltiplos entre pessoas na web.

Google Drive
Inclui o Google Docs, a suíte office on-line da Google, e mais armazenamento e compartilhamento de arquivos.

Orkut
Interface de acesso a rede de relacionamento.

Google Buzz
Informa o que está acontecendo na sua região.

Google Tradutor
Tradução online entre idiomas.

Google Currents
Leitor de publicações no formato de revista, com páginas que podem ser viradas com um "swipe".

Google Reader
Leitor de feed de notícias e blogs.


Como visto, são muitos os aplicativos. Alguns deles oferecem uma verdadeira inovação tecnológica, aproveitando dos recursos de hardware existentes nos aparelhos modernos, como GPS e bússola.

Assim por exemplo, o Google Maps com sua funcionalidade de "Street View", a qual permite explorar lugares através de imagens panorâmicas em 360 graus no nível da rua, faz com que o celular exiba a visão da rua de acordo com a direção que está apontando. O mesmo acontece com o SkyMap, que exibe a visão do céu também de acordo com a direção que está apontando.

E igualmente incrível é o Google Goggles, capaz de identificar por exemplo uma pintura, um desenho ou um logotipo e retornar os sites que contenham informações a respeito. Goggle é algo mesmo fantástico.

quarta-feira, 15 de agosto de 2012

Problema de Lógica: Reunião familiar

As seguintes pessoas estavam presentes em uma reunião de família: um avô, uma avó, dois pais, duas mães, quatro filhos, três netos, duas irmãs, um irmão, duas filhas, dois filhos, um sogro, uma sogra e uma nora. Qual é o número de pessoas que devem ter ido à reunião e quem eram essas pessoas?





RESPOSTA





Sete pessoas foram à reunião, são elas:

 avô avó
  |___|
    |
   pai   mãe
    |_____|
      /|\
     / | \
    /  |  \
 filha | filho
     filha

domingo, 12 de agosto de 2012

Aquisição de dados através da rede

Na computação forense, a aquisição de dados é a cópia dos dados armazenados em um dispositivo que está sendo examinado. Esta cópia pode ser física, onde se realiza uma clonagem fiel de toda a unidade de armazenamento, gerando um arquivo imagem, ou pode ser lógica, onde se realiza a cópia arquivo por arquivo de toda a unidade de armazenamento.

Sempre, a cópia é realizada à uma outra unidade de armazenamento para que o examinador possa trabalhar sem prejudicar a evidência. Esta conduta serve para garantir o conteúdo da prova.

Em situações adversas, o examinador poderá encontrar uma máquina onde não se é possível retirar o disco rígido, seja por razões judiciais ou pela tecnologia aplicada no hardware, por exemplo, a tecnologia RAID. Nestes casos, será necessário iniciar esta máquina com algum sistema forense e assim realizar a aquisição dos dados para uma unidade de armazenamento externa. A distribuição DEFT Linux LiveCD (http://www.deftlinux.net/) pode ser usada para isso.

Se o examinador possui um dispositivo de armazenamento externo, poderá copiar os dados pela própria máquina suspeita. Se possui um computador portátil, poderá estabelecer uma rede entre as máquinas e realizar a aquisição pela rede. É neste segundo cenário que este artigo se aplica, em uma rede cabeada, para uma cópia física de todo o dispositivo. Será utilizado o DEFT Linux na máquina suspeita e um notebook com a distro Fedora. Conecte um cabo crossover entre as placas de rede.

Primeiramente vamos preparar o terreno, configurando a rede com IP estático no Fedora e no DEFT. Digamos que o Fedora, que está no computador portátil do examinador, esteja usando o NetworkManager para gerenciar a rede. Vamos desativá-lo para usar neste processo de coleta o serviço de rede tradicional do Linux.

Execute o script do NetworkManager com o parâmetro "stop":

# /etc/init.d/NetworkManager stop

Em seguida edite o arquivo de configuração do dispositivo de rede:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Usando este conteúdo na configuração (adapte se necessário):

DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

Inicie o serviço de rede:

# /etc/init.d/network start

O comando 'ifconfig' nos mostra se a rede está ativa corretamente. No exemplo a interface "eth0". Ainda no Fedora, é necessário liberar uma porta no firewall. Edite o arquivo de configuração do iptables, adicionando a linha para a porta 2222 e reinicie o serviço iptables:

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

# /etc/init.d/iptables restart

Com o DEFT operando na máquina suspeita, precisa-se também configurar uma rede com IP estático. O DEFT Linux é compatível com a distro Debian, possui uma ligeira diferença na configuração em relação ao Fedora. Edite o arquivo de configuração da interface de rede, usando o conteúdo abaixo e reinicie o serviço de rede:

# vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.11
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

# /etc/init.d/networking restart

Mais uma vez, o comando 'ifconfig' nos mostra se a rede está ativa corretamente. Os endereços IPs escolhidos nas duas configurações serão usados nos exemplos dos comandos de aquisição. A máquina com Fedora recebeu o IP 192.168.1.10 e a máquina suspeita, rodando o com DEFT, recebeu o IP 192.168.1.11.

Existem duas ferramentas para estabelecer uma conexão de rede e assim transferir dados: nc e ssh.

A ferramenta 'nc' (netcat) é capaz de abrir uma conexão TCP, enviar pacotes UDP e ouvir em uma porta arbitrária. Esta ferramenta será executada nos dois computadores que irão "conversar" pela rede.

Sinopse:

nc [opção]... [endereço] [porta]

Primeiramente, executa-se o 'nc' na máquina que vai receber, no nosso caso, no Fedora. Escolha uma das linhas de comandos abaixo, de acordo com a ferramenta "diskdump" de sua preferência:

$ nc -l 2222 | bunzip2 | dd of=Tempo/sda.dd
$ nc -l 2222 | bunzip2 | dc3dd of=Tempo/sda.dd
$ nc -l 2222 | bunzip2 | dcfldd of=Tempo/sda.dd

A opção -l define que o 'nc' vai ficar "ouvindo" pela porta 2222.

Depois, executar o 'nc' na máquina que vai enviar, no nosso caso, no DEFT. Use a respectiva linha de comando de acordo com a ferramenta "diskdump" usada acima:

# dd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222
# dc3dd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222
# dcfldd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222

O comando 'nc' vai enviar o fluxo de dados para o endereço e porta especificado.


Outro procedimento é utilizar a ferramenta 'ssh', para enviar o fluxo de dados à um arquivo em uma máquina remota. Considerando que o servidor sshd esteja em execução no computador portátil, com o Fedora, execute na máquina suspeita, com o DEFT, o comando para enviar o arquivo imagem. Escolha uma das linhas de comandos:

# dd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2
# dc3dd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2
# dcfldd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2

Neste procedimento não é necessário executar qualquer comando na máquina que vai receber os dados, no nosso caso o notebook com Fedora, apenas o servidor sshd deve estar ativo e utilize uma conta de usuário do sistema Fedora. Será solicitada a senha deste usuário.


Como visto, é relativamente simples a aquisição de dados pela rede. Muitas vezes até compensa em relação a desmontar a máquina suspeita para a retirada do disco rígido. Os computadores portáteis costumam dar trabalho desta desmontagem. O único inconveniente pode ser a velocidade de transmissão, de acordo com a tecnologia da rede, pois uma rede de 100 Mbits a velocidade máxima teórica é 12,5 MB/s.

Curingas nas operações com arquivos e diretórios no Linux

Curingas são caracteres especiais, ou metacaracteres, usados para especificar, em uma única linha de comando, um conjunto de arquivos ou diretórios de uma única vez. Com o uso dos curingas, o interpretador de comandos realiza a expansão para todos os caracteres possíveis, montando todas as combinações para os nomes dos arquivos ou diretórios.

Existem os seguintes tipos de curingas no Linux:

*          equivale a um conjunto de zero ou mais caracteres

?          equivale a um único caractere

[padrão]
  [ ]      equivale a qualquer um dos caracteres especificados
           dentro dos colchetes
  [^]      equivale a qualquer outro caractere menos os caracteres
           especificados
  [-]      equivale a qualquer um dos caracteres da lista

{padrões}
  {,}      equivale a qualquer padrão da lista


Exemplos:

arq*.txt           (todos iniciados com arq)

arq?.txt           (todos iniciados com arq + 1 caractere)

arq[134].txt       (arq1.txt, arq3.txt, arq4.txt)

arq[13][24].txt    (arq12.txt, arq14.txt, arq32.txt, arq34.txt)

arq[^25].txt       (exclui arq2*.txt e arq5*.txt)

arq[1-3].txt       (arq1.txt, arq2.txt, arq3.txt)

arq{[1-3],6}.txt   (arq1.txt, arq2.txt, arq3.txt, arq6.txt)

arq.{doc,xls,txt}  (arq.doc, arq.xls, arq.txt)


O curinga é um recurso que permite a filtragem do que será manipulado pela linha de comando. E como visto em alguns exemplos, os tipos de curingas podem ser usados em conjunto.

As chaves {} possuem um recurso a mais, a geração de caracteres para ser usada na criação de arquivos ou diretórios. Por exemplo, o comando "mkdir aula{1,2,3}" cria os diretórios aula1, aula2 e aula3 de uma só vez.

Os curingas dão vantagem a interface em modo texto quando na seleção de muitos arquivos ou diretórios, pois este procedimento em uma interface gráfica pode ser cansativo.

sexta-feira, 27 de julho de 2012

Conhecendo o desempenho de uma câmera digital com o Flickr

O Flickr é um site de hospedagem e compartilhamento de fotografias digitais. É semelhante a uma rede social, onde os usuários podem criar álbuns para organizar, armazenar as fotos e assim publicá-las na Web. O Flickr serve também como um fotolog.

Atualmente, existem mais de cinco bilhões de fotos armazenadas no Flickr, tiradas por fotógrafos domésticos, amadores e até profissionais, de toda parte do mundo. Toda esta base de dados possibilitou ao Flickr um nível de organização e estatística muito interessante, sobre os equipamentos fotográficos geradores das imagens.

Os arquivos de imagem, criados pela maioria das câmeras digitais, possuem incorporados à eles um conjunto de informações técnicas sobre a captura da imagem, na forma de metadados etiquetados. Estas informações seguem o padrão EXIF e são semelhantes as etiquetas ID3 dos arquivos no formato MP3.

Das informações armazenadas sob o padrão EXIF, e isto incluem-se resolução, abertura, tempo de exposição, objetiva, filtros etc. pode-se obter a marca e o modelo da câmera digital. O Flickr, obtendo toda esta informação, criou uma página em seu site para organizar e classificar, pelo equipamento, todo o acervo de fotos. Desta forma torna-se possível encontrar fotos (e vídeos) feitas de uma marca e modelo específico de câmera digital.

No site do Flickr, pelo "Localizador de câmeras" (http://www.flickr.com/cameras) temos uma lista de todas as marcas que possuem fotos armazenadas, além de um gráfico com as câmeras mais populares na comunidade do Flickr. Indo pelas marcas podemos especificar um modelo e então explorar o conteúdo do modelo determinado. As fotos ainda estão agrupadas em algumas situações como retrato, macro, noturna, paisagem e ação.

Se precisar conhecer o desempenho e a qualidade fotográfica de alguma câmera digital, basta localizar suas respectivas fotos para realizar uma avaliação. O Flickr tornou-se então um imenso mostruário das imagens geradas pelas câmeras digitais, de dezenas de marcas e centenas e mais centenas de modelos. É realmente impressionante, vale conferir.

quinta-feira, 26 de julho de 2012

Problema de Lógica: Quantas pessoas há?

Há duas pessoas na frente de uma pessoa, duas pessoas atrás de uma pessoa e uma pessoa no meio. Quantas pessoas há?





RESPOSTA





Há três pessoas. Imagine as três pessoas em fila, assim duas pessoas estão na frente da terceira, duas pessoas estão atrás da primeira e a segunda está no meio entre a primeira e a terceira pessoa.