Verschiedene IP-Adressen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Hallo Leute,
Ich habe gerade wieder mit socket rumgebastelt. Jetzt wollte ich die lokale IP-Adresse feststellen. Das Problem: Es gibt 2!
Ich hole mir die IPs über:
a) socket.gethostbyname(socket.gethostname())
b) http://checkip.dyndns.org/ + urllib --> ähnlich wie wieistmeineip.de
Beide Adressen unterscheiden sich stark voneinander. Meine Frage:

Welche der beiden IP-Adressen ist die wirkliche?

Ich habe getestet, an die Adresse von a) etwas zu schicken und habe es angezeigt bekommen. Bei b) nicht, wobei das doch eigentlich die _richtige_ IP-Adresse ist, oder? Die zeigt wieistmeineip.de schließlich auch an und soweit ich weiß ändert sich diese Adresse ja auch immer, die IP von a) jedoch nicht (die ist immer gleich). Die Adresse von b) sollte die Netzwerkadresse sein, weshalb mMn die Nachricht auch "angekommen" ist.

Ich hoffe, ich konnte meine Frage verständlich formulieren und jemand weiß eine Antwort.
Dark Shadow

P.S.: Sollte das Thema nicht in Netzwerkprogrammierung passen (weil es eigentlich nicht direkt etwas damit zu tun hat), könnte das ja vielleicht ein Moderator verschieben.
BlackJack

@Dark Shadow: Mal davon abgesehen, dass beide IP-Adressen „wirklich” sein werden und ein Rechner tatsächlich mehr als eine IP-Adresse haben kann, wird die von b) nicht die des Rechners, sondern höchstwahrscheinlich die des Routers sein. Und da ist dann die Frage welche eingehenden Verbindungen der überhaupt annimmt und wohin er sie weiter leitet.

Du müsstest also mehr über Dein Netzwerk und dessen Konfiguration wissen, um nachvollziehen zu können warum die Nachricht bei b) nicht angekommen ist beziehungsweise nicht bis dorthin durchgedrungen ist, wo Du darauf gewartet hast.
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Ok. Das mit dem Router leuchtet ein.
Wenn ich jetzt mit einem anderem Computer ausserhalb meines Netzwerkes Daten austauschen möchte, welche der beiden IP-Adresse nehme ich dann? Wenn die Adresse von b) die richtige ist, wie komme ich dann am Router "vorbei"?

Danke für Deine schnelle Antwort.
Dark Shadow

P.S.: Ich habe mal bei netip.de nachgesehen, wo meine IPs liegen:
a) einige hundert Kilometer vor der Küste Gabons :mrgreen:
b) Deutschland
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Die IP, die `socket.gethostbyname(socket.gethostname())` zurückliefert, scheint (zumindest bei mir!) die lokale IP im LAN zu sein. (192.168.1.200) Zugriffe auf andere Rechner innerhalb des LANs scheinen von deinem Router nicht blockiert zu werden, jedoch jene, die außerhalb stammen. Du müsstest deinen Router so konfigurieren, dass man auch außerhalb des LANs auf deinen Rechner zugreifen kann (also irgendwelche Ports öffnen). Allerdings sollte man das schon wissen, wenn man seinen Rechner für das Internet "öffnen" will. ;)

Edit: Grammatikfehler ...
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

So etwas habe ich mir schon fast gedacht. :? (würde auch Sinn machen, weil ich über die Netzwerks-IP an andere PCs im Netzwerk rankomme, anders nicht)

Wie machen das eigentlich die "großen" Programme (zum Beispiel ICQ, Skype, usw.), dass Ports für sie im Router frei sind? Da muss es ja auch einen Kniff geben, weil sie ja sonst nicht zu ihren Servern kommen/Daten empfangen können (wenn es etwas mit der Registry zu tun hat, welche Schlüssel wären dann dafür zuständig?).

Danke für Eure Bemühungen.
Dark Shadow
BlackJack

@Dark Shadow: Messenger wie ICQ bauen von innen heraus eine Verbindung zum Server auf. In die Richtung sind Verbindungen in der Regel kein Problem. Wenn ein Programm auf Deinem Rechner schon ”böse” wäre, dann kann eine Firewall auch nichts mehr machen.

Und bei Programmen die auch Verbindungen von aussen annehmen können oder müssen, wie zum Beispiel Torrent-Clients, SSH-Server, und so weiter, muss man halt die entsprechenden Ports auf dem Router freischalten und auf den Rechner weiterleiten, auf dem der Server läuft.
deets

Ich glaube dir fehlen so manche Grundkenntnisse in TCP/IP - wenn du wirklich Netzwerkprogrammierung betreiben willst, solltest du dich da mal etwas mit beschaeftigen.

Tatsaechlich gibt es aber bestimmte Tricks, die Skype benutzt - allerdings *nicht*, weil es seine Server nicht erreichen kann! Das kann es naemlich. Der Trick besteht darin, dass sie genau *ohne* Server direkt 2 Clients miteinander reden lassen koenne.

Das ganze nennt sich UDP-hole-punching:

http://en.wikipedia.org/wiki/UDP_hole_punching

Nichts von dem hat mit der Registry zu tun. TCP/IP ist Systemunabhaengig.
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Danke! Das hilft mir schonmal weiter.
Antworten