Lær hvordan du oppdager nettverksutstyr med Scientific Linux 7.1 og Python

Noen ganger kan det hende du har problemer med nettverk eller brannmur i et internt som krever en nettverksskanning for å finne hvilke IP-adresser som er i bruk. For det formål kan vi bruke ferdige verktøy som nmap, zmap eller angryIP. Men hvis vi ikke har tilgang til Internett for å laste ned disse verktøyene, kan vi gjøre skanningen ved å bare bruke manuelle kommandoer. Men manuell skanning kan være ganske kjedelig, med den forståelsen som bør gjøres for hver IP-adresse som er gitt på vårt nettverk.

Når jeg tar hensyn til det ovenfor, viser jeg i denne veiledningen hvordan vi kan automatisere denne oppgaven ved å bruke Python, og vite at python er tilgjengelig på nesten alle Linux distros tilgjengelig i markedet.

Python er det perfekte valget for dette fordi det tillater oss å automatisere hver eneste oppgave operativsystemet kan utføre, vi må bare bruke riktige biblioteker.

Bruke Linux-biblioteker i Python

Fokuset i vår nåværende studie er ping sweep-kommandoen, for å oppdage alt tilkoblet og slått utstyr på vårt nettverk. Skriptet vi bygger bygger en ping til hver IP-adresse på nettverket. For eksempel bruker vi subnetmasken / 24, den vil bare sløyfe gjennom de første 3-oktene i IP-en. Det første vi må vurdere for dette skriptet er hvilke systembiblioteker som kan brukes til oppgaven, vi må importere sys og subprocess biblioteker. Disse bibliotekene tillater bruk av spesifikke kommandoer til python tolken og operativsystemet selv, i dette tilfellet Scientific Linux 7.1.

import sys, subprocess

Jeg vil lagre skriptet mitt under navnet networkmonitor.py.

Registrere det rette argumentet

Når vi kjører skriptet ved å bruke kommandoen

>> python networkmonitor.py 10.0.0.

på skallet, hvis argumentet på kommandoen er feil (hvis len (sys.argv) <> 2 :), vil skriptet vise et riktig eksempel. (skriv ut "networkmonitor.py 10.0.0.").

Argumentet er IP-adressen til det skannede delnett, bare de første 3-oktene brukes. Så hvis argumentet er riktig, blir resultatet av kommandoen "ping-c1" + sys.argv [1] lagret i en variabel, i vårt tilfelle er cmdping, sys.argv [1] er "argument" -variabelen i sys-modulen og lagrer det første argumentet som er gitt til skriptet. I UNIX-miljøer må vi bruke ping-c1 fordi ping-kommandoen vil løpe uendelig.

hvis len (sys.argv) <> 2:
skriv ut "networkmonitor 10.0.0."

Subprocess Command, dens argumenter og for loop

På neste linje starter forløp, som utføres til den når grensen (stopptilstand) som vi stiller for det, er tilstanden det IP-området vi vil skanne. På dette punktet er det viktig å vurdere tiden som skriptet trenger for å skanne rekkevidde, jo større rekkevidde jo lengre skriptet vil kjøre. Subprocess.Popen tillater oss å starte en shell-kommando og vente til den er ferdig. Når du er ferdig, kontrollerer vi tilstanden som kommandoen returnerte. Den cmdping + str (x), utført av subprocess.Popen, øker indeksen for IP gitt av argumentet på hver syklus av forløp.

Skallet = sant betyr at prosessen vil bli utført på skallet. Imidlertid advarer Python-dokumenter nettsted om risikoen for bruk av shell = true, så vær forsiktig med hvilken kommando du utfører. Underprosessen.PIPE bruker som stderr argument indikerer at Python skal åpne et rør til standardstrømmen.

for x i rekkevidde (99,110):
p = subprocess.Popen (cmdping + str (x), shell = True, stderr = subprocess.PIPE)

I dette tilfellet testet vi bare elleve IP-adresser (fra 99 til 110).

Nå må vi sjekke innholdet i stderr, vi vil stoppe (pause) når variabelen er tom, ellers viser vi stdout innholdet.

ut = p.stderr.read (1)
hvis ut == "og p.poll ()! = Ingen:
bryte
hvis ut! = ":
sys.stdout.write (ut)
sys.stdout.flush ()

Denne siste koden må løpe hvis skallet fortsatt er i sann tilstand.

Den komplette koden er nå:

import sys, subprocess
hvis len (sys.argv) <> 2:
skriv ut "networkmonitor 10.0.0."
ellers:
cmdping = "ping-c1" + sys.argv [1]
for x i rekkevidde (99,110):
p = subprocess.Popen (cmdping + str (x), shell = True, stderr = subprocess.PIPE)
mens sant:
ut = p.stderr.read (1)
hvis ut == "og p.poll ()! = Ingen:
bryte
hvis ut! = ":
sys.stdout.write (ut)
sys.stdout.flush ()

Utgangen av vårt lille skript er:

Som vist på skjermbildet, gjør verktøyet bare en ping for å få et positivt eller negativt svar, og deretter flyttes til neste IP-adresse, og så videre for å analysere hele adresseområdet.

Det bør nevnes at jeg ikke krever forfatterskap av den ovenfor analyserte koden. Jeg forklarer bare dens funksjonalitet trinnvis for å få bedre forståelse av systemkommandoer og nettverksfunksjoner.

Legg igjen et svar

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.