द्वारा अपना डायनामिक आईपी पता बदलें मेरे पास एक गतिशील आईपी पता है, वास्तव में मैं इसे अपने राउटर पेज (http://192.168.1.1) से रिलीज पर क्लिक करके बदल सकता हूं और फिर नवीनीकृत कर सकता हूं।सी ++
मैं http://192.168.1.1 पृष्ठ पर कर्ल द्वारा http अनुरोध कर सकता था, लेकिन यह केवल मेरे कंप्यूटर पर समस्या को हल करता है जो राउटर का उपयोग करता है।
तो मुझे यह जानने में दिलचस्पी है कि राउटर पेज (1 9 2.168.1.1) से गुज़रने के बिना सी ++ द्वारा अपना आईपी अपडेट करने का कोई तरीका है या नहीं।
मैंने सकारात्मक परिणाम के बिना कमांड लाइन से भी कोशिश की है। कोड मैं कोशिश की है है निम्नलिखित:
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include "stdafx.h"
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib, "iphlpapi.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
// Before calling IpReleaseAddress and IpRenewAddress we use
// GetInterfaceInfo to retrieve a handle to the adapter
void __cdecl main()
{
ULONG ulOutBufLen = 0;
DWORD dwRetVal = 0;
PIP_INTERFACE_INFO pInfo;
pInfo = (IP_INTERFACE_INFO *)MALLOC(sizeof(IP_INTERFACE_INFO));
// Make an initial call to GetInterfaceInfo to get
// the necessary size into the ulOutBufLen variable
if (GetInterfaceInfo(pInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) {
FREE(pInfo);
pInfo = (IP_INTERFACE_INFO *)MALLOC(ulOutBufLen);
}
// Make a second call to GetInterfaceInfo to get the
// actual data we want
if ((dwRetVal = GetInterfaceInfo(pInfo, &ulOutBufLen)) == NO_ERROR) {
printf("\tAdapter Name: %ws\n", pInfo->Adapter[0].Name);
printf("\tAdapter Index: %ld\n", pInfo->Adapter[0].Index);
printf("\tNum Adapters: %ld\n", pInfo->NumAdapters);
}
else if (dwRetVal == ERROR_NO_DATA) {
printf("There are no network adapters with IPv4 enabled on the local system\n");
return;
}
else {
LPVOID lpMsgBuf;
printf("GetInterfaceInfo failed.\n");
if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwRetVal,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR)&lpMsgBuf,
0,
NULL)) {
printf("\tError: %s", lpMsgBuf);
}
LocalFree(lpMsgBuf);
return;
}
// Call IpReleaseAddress and IpRenewAddress to release and renew
// the IP address on the first network adapter returned
// by the call to GetInterfaceInfo.
if ((dwRetVal = IpReleaseAddress(&pInfo->Adapter[0])) == NO_ERROR) {
printf("IP release succeeded.\n");
}
else {
printf("IP release failed: %ld\n", dwRetVal);
}
if ((dwRetVal = IpRenewAddress(&pInfo->Adapter[0])) == NO_ERROR) {
printf("IP renew succeeded.\n");
}
else {
printf("IP renew failed: %ld\n", dwRetVal);
}
// Free memory for IP_INTERFACE_INFO
if (pInfo != NULL) {
FREE(pInfo);
}
std::cout << ("\n Processo terminato\n");
std::system("PAUSE");
return;
}
मैंने DHCP सर्वर सक्षम तिनका इन मूल्यों: डीएचसीपी सेवा राज्य डीएचसीपी राज्य
ipconfig /release
ipconfig /renew
मैं इस कोड की कोशिश की है : सक्षम आईपी iniziale डीएचसीपी: 192.168.1.2 आईपी समापन समारोह डीएचसीपी (Riservato प्रति uso आंतरिक): 192.168.1.254
मैं Windows XP और Windows 7 pl पर अपने कार्यक्रम चलाने की जरूरत है atform।
धन्यवाद के लिए आपकी मदद की
मुझे लगता है कि आपका राउटर एक डीएचसीपी सर्वर चलाता है। इस मामले में आप एक 'DHCPRELEASE' पैकेट भेज सकते हैं और एक नया आईपी पता का अनुरोध कर सकते हैं। – Rocki
मुझे लगता है कि मेरे राउटर को एक डीएचसीपी सर्वर मिला है, वास्तव में मैं राउटर पेज द्वारा अपना आईपी बदल सकता हूं। क्या सी ++ का उपयोग करके 'DHCPRELEASE' भेजने का कोई तरीका है? – Carme
यदि आप बस अपने नेटवर्क इंटरफ़ेस पर आईपी बदलना चाहते हैं, तो इस http://stackoverflow.com/questions/1070351/getadaptersinfo-and-getadaptersaddressess-bufferlength-param को पढ़ने से शुरू करें और एमएसडीएन https://msdn.microsoft पर आगे बढ़ें। कॉम/आरयू-आरयू/लाइब्रेरी/विंडोज/डेस्कटॉप/aa366028% 28v = vs.85% 29.aspx और https://msdn.microsoft।कॉम/आरयू-आरयू/लाइब्रेरी/विंडोज़/डेस्कटॉप/aa366309% 28v = बनाम.85% 29.aspx – user2807083