GetIp
-
Ich hab mal 2 Fragen:
1. Gibt es eine Funktion wie "GetIp"
Ich will in dem Programm die IP meines PCs ermitteln.2. Gibt es auch etwas wie "SetIp"
Um die IP meines PCs zu ändern.Kann mir jemand helfen???
Schonmal danke.
-
es gibt das Program ipconfig....
cYa
DjR
-
Klasse CGetIP:
Datei CGetIP.h:
#ifndef _CGETIP_H_ #define _CGETIP_H_ #include <wininet.h> class CGetIP { public: CGetIP(void); ~CGetIP(void); bool GetLocalIP(TCHAR*); bool GetInternetIP(TCHAR*); private: bool ConnectToFile(void); void RecieveFile(void); void CloseConnection(void); void RecievedFileToIP(TCHAR*); TCHAR *m_pszFileName; HINTERNET m_hINet; HINTERNET m_hConnection; HINTERNET m_hData; TCHAR *m_pszBuffer; WSADATA m_wsaData; struct hostent *m_hostent; }; #endif
Datei CGetIP.cpp:
#define NUM_ELEMENTS(x) (sizeof((x)) / sizeof((x)[0])) #define MAX_LENGTH 1024 #include <windows.h> #include <wininet.h> #include "CGetIP.h" CGetIP::CGetIP(void) { WSAStartup(MAKEWORD(1, 1), &m_wsaData); m_pszFileName = "checkip.dyndns.org"; m_hINet = 0; m_hConnection = 0; m_hData = 0; m_pszBuffer = 0; } CGetIP::~CGetIP(void) { CloseConnection(); WSACleanup(); } bool CGetIP::GetLocalIP(TCHAR *pszIP) { UCHAR ucAddress[4]; TCHAR szHostName[MAX_PATH]; int i; if(gethostname(szHostName, MAX_PATH) == SOCKET_ERROR) return false; m_hostent = gethostbyname(szHostName); if(!m_hostent) return false; for(i = 0; (m_hostent->h_addr_list[i]); i++) { ucAddress[0] = m_hostent->h_addr_list[i][0]; ucAddress[1] = m_hostent->h_addr_list[i][1]; ucAddress[2] = m_hostent->h_addr_list[i][2]; ucAddress[3] = m_hostent->h_addr_list[i][3]; wsprintf(pszIP, "%d.%d.%d.%d", ucAddress[0], ucAddress[1], ucAddress[2], ucAddress[3]); } return true; } bool CGetIP::GetInternetIP(TCHAR *pszIP) { if(!ConnectToFile()) { pszIP[0] = 0; return 0; } RecieveFile(); CloseConnection(); RecievedFileToIP(pszIP); free(m_pszBuffer); return true; } bool CGetIP::ConnectToFile(void) { m_hINet = InternetOpen("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(!m_hINet) return 0; m_hConnection = InternetConnect(m_hINet, m_pszFileName, 80, 0, 0, INTERNET_SERVICE_HTTP, NULL, 0); if(!m_hConnection) { CloseConnection(); return 0; } m_hData = HttpOpenRequest(m_hConnection, "GET", 0, 0, 0, 0, INTERNET_FLAG_KEEP_CONNECTION, 0); if(!m_hData) { CloseConnection(); return 0; } HttpSendRequest(m_hData, 0, 0, 0, 0); return true; } void CGetIP::RecieveFile(void) { DWORD dwRead; TCHAR szBuffer[256]; if(m_pszBuffer) free(m_pszBuffer); m_pszBuffer = (TCHAR*)calloc(MAX_LENGTH * sizeof(TCHAR)); while(InternetReadFile(m_hData, szBuffer, 255, &dwRead)) { if(!dwRead) return; szBuffer[dwRead] = 0; strcat(m_pszBuffer, szBuffer); } } void CGetIP::RecievedFileToIP(TCHAR *pszIP) { TCHAR szAddress[] = "Address: "; TCHAR *p; p = strstr(m_pszBuffer, szAddress); if(!p) return; p += lstrlen(szAddress) * sizeof(TCHAR); *strchr(p, '\n') = 0; lstrcpy(pszIP, p); } void CGetIP::CloseConnection(void) { if(m_hINet) InternetCloseHandle(m_hINet); if(m_hConnection) InternetCloseHandle(m_hConnection); if(m_hData) InternetCloseHandle(m_hData); m_hINet = 0; m_hConnection = 0; m_hData = 0; }
GetLocalIP liefert die IP des Rechners, GetInternetIP die IP, mit der du im Internet bist, indem nach checkip.dyndns.org verbunden wird (THX to geeky).
Zu 2.) IPs. die dir mal gegeben wurden, kannst du nicht ändern.
[ Dieser Beitrag wurde am 03.09.2002 um 17:11 Uhr von Black Shadow editiert. ]
-
Latürnich kann man die IP-Adressen ändern, nicht umsonst gibt's bei Modemeinwahl öfter mal 'ne neue. Und auch bei Netzwerkkarten ist das bei halbwegs modernen Betriebssystemen (Linux, Win > 9x) kein Problem, auch nicht im laufenden Betrieb (ifconfig, TCP/IP-Eigenschaften).
Wie man das programmatisch macht würde mich allerdings auch interessieren.
-
Beim Modem bekommst Du eine IP dynamisch zugewiesen. Das ist was anderes, wenn Du keinen DHCP benutzt..
bei einer dynamischen IP kannst du eine neue anfordern, aber nicht beeinflussen, wie diese aussieht..
-
Die IP-Adressen werden von den meisten Providern dynamisch vergeben.
Sonst könnte man sich sehr bequem eine einmalige IP-Adresse im
Internet sichern und Server spielen
Klar, dass die meisten Provider das so nicht wollen.
Jedenfalls nicht zu dem Preis...Diese IP kann man natürlich auch nicht selber ändern.
Darauf hat man keinen Einfluss.
Eine IP selber im Netzwerk zu ändern wäre auch nicht fein.
Woher sollen die anderen Clients das auch wissen? Kristallkugeln?
-
Die Frage war nicht, ob das fein ist, sondern ob das geht. Und es geht.
Ob das Netzwerk hinterher noch funktioniert steht auf einem anderen Blatt.
-
wie benutze ich denn jetzt GetInternetIP ?
wenn ich die funktion normal aufrufe sagt er sie sei undefiniert... bzw. ich solle -> oder . verwenden.