IP erkennen/rausbekommen.

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Ich suche eine efiziente Möglichkeit die IP zu bekommen, die man NACH einer Einwahl bei dem Provider bekommen hat.

Momentan nutze ich unter Windows ipconfig und werte das aus, aber geht das nicht auch irgentwie einfacher, bzw. Sicherer? Denn IPCONFIG liefert ja je nach system andere "werte" sprich mehr oder weniger Infos. Bei 2 Netzwerkkarten bekomme ich info über beide KArten + Info zur Verbindung. Das ist schlecht :(

Also, kennt jemand eine einfache Methode?
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Piddon, cat /proc/net/route liefert unter Linux folgendes:

Code: Alles auswählen

Iface   Destination  Gateway     Flags   RefCnt  Use  Metric  Mask      MTU  Window  IRTT
ppp0    556205D9     00000000    0005    0       0    0       FFFFFFFF  40   0       0
lo      0000007F     00000000    0001    0       0    0       00FFFFFF  40   0       0
eth1    00C9040A     00000000    0001    0       0    0       00FFFFFF  40   0       0
eth0    00C8040A     00000000    0001    0       0    0       00FFFFFF  40   0       0
eth0    00C8040A     00000000    0001    0       0    0       00FFFFFF  40   0       0
ppp0    00000000     556205D9    0003    0       0    0       00000000  40   0       0
Interessant sind hier IFace und Destination. eth0 ist die erste Netzwerkkarte und eth1 die zweite. Unter Destination steht die IP-Adresse (die Bytes von rechts nach links lesen!)

Ich habe kein Windows, also muß ich jetzt raten: deine IP Adresse steht irgendwo in den Tiefen deiner Registry (und wenn du Pech hast, ist bei jeder Windowsversion anders :cry: ) Vielleicht mal bei M$ in de Knowledgebase nachschauen. Wenn die es nicht können, versuch's mal bei newsgroups.borland.com (Rubriken c++ oder Delphi) Da habe ich schon so manches gelöst bekommen.

Hans
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hallo,

ich hatte ein ähnliches Problem, und zwar bei XChat. Für dcc brauchte ich den Eintrag der nach aussen sichtbaren IP, die aber eine ander ist als die die ich von meinem Provider zugewiesen bekomme.
Meine Lösung besteht aus 2 Scripten, einem kleinen php-Script auf einem phpfähigen Server und einem Pythonscript das beim Start von XChat die IP vom Server mit dem Webserverscript holt und in die Config von XChat einträgt.

Hier die Scripts:

Code: Alles auswählen

<? echo $REMOTE_ADDR ?>
einfach als ip.php auf einen Server legen, Du kannst auch gerne meines mitbenutzen http://www.sol.at/fritz/ip.php

Code: Alles auswählen

#!/usr/bin/env python

import httplib

conn = httplib.HTTPConnection("www.sol.at")
conn.request("GET", "/fritz/ip.php")
res = conn.getresponse()
if res.reason == "OK":
    ipnummer = res.read()
conn.close()
ipnummer enthält dann Deine nach aussen sichtbare IP


Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

ich kenn mich mit den sockets und anderen Libs zum Internet nich so gut aus, bräuchte sie aber eigentlich. Kannst du mir den Code mal erklären Dookie? ich würde ansonsten das benutzen, aber auch gern deins verstehen:

Code: Alles auswählen

from urllib import urlopen
ip=urlopen('http://www.sol.at/fritz/ip.php').read()
thx Milan
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Milan,

na dann will ich mal versuchen, den Code auseinanderzudröseln.

Code: Alles auswählen

import httplib

conn = httplib.HTTPConnection("www.sol.at") #Verbindung zum Webserver herstellen
conn.request("GET", "/fritz/ip.php") #die Seite "/fritz/ip.php" anfordern
res = conn.getresponse() # Antwort vom Webserver holen
if res.reason == "OK": # Seite existiert und ist erreichbar
    ipnummer = res.read() # ganze Seite lesen
conn.close()
Meine etwas aufwändigere Methode hat den Vorteil, daß, bei einer nicht erreichbaren Seite, ipnummer nicht gesetzt wird, während bei der Verwendung von urlopen eine Seite mit der Fehlermeldung zurückgegeben wird was aber in der Weiteren verarbeitung der Daten dann aufwändiger abgefragt werden müsste., ich kann in meinem Fall ja nicht als IP-Nummer in der XChat.config eine solche Ausgabe eintragen.

Beispiel:

Code: Alles auswählen

>>> ip=urlopen('http://www.sol.at/fritz/up.php').read()
>>> ip
'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<HTML><HEAD>\n<TITLE>404 Not Found</TITLE>\n</HEAD><BODY>\n<H1>Not Found</H1>\nThe requested URL /fritz/up.php was not found on this server.<P>\n<HR>\n<ADDRESS>Apache/1.3.27 Server at www.sol.at Port 80</ADDRESS>\n</BODY></HTML>\n'
>>> ip=urlopen('http://www.sox.at/fritz/up.php').read()
>>> ip
'<head><title>File Not Found - Datei nicht gefunden</title></head>\n<body><H1>File Not Found - Datei nicht gefunden</h1>\nThe requested URL was not found on this server.<p>\nDie gewünschte URL wurde auf diesem Server nicht gefunden.<p>\n</body>\n'
>>> 
Für mich war es auch das erste mal, daß ich so etwas probiert habe und mein Script läuft seit ein paar Monaten ohne Probleme. Wie so oft beim Programmieren, führe viele Wege nach Rom.


Hoffe geholfen zu haben, Gruß

Fritz
Zuletzt geändert von Dookie am Freitag 1. November 2002, 19:58, insgesamt 1-mal geändert.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

jupp, hat geholfen. thx.
Antworten