Pular para o conteúdo

Shell Script nosso de cada dia - Episódio 4

Dica publicada em Shell Script / Avançado
Wagner Souza wagnerfs
Hits: 4.520 Categoria: Shell Script Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar

Shell Script nosso de cada dia - Episódio 4

Retomando nossas atividades...

Um sysadmin precisa descobrir quais máquinas em sua rede possuem o sistema operacional Windows ou Linux. Esta tarefa deve ser feita com um script em shell.

Solução

Um script simples pode ser criado utilizando o ping e obtendo a resposta do TTL, que nada mais é que o tempo de vida de um pacote. O Windows possui um TTL de 128, enquanto máquinas com os sistemas operacionais Linux e Unix possuem um de 64. Sendo assim, segue o script.

#!/bin/bash

IPs="192.168.0.104 192.168.0.101"
j=0


for i in $IPs;
do

testIP=$(ping -c1 $i | grep -i ttl= | cut -d' ' -f6 | sed 's/.*ttl=//')

if [ $testIP -eq 128 ]
then 
	echo "Maquina windows"
		else 
			echo "Maquina linux"
fi

done

Acrescente a quantidade de IPs que achar conveniente ao array. Uma dica que sempre dou é melhorar o script e compartilhar o conhecimento.

Essa foi mais uma dica de Shell Script. Até a próxima!

Exercício Prático LPIC 10

Shell Script nosso de cada - Episódio 2

Configurando script de inicialização no openSUSE

Navegação anônima

Trabalhando com datas no LibreOffice

Utilizando arrays em shell script

Políticas personalizadas do SELinux

Fazendo backup ou cópia somente dos arquivos alterados no último dia

Exibir arquivo de grupos /etc/group de forma personalizada conforme o usuário

Testando se o servidor está no ar, caso não esteja, a máquina é desligada

#1 Comentário enviado por juniorze em 19/04/2018 - 13:55h
Sei que já estamos a quase 2 anos depois...
Mas dei uma melhorada para array's
e se o destino não for encontrado, pq assim o resultado é:
./Ping.sh: linha 9: [: -eq: esperava operador unário
Maquina linux

Segue nova versão:

#!/bin/bash
clear
IPs=("172.16.18.16" "172.16.18.204" "172.16.18.253")

for i in ${IPs[@]};
do
testIP=$(ping -c1 $i | grep -i ttl= | cut -d' ' -f6 | sed 's/.*ttl=//')
if [ $testIP -eq 128 ] 2>>/dev/null
then
echo "Maquina windows"
elif [ $testIP -eq 64 ] 2>>/dev/null
then
echo "Maquina linux"
else
echo "Destino Não Encontrado"
fi
done

Contribuir com comentário

Entre na sua conta para comentar.