Conversión entre IP y decimal con Bash

Obtener la lista de direcciones entre 10.20.30.40 y 10.20.30.250 no es tan complicado, pero obtener la lista entre la 10.20.30.40 y la 11.25.60.250, se vuelve algo complejo, considerando ambas direcciones IP como variables arbitrarias.

Un método puede ser convertir la IP de bytes (octetos) a decimal puro y recorrer con un «for» los decimales y convertir nuevamente al final.


function ip2dec {
	echo $(( $1*256*256*256 + $2*256*256 + $3*256 + $4 ))
}

function dec2ip {
	O4=$(( $1 % 256 ))
	O3=$(( ($1/256) % 256 ))
	O2=$(( ($1/(256*256)) % 256 ))
	O1=$(( ($1/(256*256*256)) % 256 ))
	echo $O1.$O2.$O3.$O4
}

IP_START=10.20.30.40
IP_END=10.25.60.250

# Separar los octetos en START_OCTET[1..4] y END_OCTET[1..4]
IFS=. read START_OCTET[1] START_OCTET[2] START_OCTET[3] START_OCTET[4] < <( echo "$IP_START" )
IFS=. read END_OCTET[1] END_OCTET[2] END_OCTET[3] END_OCTET[4] < <( echo "$IP_END" )

# Recorrer los decimales, convirtiendo los resultados a IP.
for (( IP = `ip2dec ${START_OCTET[1]} ${START_OCTET[2]} ${START_OCTET[3]} ${START_OCTET[4]}`; \
	IP <= `ip2dec ${END_OCTET[1]} ${END_OCTET[2]} ${END_OCTET[3]} ${END_OCTET[4]}`; \
	IP++ )); do

	echo `dec2ip $IP`
done

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *