Barrido de direcciones IP y puertos

Imagen de migueloon
0 puntos

Buenas noches necesito crear un script que realice lo siguiente

Desarrollar un shell script que determine las interfaces de red dentro del sistema y obtenga la dirección IP de cada una de estas.

Por cada interfaz lleve a cabo el siguiente procedimiento:
Realice un barrido de las direcciones IP de acuerdo al identificador de Red y Subred de cada interfaz.
En el caso de determinar que cierta dirección IP se encuentre activa proceder a realizar un barrido en los puertos para tal dirección IP mediante el siguiente procedimiento:
Utilice el comando telnet IP PORT, para desarrollar la prueba de cada puerto.
En caso de no existir una aplicación en tal puerto, se debe indicar tal situación
En la situación en la que un puerto se encuentre activo y la aplicación telnet se bloque en espera de una interacción del usuario. Se deberá concluir con dicha aplica aplicación mediante un comando kill.
Se debe de indicar mediante un mensaje a pantalla cuando ocurra una aplicación activa en dicho puerto.

creo que la primera parte lo puedo hacer con el comando iwconfig aunque no tengo idea de como realizar el resto.

Agradezco que lo hayan leido y espero que alguien me pueda explicar.
gracias

Imagen de pwned
+1
0
-1

Aquí esta, necesita tener instalado `fping' y `ipcalc'. Importante, esta testeado en debian, en los demás sistemas no se como responderá.
Pedía que se escanearan todos los puertos, yo le he puesto que escanee solo el 23 que es el de telnet, si quiere escanear más meta un bucle pero ya le digo que tardará mucho.

#!/bin/bash
# Copyright (C) 2012  pwned
# Bajo GPLv3 o posterior  http://www.gnu.org/licenses/
# Autor: pwned (pwned[at]tormail[dot]com)
declare -a interfaz
declare -a ip
declare -a netmask
declare -a activa
declare -a cidr
# Sacamos las interfaces levantadas.
interfaz_all=`/sbin/ifconfig -s | sed -n '2,$p' | grep --invert-match -w "lo" | awk '{printf $1" "}'`
 interfaz=($interfaz_all)
# Imprimimos las interfaces encontradas en número y nombre.
echo "[*] Interfaces: ${#interfaz[*]} (${interfaz[*]})"
total=${#interfaz[*]}
# Sacamos la IP privada de cada una, en caso de tener IP muestra que no esta en red dicha interfaz.
# si esta en red, se saca también la máscara de red.
for ((i=0; i<total; i++ )); do
 ip[${i}]=`/sbin/ifconfig ${interfaz[${i}]} | grep "inet addr" | awk '{printf $2}' | cut --delimiter=':' --fields=2`
  if [[ "${ip[${i}]}" == "" ]]; then
    echo "La interfaz ${interfaz[${i}]} no esta en red."
  else
    activa[${i}]=$i  # Nos quedamos con las interfaces en red.
    netmask[${i}]=`/sbin/ifconfig ${interfaz[${i}]} | grep "Mask" | awk -F':' '{printf $NF}'`
  fi
done
echo
# Imprimimos las interfaces activas, junto a su IP y máscara.
echo "[*] Interfaces activas: ${#activa[*]}"
for i in ${activa[*]}; do
  echo "${interfaz[${i}]} ${ip[${i}]} ${netmask[${i}]}"
done
echo
# Sacamos la subnet de cada interfaz activa con notación CIDR para el escáner posterior.
for i in ${activa[*]}; do
    cidr[${i}]=`ipcalc ${ip[${i}]} ${netmask[${i}]} | grep -w "Network:" | awk '{printf $2}'`
done
# Imprimimos lo nuevos la interfaz con el nuevo la subnet.
echo "[*] Notación CIDR:"
for i in ${activa[*]}; do
  echo "${interfaz[${i}]} ${cidr[${i}]}"
done
echo
# Buscamos host vivos en la red de cada interfaz, y realizamos las operaciones.
for i in ${activa[*]}; do
  echo "[*] Buscando targets en la red ${cidr[${i}]} (${interfaz[${i}]})"
  target_all=`fping -a -g ${cidr[${i}]} 2> /dev/null | awk '{printf $1"\n"}'`
  echo -e "${target_all}\n"   # Mostramos los host vivos.
  echo -e "[*] Escaneando..."
  echo "$target_all" | while read line; do   # Vamos escaneando puertos para cada puerto, y mostrando resultados.
    echo -ne "\035" | telnet $line 23 &> /dev/null   # Solo en el puerto 23.
    if [[ $? -eq 0 ]]; then
      echo "El target $line tiene el puerto 23 activo."
    else
      echo "El target $line NO tiene el puerto 23 activo."
    fi
  done
  echo
done

Un ejemplo de ejecución:

pwned@localhost:~$ ./code.sh 
[*] Interfaces: 2 (eth0 wlan0)
La interfaz eth0 no esta en red.

[*] Interfaces activas: 1
wlan0 192.168.1.165 255.255.255.0

[*] Notación CIDR:
wlan0 192.168.1.0/24

[*] Buscando targets en la red 192.168.1.0/24 (wlan0)
192.168.1.160
192.168.1.165
192.168.1.1
192.168.1.131

[*] Escaneando...
El target 192.168.1.160 NO tiene el puerto 23 activo.
El target 192.168.1.165 NO tiene el puerto 23 activo.
El target 192.168.1.1 tiene el puerto 23 activo.
El target 192.168.1.131 NO tiene el puerto 23 activo.

pwned@localhost:~$ 
+1
0
-1