gulli:board Logo

Anzeige


  Antwort
4pueblo
Mitglied
 
Registrierungsdatum: Oct 2006
Beiträge: 153
c socket ip

Hi,

ich versuche mich weiter an den <winsock2> Sockets.
Ist auch alles wunderschön und funktioniert super.
Aber wo zum Henker steht meine eigene IP?

Wenn ich:
sockaddr_in server;
server.sin_addr.s_addr =INADDR_ANY;

verwende, steht 0 drin, was soviel bedeutet wie "localhost" oder 127.0.0.1.
Ist auch ok.
Aber ich brauche meine eigene IP, wie bekomme ich die, bzw. wo steht sie.

Wäre schön, wenn jemand eine Antwort hätte.

edit:
ok, ich dachte sie steht auch im Socket oder so.
aber mit gethostname(...) usw sollte es gehen.
Alt 15. 05. 2008, 21:20 4pueblo is offline Mit Zitat antworten #1
HelloWorld
Mitglied
 
Benutzerbild von HelloWorld
 
Registrierungsdatum: Apr 2003
Beiträge: 4.078
Re: c socket ip

Es kann passieren, dass jemand mit mehreren Netzwerken verbunden ist (z. B. per Kabel und per WLAN), dann gibt es potentiell mehrere verschiedene IPs.
Wenn ich das richtig verstanden habe, kann man mit diesem API alle verfügbaren Netzwerkinterfaces auflisten lassen:
http://msdn.microsoft.com/en-us/libr...03(VS.85).aspx
Scheint aber genauso krank zu sein wie der Rest des Win32-APIs. Da lob ich mir doch mein if_nameindex.
Alt 15. 05. 2008, 23:38 HelloWorld is offline Mit Zitat antworten #2
4pueblo
Mitglied
(Threadstarter)
 
Registrierungsdatum: Oct 2006
Beiträge: 153
Re: c socket ip

Krank, ja, das hab ich in den letzten Stunden auch feststellen müssen.
Ich hocke hinter einem Router, wenn ich keinen hätte, wäre es glaube einfacher.
(Ich brauch die "richtige" IP)

Ich hab's bis jetzt nicht hin bekommen.

Als Notlösung für mein Projekt, verwende ich nun den Computernamen mit:

struct hostent *host
host->h_name

Windows macht doch Spass

Vielleicht hilft dein Link noch. Aber für heute hab ich genug. Ich mache an einer anderen Stelle weiter und schaue morgen noch einmal.

Danke
Alt 15. 05. 2008, 23:55 4pueblo is offline Mit Zitat antworten #3
HelloWorld
Mitglied
 
Benutzerbild von HelloWorld
 
Registrierungsdatum: Apr 2003
Beiträge: 4.078
Re: c socket ip

Zitat:
Zitat von 4pueblo
Ich hocke hinter einem Router, wenn ich keinen hätte, wäre es glaube einfacher.
(Ich brauch die "richtige" IP)
Gibt es auch falsche IPs? Wahrscheinlich meinst Du eher, dass Du die IP Deines Routers am WAN-Interface wissen willst. In diesem Fall geht das leider nicht so einfach, denn die ist eben nur Deinem Router bekannt.
Alt 16. 05. 2008, 00:04 HelloWorld is offline Mit Zitat antworten #4
4pueblo
Mitglied
(Threadstarter)
 
Registrierungsdatum: Oct 2006
Beiträge: 153
Re: c socket ip

Nein es gibt keine falschen IPs. Und genau diese meinte ich.
Aber es wundert mich das es so schwer ist die IP heraus zu finden.

Der Router packt die ip doch mit in den Header der Packete, die er versendet.
Ich könnte mir doch einfach selbst etwas schicken und dann den Header auslesen.
Aber ich glaube den Header muß ich erst selbst zusammen bauen, stimmts?
Das macht der Router nicht für mich oder?

Edit:
ok, hab gerade noch mal den TCP Header überflogen, steht natürlich keine Ip drin.
Das würde ja bedeuten das ich ganz leicht anonyme Pakete verschicken kann, oder?
Alt 16. 05. 2008, 00:22 4pueblo is offline Mit Zitat antworten #5
HelloWorld
Mitglied
 
Benutzerbild von HelloWorld
 
Registrierungsdatum: Apr 2003
Beiträge: 4.078
Re: c socket ip

Nein, das kann nicht funktionieren. Wenn Du Datenpakete an einen Rechner im Internet sendet, dann ersetzt der Router die Absender-IP-Adresse durch die IP-Adresse auf dem mit dem Internet verbundenen Interface. Wenn der Router Datenpakete aus dem Internet empfängt, wird die Empfängeradresse durch Deine LAN-interne Adresse ersetzt. Für Deinen Rechner ist der ganze Vorgang völlig transparent.

//edit: Natürlich stehen im TCP-Header keine IP-Adressen, da das Internetprotokoll unabhängig von TCP ist. Statt mit dem heute üblichen IPv4 kann man die Vermittlungsschicht z. B. auch mittels IPv6 realisieren. Und natürlich kannst Du auch die Absenderadresse von Paketen manipulieren, aber wozu soll das gut sein? Die Antwort kommt dann ja nicht bei Dir an...
Alt 16. 05. 2008, 00:28 HelloWorld is offline Mit Zitat antworten #6
4pueblo
Mitglied
(Threadstarter)
 
Registrierungsdatum: Oct 2006
Beiträge: 153
Re: c socket ip

Ok ich danke dir.
Alt 16. 05. 2008, 00:31 4pueblo is offline Mit Zitat antworten #7
sumisumi
\o/
 
Benutzerbild von sumisumi
 
Registrierungsdatum: Jan 2008
Beiträge: 956
Re: c socket ip

http://checkip.dyndns.org/
http request und dann paar string operationen

zumindest hab ichs mal so gemacht als ich die ip brauchte
Alt 16. 05. 2008, 00:35 sumisumi is online now Mit Zitat antworten #8
4pueblo
Mitglied
(Threadstarter)
 
Registrierungsdatum: Oct 2006
Beiträge: 153
Re: c socket ip

Hey danke, den Lösungsansatz hatte ich auch schon gelesen, aber den finde ich nicht so schön.
Aber zumindest besser als gar keine Lösung.
Alt 16. 05. 2008, 00:47 4pueblo is offline Mit Zitat antworten #9
StarShaper Spender
Cowboy-Programmierer
 
Benutzerbild von StarShaper
 
Registrierungsdatum: Dec 2004
Beiträge: 1.670
Re: c socket ip

Zitat:
Zitat von 4pueblo
ok, ich dachte sie steht auch im Socket oder so.

Im Socket kann auch nichts stehen, weil ein Socket ein Endpunkt einer bi-direktionalen Software-Schnittstelle zur Interprozess- (IPC) oder Netzwerk-Kommunikation zwischen zwei Programmen ist.

Zitat:
Zitat von 4pueblo
wo zum Henker steht meine eigene IP

Ich fürchte hier fehlt es an grundlegenden Kenntnissen zum Internet-Protokoll und zur Netzwerkkommunikation. Eine IP-Adresse kann auch nicht Bestandteil des TCP-Headers sein, weil das TCP zur Transportschicht gehört. Das TCP-Protokoll befindet sich ausschließlich in den Nutzdaten des IP-Pakets – eine Schicht weiter oben im OSI-Modell.

Die eigene IP-Adresse nach außen lässt sich im genannten Fall durch eine externe Quelle verifizieren. Dazu muss die Adresse in den Payload des UDP oder TCP-Datenpaketes gepackt werden.

cu
Alt 16. 05. 2008, 01:31 StarShaper is offline Mit Zitat antworten #10
fLeXf1T
Mitglied
 
Registrierungsdatum: Oct 2006
Beiträge: 44
Re: c socket ip

- du connectest zu http://checkip.dyndns.org/
- loggst den buffer
- mit "find" bis Current IP Address: ( find ist leider cpp, denk ich )
- dann mit "find" nach </body>
- löschst mit "erase" von 0,find & das am ende genau so ( erase vom 2. find bis .size(); )

zum schluss hast du nen string / char mit deiner ip

hoffe das hilft dir.
Alt 16. 05. 2008, 17:19 fLeXf1T is offline Mit Zitat antworten #11
Themen-Optionen Antwort


Themen-Optionen

Gehe zu



Alle Zeitangaben in UTC +1. Es ist jetzt 16:53 Uhr.
Angetrieben von vBulletin
Copyright ©2000 - 2006, Jelsoft Enterprises Ltd.
narcissism.gullisys.net

Anmelden

Benutzername
Kennwort
© Copyright 2008 gulli.com home | regeln | sitemap | kontakt | impressum | partner | downloads | disclaimer |
Message Boards and Forums Directory