Prima di scrivere codice, devi avere un algoritmo in testa, anche se poi viene stravolto durante la stesura.
Premetti che noi comunemente usiamo routers con LAN e indirizzi di classe C, che di solito hanno questa forma 192.168.x.y ma è solo una convenzione portata a standard.
Non è detto che tu debba usare il programma solo nel range della classe C di un router casalingo o d'ufficio, per cui sarebbe sensato (visto che per eseguirlo devi essere connesso) fare un'analisi della rete per trovare il tuo IP e la netmask per poi calcolare il CIDR (chiedi a davenull se ha già scritto qualcosa) e restringere esponenzialmente il range degli IP (visto che non vuoi fare rumore..).
Almeno così riesci a vedere gli instradamenti automatici, se poi c'è un router.. è un'altra storia.
Quindi..
Si, sarebbe meglio dividere l'ip(v4) in 4 ottetti e selezionare solo alcuni range.
No, non serve inserire manualmente l'ip se lo puoi trovare con python stesso..
Questo è un esempio per estrarre le informazioni necessarie:
#! /usr/bin/env python3
#Find local IP, netmask and hostname's IPs
#you must use superuser powers #
import itertools
import os
import re
def get_ip():
f = os.popen('ifconfig')
for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
ip = re.findall('(?<=inet\saddr:)[0-9\.]+',iface)
if ip:
return ip[0]
return False
my_ip = get_ip()
print("""This is your local IP """)
print(my_ip)
def get_netmask():
f = os.popen('ifconfig')
for iface in [' '.join(i) for i in iter(lambda: list(itertools.takewhile(lambda l: not l.isspace(),f)), [])]:
if re.findall('^(eth|wlan)[0-9]',iface) and re.findall('RUNNING',iface):
nm = re.findall('(?<=Mask:)[0-9\.]+',iface)
if nm:
return nm[0]
return False
my_nm = get_netmask()
print("""This is your netmask """)
print(my_nm)
ips = os.popen('hostname --all-ip-addresses')
my_ips = ips.read()
print("""Those are your hostname's IPs """)
print(my_ips)