Wiederholungen in Regex

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Dienstag 14. Oktober 2008, 15:08

snafu hat geschrieben:Ist auch etwas internes für die eigene IP möglich? Ich wähle mich über ein DSL-Modem ein, falls das von Belang ist.

Folgendes sollte klappen:

Code: Alles auswählen

import socket
socket.gethostbyname(socket.gethostname())
# oder
socket.gethostbyname_ex(socket.gethostname())


Gruß,
Manuel
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Dienstag 14. Oktober 2008, 15:12

Das gibt den Localhost (127.0.1.1) zurück. Der interessiert mich ja nicht. ;)
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Dienstag 14. Oktober 2008, 15:21

Ok, dann schau mal hier nach. Da kannst du dir die IP via Interface-Namen herauskramen.
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Dienstag 14. Oktober 2008, 16:55

Und woher weiß ich was mein ifname ist?
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Dienstag 14. Oktober 2008, 20:00

hallo!

es geht zwar bestimmt noch einfacher, aber es gibt server, die dir via http deine ip zurueckgeben:

Code: Alles auswählen

import urllib
f = urllib.urlopen("http://checkip.dyndns.org/")
print f.read()
f.close()


mfg
roschi
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Mittwoch 15. Oktober 2008, 04:19

@roschi: Was glaubst du was ich die ganze Zeit tue? Mein Link zeigt sogar einen "jungfräulichen" Text (also ohne jegliche HTML-Formatierung) an. ;)

Die Frage kam ja erst auf, als mir gesagt wurde, dass ich die IPs anderer Seiten auch ohne ein externes Programm abfragen kann. Und nun ging es mir darum, auch die eigene IP anzeigen zu können ohne eine andere Website dafür bemühen zu müssen. Das scheint aber etwas komplizierter zu sein und daher belasse ich die Funktion bisher auch bei der urllib-Lösung.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 15. Oktober 2008, 08:52

snafu hat geschrieben:Und woher weiß ich was mein ifname ist?

ifconfig bei Linux, ipconfig bei Windows.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Mittwoch 15. Oktober 2008, 11:00

snafu hat geschrieben:@roschi: Was glaubst du was ich die ganze Zeit tue? Mein Link zeigt sogar einen "jungfräulichen" Text (also ohne jegliche HTML-Formatierung) an.

upps, das habe ich uebersehen.
aber es ist gut, einen server mit jungfraeulicher response zu kennen ^^

mfg
roschi

[edit]
sorry, dass ich dir nicht weiterhelfen konnte :(
[/edit]
Zuletzt geändert von roschi am Mittwoch 15. Oktober 2008, 12:41, insgesamt 1-mal geändert.
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Mittwoch 15. Oktober 2008, 11:38

Super vielen Danke für die Hilfe. :)
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Mittwoch 15. Oktober 2008, 13:32

Ich habe mich etwas in die Abläufe eingelesen und den Code halbwegs nachvollziehbar in "own_ip()" strukturiert. Kann ich auch Python-intern den ifname herausfinden?

Der Code: http://paste.pocoo.org/show/88077/
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 15. Oktober 2008, 14:57

snafu hat geschrieben:Kann ich auch Python-intern den ifname herausfinden?


Kurz bei Google vorbeigeschaut: http://code.activestate.com/recipes/439093/
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Mittwoch 15. Oktober 2008, 20:57

So, jetzt sollte es hoffentlich plattformübergreifend laufen: http://paste.pocoo.org/show/88136/

EDIT: Wohl doch nicht. Hab's gerade von jemandem testen lassen. Die IP befindet sich wohl nicht immer an [52:56]. Wäre ja auch zu schön gewesen. :(
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Donnerstag 16. Oktober 2008, 00:34

Jetzt sollte es gehen. Vielleicht mag das ja mal jemand testen... :)

http://paste.pocoo.org/show/88167/
farid
User
Beiträge: 95
Registriert: Mittwoch 8. Oktober 2008, 15:37

Re: Wiederholungen in Regex

Beitragvon farid » Donnerstag 16. Oktober 2008, 02:52

snafu hat geschrieben:Innerhalb eines Skripts zur Anzeige der IP habe ich folgenden Ausdruck:


Wenn es nicht nur eine Uebung in Regexp sein soll, warum nicht explizit, z.B. so?

Code: Alles auswählen

#!/usr/bin/env python
# checkip.py -- check IPv4 dotted quad address

def check_ip(ip_str):
    "Check an IPv4 address in dotted quad notation"
    try:
        quad = map(int, ip_str.split('.'))
        if len(quad) != 4: return False
        for q in quad:
            if q < 0 or q > 255:
                return False
        return True
    except:
        return False

if __name__ == '__main__':
    import sys
    print check_ip(sys.argv[1])


Natuerlich faengt es nicht alle Sonderfaelle ab (Broadcast, Anycast, Multicast etc...), aber es ist IMHO besser als die regexp Loesung...
BlackJack

Beitragvon BlackJack » Donnerstag 16. Oktober 2008, 08:39

Es ging ja ursprünglich nicht um's Testen sondern um's Finden einer IP in einer Zeichenkette.

Meine Variation der Testfunktion (ungetestet):

Code: Alles auswählen

def is_ip(string):
    parts = string.split('.', 3)
    if len(parts) < 4:
        return False
    try:
        return all(0 <= int(p) <= 255 for p in parts)
    except ValueError:
        return False

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder