Publicada por renatobarbalho em 11/05/2007 - 11:13h:
* renatobarbalho usa Kurumin

Eu preciso de um "programinha" em shell q faça o seguinte...receba um numero ip como paramentro e sua mascara :
./lista_ips 192.168.1.0/25

A partir dai ele imprima o total de endereços que serão possíveis nesta sub-rede. Não é necessário listá-los. Apenas imprimir o total de endereços, o endereço de rede e o endereço de broadcast dessa rede:

./lista_ips 192.168.1.0/25

Endereço de rede:192.168.1.0
Endereço de broadcast:255.255.255.128

a mascara pode ser passada de 3 formas diferentes no parametro:

192.168.1.0 - assume-se máscara padrão 255.255.255.0
192.168.1.0/26 - Notação CIDR para endereço de rede
192.168.1.0/255.255.255.0

Eu consegui fazer..passando só o ip e ele mostrando todos os ips validos daquela rede..mas sem tratar a questão da mascara.

Desde já..agradeço se alguem me ajudar :P






  
 
Resposta de osteinjr em 11/05/2007 - 13:01h:
* osteinjr usa Slackware
* osteinjr tem conceito: nenhum voto.
 


Você precisa um subnet calculator.
http://linux.softpedia.com/progDownload/Subnet-Mask-Calculator-Download-5396.html


 
Resposta de diaspcf em 11/05/2007 - 13:55h:
* diaspcf usa Fedora
* diaspcf tem conceito: nenhum voto.
 


Vê se é isso que vc quer?

#!/bin/bash

function dec2bin() { echo "obase=2;$1" | bc -l }

function bin2dec() { echo "$((2#$1))" }

addr=`echo $1 | cut -d "/" -f 1`
mask=`echo $1 | cut -d "/" -f 2`
mask_BIN=$(echo 1|sed "/^1\{$mask\}$/bb;:a s/^1\{1,$(($mask-1))\}$/&1/;ta;:b;s/^[01]\{1,31\}$/&0/;tb;s/[01]\{8\}/&./g;s/\.$//")

for i in 1 2 3 4; do
eval ip$i=$(dec2bin $(echo $addr | cut -d'.' -f $i) | sed ':a;s/^[01]\{1,7\}$/0&/;ta')
eval nm$i=$(echo $mask_BIN | cut -d'.' -f $i)
done

echo "Entrada : "$addr"/"$mask
echo "End.IP(2) : "$ip1"."$ip2"."$ip3"."$ip4
echo "Mascara(2) : "$mask_BIN

nm_d="${nm1//0}${nm2//0}${nm3//0}${nm4//0}"
echo "End. IP : $addr"
echo "Mascara : $((2#$nm1)).$((2#$nm2)).$((2#$nm3)).$((2#$nm4)) = ${#nm_d}"
net=$((((2#$ip1$ip2$ip3$ip4)) & ((2#$nm1$nm2$nm3$nm4))))
i=$(echo $nm1$nm2$nm3$nm4 | sed 's/1/2/g;s/0/1/g' | sed 's/2/0/g')
bcast=$(($net | ((2#$i))))
addr=""; for i in 1 2 3 4; do ip1=$((net & 255)) net=$((net >> 8))
addr="${ip1}.$addr"; done; echo "Rede : ${addr%.} / ${#nm_d}"
addr=""; for i in 1 2 3 4; do ip1=$((bcast & 255)) bcast=$((bcast >> 8))
addr="${ip1}.$addr"; done; echo "Broadcast : ${addr%.}"


  


ATENÇÃO: Antes de contribuir com uma resposta, leia o artigo Qualidade de respostas e certifique-se de que esteja realmente contribuindo com a comunidade. Muitas vezes o ímpeto de contribuir nos leva a atrapalhar ao invés de ajudar.

Contribuir com resposta



CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
* Nota: só é possível enviar respostas usuário que possui conta e esteja logado com ela, caso contrário sua mensagem será perdida.



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts