Eigene IP auslesen
-
Hallo Leute,
kann mir jemand helfen ?
Ich möchte Die IP Adresse des Rechners auslesen, auf dem das Programm ausgeführt wird. Ich möchte diese in einen string schreiben um in einem File danach suchen zu können.
Unter der Dos Konsole geht das ja mit ipconfig /all
Wie bekomme ich das nun in den Source ??
Danke im voraus.
Gruß
andy_mann
-
Standard C++ kennt weder das Internet noch das IP.
Ich nehme an, du suchst Funktionen für Windows, nicht?
Dann gehörst du ins WinAPI Forum
-> verschoben
-
DWORD GetIpAddrTable(
PMIB_IPADDRTABLE pIpAddrTable, // buffer for mapping table
PULONG pdwSize, // size of buffer
BOOL bOrder // sort the table
);
-
ääähhhhhh...
vielen Dank für die schnelle Antwort.
Bin allerdings noch ziemlich neu in c++,
kannst Du mir eventuell noch sagen wie jetzt die Variablen heisen in dem die Werte stehen..
PULONG pdwSize
BOOL bOrderund welche include ich mit einbauen muß ??
Gruß
und Danke
andy_mann
-
http://www.c-plusplus.net/forum/viewtopic.php?t=39385
http://www.c-plusplus.net/forum/viewtopic.php?t=39386
-
Vielen Dank,
es scheint aber ein fehler darin zu sein,
ich finde Ihn aber nicht..
hier der source:#include <iostream> #define NUM_ELEMENTS(x) (sizeof((x)) / sizeof((x)[0])) // Für IP auslesen using namespace std; BOOL IP_auslesen(char* IP_ADRESSE) { struct hostent* h; WSADATA wsaData; UCHAR ucAddress[4]; CHAR szHostName[MAX_PATH]; int x; WSAStartup(MAKEWORD(1, 1), &wsaData); if(SOCKET_ERROR != gethostname(szHostName, NUM_ELEMENTS(szHostName))) { if(NULL != (h = gethostbyname(szHostName))) { for(x = 0; (h->h_addr_list[x]); x++) { ucAddress[0] = h->h_addr_list[x][0]; ucAddress[1] = h->h_addr_list[x][1]; ucAddress[2] = h->h_addr_list[x][2]; ucAddress[3] = h->h_addr_list[x][3]; wsprintf(IP_ADDRESSE, "%d.%d.%d.%d", ucAddress[0], ucAddress[1], ucAddress[2], ucAddress[3]); } } } WSACleanup(); return TRUE; } int main () { char IP_Adresse[4]; cout << IP_auslesen(IP_Adresse) << endl; return 0; }
Hier die meldung:
error C2146: syntax error : missing ';' before identifier 'IP_auslesen'Da gehört doch keins hin ??
Gruß
andy_mann
-
1. Dein Buffer (IP_Adresse) ist mit 4 etwas zu klein! -> IP_Adresse[16]
2. IP_auslesen gibt nicht die IP-Adresse zurück (die steht nach dem Aufruf in IP_Adress), sondern einen BOOLVersuch's mal so:
char IP_Adresse[16]; if(IP_auslesen(IP_Adresse)) { cout << IP_Adresse << endl; } else { cout << "IP-Adresse konnte nicht ermittelt werden!" << endl; }
Außerdem heißt dein Parameter in der Signatur IP_ADRESSE - für wsprintf verwendest du aber IP_ADDRESSE
-
Ich danke Dir,
das Problem ist bei mir nur, dass er beim test schon mekert.
ip_abfrage.cpp(11) : error C2146: syntax error : missing ';' before identifier 'IP_auslesen'
Ich finde den fehlenden ';' aber nirgends.
Und noch was, ich möchte eigentlich nur die IP Adresse des localen Rechners herausfinden. Und nicht die des Routers oder so.
Ich befinde mich in einem LAN.
Gruß und Danke
andy_mann
-
#include <windows.h> #include <winsock2.h> #include <stdio.h> BOOL IP_auslesen(char* IP_ADRESSE) { struct hostent* h; WSADATA wsaData; CHAR szHostName[MAX_PATH]; int x; WSAStartup(MAKEWORD(1, 1), &wsaData); if(SOCKET_ERROR != gethostname(szHostName, MAX_COMPUTERNAME_LENGTH + 1)) { if(NULL != (h = gethostbyname(szHostName))) for(x = 0; (h->h_addr_list[x]); x++) lstrcpy(IP_ADRESSE, inet_ntoa(*(in_addr*)h->h_addr_list[x])); } WSACleanup(); return TRUE; } int main () { char IP_Adresse[16]; IP_auslesen(IP_Adresse); printf(IP_Adresse); return 0; }
-
Das dumme ist, dass das doch nur die Netzwerk-IP ist...
-
Du musst windows.h einbinden
#include <windows.h>
und Ws2_32.lib linken
-
mmmhhhhh...
danke Dir,
jetzt bekomme ich noch mehr fehlermeldungen.
Und zwar auch in den bibliotheken:#include <windows.h>
#include <winsock2.h>
#include <stdio.h>Ich habe Visual c++ 6.0 installiert.
Fehlt mir da was ??Gruß
andy_mann
-
flenders schrieb:
Du musst windows.h einbinden
Was meinst du, warum ich den Code u.a. gepostet habe...?
-
WebFritzi schrieb:
Was meinst du, warum ich den Code u.a. gepostet habe...?
Ich war eben zu langsam - und als ich zu schreiben begonnen hatte, stand dein Post noch nicht da
@andy_mann: Hast du Ws2_32.lib gelinkt?!
-
ohhhhh..
das habe ich jetzt noch nie gemacht...
bislang habe ich nur immer die standart bibliotheken nehmen müssen.
#include <iostream> usw.
kannste mir nen kleinen tipp geben ??
Gruß und Danke
andy_mann
-
Falls du VC++ 6 verwendest: Projekt > Einstellungen > Linker > Objekt-/Bibliothek-Module
Da dann einfach hinten dranhängen
-
mmhhh..
habe Ws2_32.lib unter den Angaben die Du gennant hast eingefügt.
Trotzdem selbe Fehlermeldung.Gruß
andy_mann
-
welche?
-
hallo....
winsock.h pringt fehlermeldung.
mhhhh..
nur zur Info,
ich benütze als Projekt
Win32 Console Application
und als File
C++ Source FileDanke für Eure Gedult.
Gruß
andy_mann
-
Und wenn du winsock.h weglässt? und nochmal: was für Fehlermeldungen?