Comando de terminal para devolver la clase de red

1

Estoy tratando de construirme un escáner de red primitivo, y entiendo que hay varias clases de red y es necesario que mi programa determine exactamente a qué clase de red está conectada actualmente la estación de trabajo.

He probado varias opciones que considero innecesariamente complicadas, como truncar varios comandos como ifconfig , sin embargo, estos métodos son arduos y desordenados.

¿Hay un solo comando de Terminal que pueda devolver una salida simple como 10.0.0.0 , identificando así la clase de red?

    
pregunta user4493605 18.11.2015 - 09:03

3 respuestas

2

Puedes probar algo como esto:

#!/bin/bash                                                                                                                                   

IPS=$(ifconfig -a | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed 's/127.0.0.1//')

FIRST=$(echo "${IPS%%.*}")

case 1 in
$(($FIRST <= 127))) echo Class A ;;
$(($FIRST <= 191))) echo Class B ;;
$(($FIRST <= 223))) echo Class C ;;
$(($FIRST <= 239))) echo Class D ;;
$(($FIRST <= 255))) echo Class E ;;
*) echo Something wrong! ;;
esac

Si solo desea la IP, haga eco de la variable $IPS .

    
respondido por el Mateusz Szlosek 18.11.2015 - 10:16
2

Con CIDR (Classless Inter Domain Routing) el concepto de clase anterior se ha ido. En su lugar, crea sus redes configurando la máscara de subred adecuada y su enrutamiento. Tanto para la historia. :-)

Como mi Yosemite produce máscaras de red en ifconfig en hexadecimal, escribí un script de shell que analiza toda la salida de ifconfig y calcula la red a partir de ella. Tal vez usted podría modificar eso a sus necesidades. Una salida de muestra sería:

IP adress:      127.0.0.1 Netmask:      255.0.0.0 Network:      127.0.0.0
IP adress:   172.20.41.52 Netmask:  255.255.255.0 Network:    172.20.41.0
IP adress:    172.16.47.1 Netmask:  255.255.255.0 Network:    172.16.47.0
IP adress:   192.168.97.1 Netmask:  255.255.255.0 Network:   192.168.97.0


Aquí está el script; omite las direcciones inet6 de ifconfig y se relaciona solo con IPv4:

#!/bin/sh

IP="'ifconfig -a | fgrep 'inet ' | sed -e 's/^.*netmask:\(.*\)$//g' -e 's/^.*inet\ \([^\ ]*\)\ .*$//''"

convert_hex_netmask_to_dec () {
    nh=$1
    nd=$(($nh % 0x100))
    for i in 1 2 3
    do
        ((nh = nh / 0x100))
        nd="$((nh % 0x100)).$nd"
    done
    echo $nd
    # See more at: http://compgroups.net/comp.unix.shell/convert-hex-to-decimal/497395#sthash.ShzT161v.dpuf
    }

for ipadress in ${IP}
do
    netmaskhex="'ifconfig -a | fgrep 'inet ' | grep ${ipadress} | awk '{print $4}''"
    netmaskdec="'convert_hex_netmask_to_dec ${netmaskhex}'"
    IFS=. read -r i1 i2 i3 i4 <<< "${ipadress}"
    IFS=. read -r m1 m2 m3 m4 <<< "${netmaskdec}"
    NET="'printf \"%d.%d.%d.%d\n\" \"$((i1 & m1))\" \"$(($i2 & m2))\" \"$((i3 & m3))\" \"$((i4 & m4))\"'"

    printf "IP adress:%15s Netmask:%15s Network:%15s\n" ${ipadress} ${netmaskdec} ${NET}
done


Si solo desea el primer octeto de la red, simplemente deshabilite el printf final y sustitúyalo por

printf "%d\n" "$((i1 & m1))"
    
respondido por el Garex 18.11.2015 - 14:16
2

Por favor, reconsidere y reformule su pregunta.

Estás mezclando espacios de direcciones IPv4 privadas y clases clásicas (que están en desuso o al menos son "anticuadas" desde 1993) y no considera < a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing"> redes sin clase .

En el concepto anticuado de classful networks , los bits iniciales 0 (Clase A), 10 (Clase B), 110 (Clase C), 1110 (Clase D) o 1111 (Clase E) ) se obtiene al emitir un comando correcto ifconfig o ipconfig completamente para determinar la clase.

Así que todas las direcciones IP que comienzan con

  • 0 - 127 pertenecen a la Clase A
  • 128 - 191 pertenecen a la Clase B
  • 192 - 223 pertenecen a la Clase C
  • 224 - 239 pertenecen a la Clase D
  • 240 - 255 pertenecen a la Clase E

No puedo agregar esto como un comentario porque es demasiado largo.

    
respondido por el klanomath 18.11.2015 - 09:47

Lea otras preguntas en las etiquetas