Duda básica

Iniciado por leogtz, 21 Febrero 2011, 23:41 PM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Hola, qué tal, estoy desarrollando un script que se encarga de setear un tipo de conexión. Tengo que hacer un script que dada una IP me devuelva algunas datos.

La sintaxis del programa que estoy haciendo es esta:
Código (bash) [Seleccionar]
script -r estatica 172.26.0.35

-r : estática o dinámica
y la ip

Por ejemplo, yo teniendo la IP 172.26.0.35, cómo debería ser la "network", "broadcast", "gateway", "address", "gateway", "netmask", es decir, ¿cómo cambiarían de acuerdo a la IP dada?


Esto lo necesito porque editaré un archivo, concretamente el archivo "/etc/network/interfaces".

¿Y cómo sería para una red dinámica?

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

madpitbull_99

En Linux para pasar de IP estatica a dinamica hay que cambiar esta linea en el fichero de configuracion:

iface eth0 inet dhcp
Dinámica.

por

iface eth0 inet static
Estática.

Cuando esta configurada por DHCP, no hay que poner mas datos, pero si vas a configurar una IP estática hay que poner los siguientes valores:

address 172.26.0.35        <- Ip del interfaz.
netmask 255.255.255.0    <- Mascara de red.
network 172.26.0.0         <- Dirección de la red.
broadcast 172.26.0.255   <- Dirección de broadcast.
gateway 172.26.0.1        <- Ip de la puerta de enlace.
dns-nameservers 8.8.8.8  <- Ip del servidor DNS.

Para detectar si esta puesta en dinámica puedes buscar dentro del fichero de configuración la palabra "dhcp" si no se encuentra es que esta en estática.

Para calcular los demás datos puedes echar un vistazo a las calculadoras IP y a los tutoriales que he puesto en el post de abajo:
Calculo Mascara

Si tienes dudas de como calcular los parametros, pudes mirar proyectos ya hechos como: PHP Subnet, Calculator, IP Net Calculator.
Los dos están en PHP, pero si sabes scripting se entiende y tambien los hay en otros lenguajes. Para Webmin hay un plugin (en Perl) que mirar para ver como calcula los parámetros.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

leogtz

Gracias, me has aclarado la duda, solo esa parte me faltaba para ponerme a trabajar, gracias.

Cualquier duda te comento.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

leogtz

#3
@madpitbull_99

Y si mi fichero está como sigue?


auto lo
iface lo inet loopback


¿En qué está?

Te explico mi duda.

Mira, mi script es algo así:

comando -r dinamica IP

¿Si el usuario me da "dinamica" solo tengo que volcar al archivo /etc/network/interfaces lo siguiente?

iface eth0 inet dhcp

¿qué es lo que debiera tener en cuenta? ¿o solo así como te lo pongo?

¿Se pueden tener varias interfaces?

¿Es decir, con cada llamada al script puedo sobreescribir los valores o tengo que agregar al final dependiendo de lo que me de el usuario?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

madpitbull_99

CitarY si mi fichero está como sigue?


auto lo
iface lo inet loopback

¿En qué está?
El interface lo es es el interface de bucle local o el loopback, ese tiene que estar obligatoriamente en el archivo de configuración de la tarjeta de red.

Citar
¿Si el usuario me da "dinamica" solo tengo que volcar al archivo /etc/network/interfaces lo siguiente?

iface eth0 inet dhcp
¿qué es lo que debiera tener en cuenta? ¿o solo así como te lo pongo?
Si, así pediría una IP por DHCP al servidor que hay en la red. Debes tener en cuenta que el nombre del interfaz es diferente en cada sistema.
En un equipo se puede llamar eth0 y en otro se puede llamar eth3. Para ver el nombre que tiene la tarjeta de red en un equipo puedes ejecutar el comando ifconfig -a y luego parsear (con regex, por ejemplo) la palabra que empieza por eth* y así sacar el nombre del interfaz de red.

Citar¿Se pueden tener varias interfaces?
Si, un equipo puede tener mas de una tarjeta de red, si se trata de un servidor proxy o un firewall, tendrá mas de una tarjeta de red.

Citar¿Es decir, con cada llamada al script puedo sobreescribir los valores o tengo que agregar al final dependiendo de lo que me de el usuario?
Puedes sobreescribirlo, al final del script si todas las acciones se han realizado bien, reinicia el daemon de la tarjeta de red: /etc/init.d/networking restart.



Mira un script parecido a lo que quieres hacer:

Código (bash) [Seleccionar]
#/bin/bash
# Author: Joshua Bailey
# Name: netHome
# Syntax: netHome
# Summary: used to fix your network settings after
# changing them for another location (or dhcp)

function getCurIP
{
# $1 should be the device
ifconfig $1 | grep inet > ~/ip.find
cat ~/ip.find | awk '{print $2}' > ~/ip.find
CUR_IP=`cat ~/ip.find`
CUR_IP=${CUR_IP:5:${#CUR_IP}-5}
rm ~/ip.find
}

# setting the domain name
read -p "Please input your domainname (`domainname`): " DMN
if [[ ${#DMN} == 0 ]]
then
DMN=`domainname`
fi
# end setting domain name

# setting the hostname
read -p "Please input your hostname (`hostname`): " HSN
if [[ ${#HSN} == 0 ]]
then
HSN=`hostname`
fi
# end setting hostname

# setting the device
read -p "Please input your the device you will be using (eth0): " DEV
if [[ ${#DEV} == 0 ]]
then
DEV=eth0
fi
# end setting device

# get the current ip
getCurIP $DEV

# setting the ip
read -p "Please input your chosen IP for this machine ($CUR_IP): " IP

if [[ ${#IP} == 0 ]]
then
IP=$CUR_IP
fi

ifconfig $DEV up
ifconfig eth0 | grep $IP > /var/null

if [[ $? != 0 ]]
then
ifconfig $DEV down
echo "*** IP not set ***"
echo "*** Setting ***"
ifconfig $DEV $IP
ifconfig $DEV up
else
echo "*** IP matches ***"
echo "*** No changes made ***"
fi
# end setting the ip

# setting the default gateway
echo "*** Checking default gateway ***"
echo "*** This may take some time ***"
echo "*** Please wait ***"

route > ~/test.route
cat ~/test.route | awk '{if ($1 == "default") print $2;}' > ~/test2.route
CUR_DEF=`cat ~/test2.route`
read -p "Please input your default gateway ($CUR_DEF): " DEF

if [[ ${#DEF} == 0 ]]
then
DEF=$CUR_DEF
fi

cat ~/test.route | awk -v GW=$DEF '{if ($2 == GW) print $2;}' > ~/found.route
FOUNDIT=`cat ~/found.route`

if [[ $FOUNDIT == $DEF ]]
then
echo "*** Default gateway matches ***"
echo "*** No changes made ***"
else
route del default 2> /dev/null
# route add default gw $DEF dev $DEV
echo "*** Default gateway set ***"
fi

rm -f ~/*.route
# end setting the default gateway

# begin setting dns
grep search /etc/resolv.conf >~/search.dns
TEMP=`grep -n nameserver /etc/resolv.conf`
echo $TEMP > nameserver.dns

cat ~/search.dns | awk '{print $2;}' > ~/search.dns
CUR_PRIM=`echo $TEMP | awk '{print $2}'`
CUR_SEC=`echo $TEMP | awk '{print $4}'`

read -p "Please input your primary dns ip ($CUR_PRIM): " PRIM
if [[ ${#PRIM} == 0 ]]
then
PRIM=$CUR_PRIM
fi

read -p "Please input your secondary dns ip ($CUR_SEC): " SEC
if [[ ${#SEC} == 0 ]]
then
SEC=$CUR_SEC
fi



echo "*** Checking DNS entries ***"
CON=`cat /etc/resolv.conf | grep $DMN`
CON2=`cat /etc/resolv.conf | grep $PRIM`
CON3=`cat /etc/resolv.conf | grep $SEC`
if [[ ! ${#CON} -gt 0 || ! ${#CON2} -gt 0 || ! ${#CON3} -gt 0 ]]
then
echo "*** Editing /etc/resolv.conf ***"
echo "search $DMN" > /etc/resolv.conf
echo "nameserver $PRIM" >> /etc/resolv.conf
echo "nameserver $SEC" >> /etc/resolv.conf
else
echo "*** All DNS entries match ***"
echo "*** No changes made ***"
fi
# end setting dns

Fuente



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

leogtz

Gracias, mañana lo miro con detenimiento, creo que mis dudas por ahora están solventadas.

Por cierto, para la configuración estática creo que tendré que recurrir a esto:

CitarSi tienes dudas de como calcular los parametros, pudes mirar proyectos ya hechos como: PHP Subnet, Calculator, IP Net Calculator.
Los dos están en PHP, pero si sabes scripting se entiende y tambien los hay en otros lenguajes. Para Webmin hay un plugin (en Perl) que mirar para ver como calcula los parámetros.

Pero vaya, estoy solo con shell script, y mi script se ejecutará en varias máquinas, así que debo buscar la manera de hacer esos calculos en el mismo script, sabes como podría hacerle sin usar esos programas?

¿podría hacer el calculo con los mismos comandos del sistema ó como podría generalizarlo?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

leogtz

Nunca me pensé que fuera a ser tan complicado el cálculo ese, pero bueno, tendré que usar "ipcalc", un pequeño ejecutable en c, lo compilo, uso y borro.

Una pregunta, para estos parámetros:

script -r estatica 172.26.0.35

Los siguientes valores son los que me da el programa:


leo@leo-desktop:~/Escritorio/proyectos/345$ ipcalc 172.26.0.35
Address:   172.26.0.35          10101100.00011010.00000000. 00100011
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   172.26.0.0/24        10101100.00011010.00000000. 00000000
HostMin:   172.26.0.1           10101100.00011010.00000000. 00000001
HostMax:   172.26.0.254         10101100.00011010.00000000. 11111110
Broadcast: 172.26.0.255         10101100.00011010.00000000. 11111111
Hosts/Net: 254                   Class B, Private Internet

leo@leo-desktop:~/Escritorio/proyectos/345$


¿Me puedes ayudar a saber cómo crear los dns públicos en el /etc/resolv.conf?

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

y0g-s0th0th

es q esos datos dependen exclusivamente de la red en la q estes. podes poner dns genericos, pero los q van no tenes forma de conseguirlos sin tener una conexion activa.

el netmask q pones en el ejemplo podria ser tranquilamente /16 en lugar de /24 ya q la ip es de clase b, pero cualquiera de los 2 va a funcionar en todo caso. el gw tampoco tiene un lugar fijo, lo pueden haber puesto en cualquier lado.


saludos
Para invocar a Yog-Sothoth habrás de esperar a que el sol penetre en la quinta mansión, con Saturno en trino; luego has de trazar el pentáculo de fuego, recitando el noveno verso tres veces; y, repitiéndolo todos los años cuando la Noche del árbol de Mayo y en la de Difuntos, harás que el Ser se engendre en los Espacios Exteriores, más allá de la puerta que custodia Yog-Sothoth.

leogtz

Gracias, pregunto porque en el script que me encargaron no me dieron ningún otro dato, y no sé sobre estas configuraciones. Mira lo que me pusieron:


CitarY crear los dns públicos que queramos en el /etc/resolv.conf.
La forma de uso sería: mtk -r estatica 172.26.0.35

Pero no me dicen qué valores debe tener.

¿Me podrías decir como poner dns genéricos?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

madpitbull_99

Cita de: Leo Gutiérrez. en  1 Marzo 2011, 03:50 AM
¿Me podrías decir como poner dns genéricos?

Los DNS no hay que calcularlos. Simplemente tienes que poner la IP del servidor DNS que quieras para ese equipo.

Eso se hace en el archivo /etc/resolv.conf de la siguiente manera:

nameserver 8.8.8.8
nameserver 8.8.4.4

Ese ejemplo es completamente valido, ya que, se tratan de los servidores DNS públicos de Google.

En caso de disponer de un servidor de nombres (DNS) en la red, habrá que poner la IP de ese servidor en el fichero de configuración DNS.
Por ejemplo, si la IP del servidor DNS de mi red es: 172.26.0.100 y el nombre de dominio de mi red es: elhacker.net el fichero /etc/resolv.conf quedaría de la siguiente manera:

search elhacker.net
nameserver 172.26.0.100

Como ya he dicho, en la configuración DNS no tienes que calcular nada.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red