Seite 1 von 2

Random IP

Verfasst: Dienstag 15. November 2011, 16:47
von graphicsH
Hi,
ich arbeite an einem Script der eine IP per Zufall erstellen soll,ich kriege jedoch immer nur 1-3 Zahlen heraus...

Code: Alles auswählen

def chip():
    part = int(4)        #IP=4teilig (von Punkten getrennnt)
    while(part>0):
        num = str(random.randint(0,9))       #erste Zahl der IP
        val = random.randint(0,2)               #wieviele Zahlen pro Part (1-3)
        while(val>0):
            num = num + str(random.randint(0,9))
            val -= 1
        if(part!=1):
            num = num + '.'        #damit am ende der IP kein punkt ist
        part -= 1
    print num
wo liegt der fehler?
ich bekomme immer nur 1-3 zahlen (=ersten part) geschrieben...

Re: Random IP

Verfasst: Dienstag 15. November 2011, 16:48
von graphicsH
random ist auch importiert....

Und könnte ich irgendwie die warscheinlichkeit von 3 Stellen erhöhen und 1 Stelle verringern?

Re: Random IP

Verfasst: Dienstag 15. November 2011, 16:57
von deets
Oh. Mein. Gott.

Zuerstmal ist int(4) ist voelliger Unsinn. 4 ist ein int.

Dann schau dir mal an, was

".".join(["look", "ma", "it's", "working])

tut.

Und last but not least: Wenn du schon randint kennst, warum dann nicht randint(1, 254) pro Komponente?

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:03
von graphicsH
warum dann nicht randint(1, 254) pro Komponente?
stimmt,voll vergessen...

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:10
von graphicsH
so,abgeändert,krieg aber immer noch keine ganze IP + Gateway...

Code: Alles auswählen

import random

def getIP():
    part = int(4)
    while(part>0):
        num = str(random.randint(0,255))
        if(part!=1):
            num = num + '.'
        part -= 1
    chipIP = num
    print chipIP
def getGateWay():
    chipGW = str.split(chipIP,'.')
    def getPart():
        num = str(random.randint(0,255))
        global num
    global chipGW
    chipGW = chipGW[0] + '.' + chipGW[1] + '.' + chipGW[2] + '.' + num
    print chipGW

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:16
von /me
graphicsH hat geschrieben:so,abgeändert,krieg aber immer noch keine ganze IP + Gateway...
Ich werde aus dem absolut umständlichen, vermurksten und PEP-8-ignoranten Code nicht schlau. Kann es sein, dass du einfach so etwas möchtest?

Code: Alles auswählen

print '.'.join([str(random.randint(0, 255))for _ in xrange(4)])

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:21
von graphicsH
@/me
quasi...

hab zu komplieziert gedacht...

thx

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:24
von anogayales
Bitte guck dir mal das Python Tutorial an. Listen sollte man aufjedenfall mal durchgearbeitet haben. Am besten dann auch gleich Listcomprehensions. Mit denen ist es ein Einzeiler:

Code: Alles auswählen

from random import randint

def get_ip(parts=4):
    return ".".join(str(randint(0,255)) for x in xrange(parts))

print get_ip(9)
Ausgabe

Code: Alles auswählen

34.9.226.157.155.167.12.156.232
Grüße,
anogayales

Edit: War wohl jemand schneller :P

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:26
von /me
anogayales hat geschrieben:Edit: War wohl jemand schneller :P
Es ist aber schön zu sehen, dass man bei ähnlichen Lösungen landet.

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:28
von graphicsH
@anogayales
hab mir schon viele Tutorials angeschaut (auch x über listen), join ist jedoch nie
vorgekommen...
Habs daher bisher nicht gekannt...

Re: Random IP

Verfasst: Dienstag 15. November 2011, 17:36
von graphicsH
Hier schon nächstes problem:

(Ausschnitt meines CLI)

Code: Alles auswählen

    def do_chip(self,intervall):
        def getIP():
            global chipIP
            chipIP = '.'.join([str(random.randint(0, 255))for _ in xrange(4)])
    #.
    #.
    #.
    print chipIP #zum test
Error:
NameError: global name 'chipIP' is not defined
was ist falsch?oben definiert und 'globalisiert'...

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:04
von /me
graphicsH hat geschrieben:was ist falsch?oben definiert und 'globalisiert'...
Jetzt vergiss doch bitte endlich mal global. Damit schaffst du dir diverse unschönen Abhängigkeiten in deinem Code. Gib einfach den errechneten Wert aus der Funktion zurück.

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:10
von /me
graphicsH hat geschrieben:hab mir schon viele Tutorials angeschaut (auch x über listen), join ist jedoch nie
vorgekommen...
Dann schau dir auch mal eine Beschreibung der Built-in Types an. Mit diesen Typen geht man häufiger um und man sollte zumindest eine Idee davon haben, was sie von Haus aus liefern.

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:19
von graphicsH
Gib einfach den errechneten Wert aus der Funktion zurück.
den Befehl print in der funktion wiedergeben ist nutzlos,da ich dann statt print einen anderen Befehl (mit chipIP) in einer anderen Funktion benütze

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:26
von /me
graphicsH hat geschrieben:
Gib einfach den errechneten Wert aus der Funktion zurück.
den Befehl print in der funktion wiedergeben ist nutzlos,da ich dann statt print einen anderen Befehl (mit chipIP) in einer anderen Funktion benütze
Du hast laut deiner eigenen Aussage viele Tutorials durchgelesen und nach meiner Einschätzung kaum eins davon wirklich verstanden. Du weißt überhaupt nicht wovon ich rede, oder?

Sagt dir return etwas?

Lies im offiziellen Tutorial Defining Functions und verstehe das diesmal auch noch.

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:27
von graphicsH
@/me
ja,es gibt den Wert einer Variable zurück.

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:32
von /me
graphicsH hat geschrieben:ja,es gibt den Wert einer Variable zurück.
Wofür brauchst du denn dann noch eine globale Variable? Du übernimmst den Rückgabewert und verwendest den weiter.

Code: Alles auswählen

def print_value(val):
    print val

def calculate_value(number):
    return 42 * number

result = calculate_value(23)
print_value(result)

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:33
von Darii
graphicsH hat geschrieben:wo liegt der fehler?
Du überschreibst num jedes Mal in der 1. Zeile nach while.

Re: Random IP

Verfasst: Dienstag 15. November 2011, 18:47
von graphicsH
irgendwas geht immer noch nicht...

(Ausschnitt CLI)

Code: Alles auswählen

    def do_chip(self,intervall):
        try:
            def getIP():
                chipIP = '.'.join([str(random.randint(0, 255))for _ in xrange(4)])
                return chipIP
            def getGateWay():
                chipGW = str.split(chipIP,'.')
                def getPart():
                    num = str(random.randint(0,255))
                chipGW = chipGW[0] + '.' + chipGW[1] + '.' + chipGW[2] + '.' + num
                return chipGW
            chipSM = '255.255.255.0'
            def changeThem(ip,gw):
                getIp()
                getGateWay()
                wmis = wmi.WMI().Win32_NetworkAdapterConfiguration(IPEnabled=True)
                wmis = wmis[0]
                wmis.EnableStatic(IPAdress=[chipIP],SubnetMask=[chipSM])
                wmis.SetGateways(DefaultIPGateway=[chipGW])
                if(intervall!='u'):
                    time.sleep(int(intervall))
                else:
                    doNothing = ''
            os.startfile(startpath + '\\CIT.exe')
            os.system('cls')
            print 'Started IP-Threading'
            print 'Press <Str+C> to stop it...'
            thread.start_new_thread(changeThem,ip,gw)
        except:
            sys.exc_info()

Re: Random IP

Verfasst: Dienstag 15. November 2011, 19:42
von /me
graphicsH hat geschrieben:

Code: Alles auswählen

            def changeThem(ip,gw):
                getIp()
                getGateWay()
Warum eignest du dir nicht wirklich einfach mal die Grundlagen von Python an? Du rufst getIp() auf, weist das Ergebnis aber nicht zu.

Ich beende jetzt hier für mich diesen Thread. Wenn mein Beispiel oben nicht gereicht hat um den Umgang mit Rückgabewerten aus Funktionen zu demonstrieren, dann weiß ich nicht wie ich elementare Dinge noch einfacher erklären soll.