• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Lokale IP-Adresse

A

Anonymous

Gast
Hallo alle miteinander,

ich stehe bei meinem derzeitigen Projekt vor einem Problem:
Ich muss die IP-Adresse des ausführenden Rechners herausfinden, ohne dass ich vorher eine Verbindung über ein Netzwerk aufgenommen habe.

Kann mir jemand Tips geben, ob es dafür Funktionen gibt oder wie es funktionieren könnte.

Danke im Voraus und Ciao,

Prof. MAAD
 

Bartlin

Member
IP-Adresse des ausführenden Rechners
*am Kopf kratz*
Wie jetzt? Also ein Rechner führt etwas aus und ein anderer Rechner bekommt das Ergebnis - jedoch ohne dass er weiß, dass da noch ein Rechner ist, der ihm dieses Ergebnisz erzeugt???
*verwirrt bin*
 
OP
A

Anonymous

Gast
Folgende Situation:
Ich habe ein Programm. Dieses muss die IP des Rechners herausfinden, auf dem es ausgeführt wird (also die lokale IP).

Der Hinweis auf die Netzwerkverbindung war so gemeint, dass es sehr einfach ist, die eigene IP herauszufinden, wenn das Programm erst einmal eine Netzwerk-Verbindung aufgenommen hat.

Danke im Voraus und Ciao,

Prof. MAAD
 

Grothesk

Ultimate Guru
Wenn der Rechner mit DHCP angebunden ist dann hat der keine IP wenn er nicht im Netz hängt, afaik.
Wenn statische IP, dann kannst du das mit ifconfig wohl auslesen.

[Edit:] typo
 

Link

Newbie
ich wüsste nicht wieso es einfacher ist seine IP herauszubekommen wenn man eine LAN-Verbindung hat :roll:
Jenachdem welche Distri du nutzt und wie dein Programm arbeitet kannst du mit ifconfig, ip address show oder einfach den Eintrag in der entsprechenden Datei nutzen.

Und wie gesagt! Voraussetzung ist das du ne statische IP nutzt! KEIN dhcp!!!
 
OP
A

Anonymous

Gast
Danke erstmal, aber scheinbar muss ich die Situation noch mal klar stellen:
Ich habe ein Programm. Dieses wird auf einem Rechner ausgeführt.
Es kann davon ausgegangen werden, dass der Rechner eine aktive Netzwerk-Verbindung hat, da es sich um ein Server-Programm handelt.

Nun muss das Programm die IP des Rechners ermitteln, auf dem es ausgeführt wird.
Soweit das zu lösende Problem.

Nun noch einmal zu dem Hinweis bezüglich der Vereinfachung des Ganzen, wenn dass Programm bereits eine Netzwerkverbindung aufgenommen hat:
Ich benutze das Qt-Framework (www.trolltech.com). Dieses stellt mir unter anderem eine Klasse für TCP-Sockets bereit (QTcpSocket).
Diese bietet eine Funktion, die, im verbundenen Zustand des Sockets, die eigene IP liefert. Somit ist es mir sehr einfach, die IP herauszufinden, wenn ich erst einmal ein aktives TCP-Socket habe.
Dies ist jedoch nicht der Fall, da die eigene IP schon vorher ermittelt werden muss!

So, ich hoffe jetzt ist die Situation klar.

Danke im Voraus und Ciao,

Prof. MAAD
 

framp

Moderator
Teammitglied
Code:
AWK=`which awk`
IFCONFIG="which ifconfig"
SED=`which sed`
NIC="dsl0" # adapt nic
IP="`$IFCONFIG $NIC 2>/dev/null|$AWK '/inet addr:/ {print $2}'|$SED 's/addr://'`"
Irgendwo hier im Forum habe ich noch eine elegantere Loesung gefunden...nur weiss ich nciht mehr wo -> suchen
 
OP
A

Anonymous

Gast
Danke erstmal,
aber das richtige war irgendwie noch nicht dabei.

Ich brauche keine Programme, die meine IP ausspucken (das krieg ich auch noch "grade so" hin).

Mein Programm ist in C++ geschrieben, ich bräuchte also ein C++-Code-Fragment, das die eigene IP ermittelt.

So, ich hoffe, jetzt ist wirklich alles klar.

Danke im Voraus und Ciao,

Prof. MAAD
 

Link

Newbie
Hättest du das mal gleich gesagt ;-) Dann wäre vieles einfacher gewesen und vor allem hätte dann evtl. jemand mit c++ kenntnissen hier antworten können...
 

framp

Moderator
Teammitglied
:shock: :shock: :shock:
Sorry - ein Titel sollte aussagekraeftig sein - und der Post noch mehr. Dann musst Du Dich nicht wundern ueber keine oder nicht helfende Antworten.

Mein Tip: Aendere den Titel in 'Wie die IP des lokalen Rechners mit C++herausfinden' :wink:
 

endor

Member
ich kann leider auch nicht c++ programmieren. vielleicht hilft dir das:
http://www.chip.de/c1_forum/thread.html?bwthreadid=422380
es lies sich erstmal so als ob es nur windowsbasierend waere, aber vielleicht klappt das ja fuer linux aehnlich.
 

TeXpert

Guru
ist zwar C aber ich hab mal in meinen Snippets gekramt...

Code:
/** 
  * hack to grab interface information 
  */

#include <sys/socket.h> 
#include <net/if.h> 
#include <netinet/in.h> 
#include <stdio.h> 
#include <stdlib.h> 


#define SIOCGIFCONF     0x8912          /* get iface list               */

int main(int argc, char *argv[]) { 
  int numreqs = 30, sd, n, tick, found=0;
  struct ifconf ifc; 
  struct ifreq *ifr; 
  struct in_addr *ia;

  sd=socket(AF_INET, SOCK_STREAM, 0); 
  ifc.ifc_buf = NULL; 
  ifc.ifc_len = sizeof(struct ifreq) * numreqs; 
  ifc.ifc_buf = realloc(ifc.ifc_buf, ifc.ifc_len); 
  
  if (ioctl(sd, SIOCGIFCONF, &ifc) < 0) { 
    exit(1);
  } 
  
  ifr = ifc.ifc_req; 
  
  for (n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq)) { 
    ia= (struct in_addr *)((ifr->ifr_ifru.ifru_addr.sa_data)+2); 

    fprintf(stdout, "%6s %-15s\n", ifr->ifr_ifrn.ifrn_name, inet_ntoa(*ia));
   
    ifr++; 
  }

  free(ifc.ifc_buf);
  return 0;
}
 

TeXpert

Guru
jengelh schrieb:
Der moderne Weg waere ueber netlink... :!:

das natürlich phantastisch Dokumentiert ist ;) *grins* hast Du einen guten Pointer auf Doku, die != Kernel-Source-Code ist?

im Prinzip stimme ich Dir zu, aber das ist irgendwie nicht in meinem Sinne Dokumentiert ;)
 
Oben