1 votos

El comando de Terminal para volver de clase de red

Estoy intentando construir mi mismo una primitiva escáner de red, y entiendo que hay varias clases de red y se ha convertido en algo necesario para mi programa para determinar exactamente qué clase de red de la estación a la que está conectado actualmente.

He probado un par de opciones que me parece ser innecesariamente complicados, tales como truncar varios comandos como ifconfig, sin embargo estos métodos son arduo y complicado.

Hay una Terminal de comandos que puede devolver simple de salida, tales como 10.0.0.0, con lo que la identificación de la clase de la red?

2voto

klanomath Puntos 19587

Por favor reconsidere y reformular su pregunta.

Se están mezclando dirección IPv4 privada de los espacios y de la clase de redes (que están en desuso o, al menos, "a la antigua" desde 1993) y usted no se considera la clase de redes.

En el anticuado concepto de clase de las redes de los principales bits 0 (Clase a), 10 (Clase B), 110 (Clase C), 1110 (Clase D) o 1111 (Clase E), se obtiene por issueing una adecuada ifconfig o ipconfig comando completamente a determinar la clase.

Así que todas las direcciones IP de partida 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 largo.

2voto

hjdm Puntos 18

Usted puede intentar 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 sólo desea la IP, el eco de la $IPS variable.

2voto

Garex Puntos 339

Con CIDR (Classless Inter Domain Routing) el viejo concepto de clase se ha ido. En lugar de crear sus redes a través de la configuración de la máscara de subred adecuada y su enrutamiento. Tanto para la historia. :-)

Como mi Yosemite salidas de máscaras de red en ifconfig en hexadecimal, escribí un script de shell que todos los análisis ifconfig salida y se calcula de la red a partir de ella. Tal vez usted podría modificar a sus necesidades. Un ejemplo de salida 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á la secuencia de comandos; omite inet6 direcciones de ifconfig y se refiere únicamente a IPv4:

#!/bin/sh

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

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 desea que sólo el primer octeto de la red, sólo tiene que desactivar el final printf y reemplazarlo con

printf "%d\n" "$((i1 & m1))"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X