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

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: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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

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

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:

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@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

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:

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.
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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

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

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: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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

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

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
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!!
snafu hat geschrieben:etzt sollte es gehen. Vielleicht mag das ja mal jemand testen...

http://paste.pocoo.org/show/88167/
wie soll das plattformunabhaengig gehen? es gibt unter windows kein fcntl, leider. :(

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@roschi:

Achso, das wusste ich nicht (wahrscheinlich in der Doku überlesen). Hat denn schon jemand unter Unix/Linux & Friends getestet ob es seine korrekte IP zurück gibt?
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Das gibt nur meine interne IP zurück (192.168. ...). Ich glaub, um die IP des Routers herauszufinden, musst du wirklich auf sowas wie checkip.dyndns.org zurückgreifen.

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

Okay, mit nem Router hab ich's nicht getestet, ohne Router stimmt sie. Kannst ja mal probieren deine interne IP ebenfalls auszuschliessen (Zeile 27). Ich weiß aber ehrlich gesagt nicht ob die Funktion bis nach "draußen", sprich: an die IP des Routers, kommt.

EDIT: Hab's jemanden mit Router testen lassen. Geht leider nicht. Hätte mich auch gewundert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

snafu hat geschrieben:EDIT: Hab's jemanden mit Router testen lassen. Geht leider nicht. Hätte mich auch gewundert.
Natürlich nicht. Das ist ja der ganze Punkt von NAT und auch der warum wir in Zukunft definitiv IPv6 brauchen. Stell dir mal vor, NATs hinter NATs zu traversieren, allein die Idee ist so fürchterlich, dass man das gar nicht glauben will.

Siehe The future without IPv6. Daraufhin habe ich mich gleich umgesehen, ob mein ISP IPv6-Zugänge bereitstellt (tut er nicht).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten