# Automatisation de tâches réseau ## Découverte du réseau ### Installation des outils ```bash sudo apt-get update && sudo apt-get install arp-scan nmap ``` ### Configuration réseau La commande `ip a` permet de connaître la configuration réseau de la machine courante: ```bash $ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 00:0c:29:70:34:f0 brd ff:ff:ff:ff:ff:ff inet 172.16.80.128/24 brd 172.16.80.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe70:34f0/64 scope link valid_lft forever preferred_lft forever ``` L'interface `ens33` est ici active et possède une adresse IP. ### Voisinage réseau La commande suivante permet de découvrir toutes les machines sur le voisinage réseau: ```bash sudo arp-scan --interface=ens33 172.16.80.1/24 ``` Son exécution donne la sortie ressemblant à ceci : ``` Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/) 172.16.80.1 00:50:56:c0:00:02 VMware, Inc. 172.16.80.2 00:50:56:f4:f4:8a VMware, Inc. 172.16.80.254 00:50:56:e2:3f:0c VMware, Inc. 3 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.9: 256 hosts scanned in 1.871 seconds (136.83 hosts/sec). 3 responded ``` #### Exercice : Scan simple Ecrivez un script `scan-if` qui va prendre un paramètre: le numéro de l'interface réseau donné par `ip a`. Dans l'exemple précédent, `2` donne l'interface `ens33` L'appel du script donnera la sortie suivante: ```bash $ scan-if 2 172.16.80.1 00:50:56:c0:00:02 VMware, Inc. 172.16.80.2 00:50:56:f4:f4:8a VMware, Inc. 172.16.80.254 00:50:56:e2:3f:0c VMware, Inc. ``` Exécutez ce script en branchant votre machine sur différents réseaux. **Note:** pour redémarrer l'interface réseau, utilisez `sudo systemctl restart networking` #### Découverte d'une machine La commande suivante: ```bash sudo nmap -O -sV 172.16.80.128 ``` donne la sortie: ``` Starting Nmap 7.40 ( https://nmap.org ) at 2018-01-24 01:17 CET Nmap scan report for 172.16.80.128 Host is up (0.000036s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.25 ((Debian)) Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.8 - 4.6 Network Distance: 0 hops Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 10.29 seconds ``` Etudiez le manuel de `nmap` pour déterminer à quoi servent les différents paramètres: - `-O` - `-sV` Est-il possible de ne scanner que le port 22 ? Essayez de scanner avec le paramètres `-Pn` si les informations de l'OS n'apparaissent pas. Tentez d'utiliser le paramètre `-T4` : que provoque-t-il ? #### Exercice: Scan approfondi Vous allez reprendre le script précédent. Cette fois, pour chaque IP, si la machine possède un port `ssh` ouvert, tentez une connexion en utilisant votre clef SSH et votre login. Sur chaque machine cible, lancez une commande permettant de récuperer le contenu du fichier `/etc/resolv.conf` et d'en récuperer les `nameserver` (DNS). Votre script devra lister ces `nameserver` pour les machines auxquelles elle aura réussi à se connecter. L'OS de la machine doit également être affiché. Si la connexion à la machine est impossible, afficher `N/A` pour la valeur du `nameserver` Ajoutez un affichage des noms des colonnes: ```bash $ scan-deep 2 Target OS nameserver 172.16.80.1 "Apple iOS 10" N/A 172.16.80.2 "VMware Player virtual NAT device" N/A 172.16.80.254 "Linux 3.8 - 4.6" 172.16.80.2 ```