Lista indirizzi IP - generare nuovi indirizzi

di il
5 risposte

Lista indirizzi IP - generare nuovi indirizzi

Salve,

Visto che questo è il forum di Java vorrei lo stesso dei suggerrimenti per lo sviluppo:

Il mio problema che visto che in una lista sono presenti questi indirizzi ip, esistenti, vorrei generare in random solo l'ultima cifra tranne i valori esistenti.

Esempio:

questa è la lista:

['192.168.223.10']
['192.168.223.11']
['192.168.223.12']
['192.168.223.13']
['192.168.223.14']

questo è quello che voglio fare:

['192.168.223.10'] visto questo ip è esistente l'ultimo valore voglio generare in modo random da 1 a 254 però il valore 10 non deve essere compreso perchè esiste.

Come devo fare?

questo è il mio codice:

cursor.execute(
"""CREATE TABLE IF NOT EXISTS gestioneDepositoTB(movimenti TEXT, depositi TEXT, prelievi TEXT, indirizzoIP TEXT, motivazione TEXT, totale TEXT)""")
                cursor.execute("SELECT indirizzoIP FROM gestioneDepositoTB")
                results = cursor.fetchall()
                num = random.randint(1, 254)
                for x in results:
                    res = list(x)
                    newList = []
                    for element in res:
                        vv = element.split('.')
                        uno = vv[0]
                        due = vv[1]
                        tre = vv[2]
                        if tre in vv:
                            if tre != vv:
                                ip = (uno + "." + due + "." + str(num))
                                newList.append(ip)
                                for new in newList:
                                    print(new)

risultato:

mi genera nuovi indirizzi ip cambiando l'ultima cifra in random, però capità che genrando esce lo stesso numero della lista.

adesso come devo fare?

5 Risposte

  • Re: Lista indirizzi IP - generare nuovi indirizzi

    Ciao,

    ho spostato nell'area Python.
    Ti raccomando di scrivere le discussioni nelle aree tematiche di competenza.

  • Re: Lista indirizzi IP - generare nuovi indirizzi

    Questa è l'area di Python:

    comunque questo è il nuovo codice, ancora non riesco a risolvere:

    cursor.execute(
                        """CREATE TABLE IF NOT EXISTS gestioneDepositoTB(movimenti TEXT, depositi TEXT, prelievi TEXT, data TEXT, motivazione TEXT, totale TEXT)""")
                    cursor.execute("SELECT data FROM gestioneDepositoTB")
                    results = cursor.fetchall()
                    for x in results:
                        res = list(x)
                        for element in res:
                            vv = element.split('.')
                            uno = vv[0]
                            due = vv[1]
                            tre = vv[2]
                            print("Tre:")
                            print(tre)
                            print("res")
                            print(res)
                            #x = random.choice([i for i in range(1,254) if i not in res])
                            exclude_this = [tre]
                            my_random_int = random.choice(list(set(range(1, 254)) - set(exclude_this)))
                            print("Sono qui:")
                            print(my_random_int)
  • Re: Lista indirizzi IP - generare nuovi indirizzi

    Non si capisce molto quale byte vuoi generare. Il quarto? Il terzo? I byte sono 4, i primi tre non li puoi generare a caso, ma hanno delle regole, il quarto può andare da 1 a 254.

    Nella tua fattispecie, se vuoi generare il quarto byte, puoi fare così:

    ip_list = ['192.168.223.10', '192.168.223.11', '192.168.223.12', '192.168.223.13', '192.168.223.14']
    
    last_octets = []
    for ip_addr in ip_list:
        octets = ip_addr.split('.')
        last_octets.append(octets[3])
    
    added = False
    while not added:
        new_octet = str(random.randint(1, 254))
        if new_octet not in last_octets:
            last_octets.append(new_octet)
            added = True
    
    print(last_octets)

    Questo metodo non converge, possono essere necessari più di 254 cicli prima di trovare un ottetto disponibile, quindi puoi usarlo giusto come spunto. L'ottetto ‘nuovo’ lo trovi nell'ultima posizione dell'array.

    Un'alternativa può essere creare un array da 255 elementi inizializzati a zero, poi prendi gli ottetti esistenti e li metti nella posizione corrispondente (es. ‘10’: octets[int('10')] = ‘10’). Poi scorri l'array e al primo valore a zero prendi l'indice: quello sarà l'ottetto cercato.

  • Re: Lista indirizzi IP - generare nuovi indirizzi

    Ciao, grazie mille della risposta ma riformulando il tuo codice adattando al mio codice, mi escono lo stesso i duplicati

    Che cosa ho sbagliato? Non riesco a capire come sistemare tale codice.

    In pratica indirizzi ip esistenti non  ci devono essere duplicati.

    1) octets[3] -? mi genera numeri casuali da 1 a 254 che non deve corrispondere a i numeri esistenti 

    Mi potete aiutare? Grazie

    conn = sqlite3.connect("mioDB.db")
                                cursor = conn.cursor()
                                cursor.execute(
                                    """CREATE TABLE IF NOT EXISTS retedb(idRete INTEGER PRIMARY KEY AUTOINCREMENT, piano TEXT, indirizzoIP TEXT, SubNetMask TEXT, GatewayPredefinito TEXT, DNSPreferito TEXT, DNSAlternativo TEXT)""")
    
                                cursor.execute("SELECT indirizzoIP FROM retedb WHERE piano=?",
                                               (searchComboPianoIndirizzoIP,))
                                results = cursor.fetchall()
                                for data in results:
                                    listaIP = list(data)
                                    last_octets = []
                                    newNumber = 0
                                    for ip_addr in listaIP:
                                        octets = ip_addr.split('.')
    
                                    added = False
                                    while not added:
                                        new_octet = str(random.randint(1, 254))
                                        if new_octet not in octets[3]:
                                            newNumber = new_octet
                                            added = True
                                            indirizzoIpGenerato = octets[0] + "." + octets[1] + "." + octets[2] + "." + newNumber
                                    self.ricercaIndirizzoIp_Treeview.insert('', 'end',values=indirizzoIpGenerato)
  • Re: Lista indirizzi IP - generare nuovi indirizzi

    Hai copiato parti del mio esempio senza capire come funziona, né dove sbagli, né perché sbagli.

    Nel mio esempio, prendo tutti gli ultimi ottetti degli indirizzi presi dal db e li metto in un array (che ho chiamato last_octets).

    A questo punto (e solo dopo aver estratto tutti i quarti ottetti in last_octets), inizio a cercare un nuovo ottetto.

    Sono due cicli separati, non innestati! Il primo ciclo estrae i quarti ottetti e li copia in last_octets, il secondo genera un ottetto a caso e va a vedere se in last_octets è già stato usato.

    Nel tuo codice prendi un indirizzo IP, estrai il quarto ottetto, poi generi un ottetto nuovo e ovviamente avrai un ottetto ‘intonso’, perché il tuo ‘octets[3]’ contiene solo un valore, quello corrispondente all'indirizzo IP preso dal db. All'iterazione successiva avrai un nuovo indirizzo IP preso dal db, ma non avrai più l'informazione degli ottetti precedenti.

    Devi quindi prima estrarre tutti i quarti ottetti, poi cercare un ottetto non usato dentro last_octets, infine comporre il corrispondente indirizzo IP e farne l'uso che ti serve.

Devi accedere o registrarti per scrivere nel forum
5 risposte