私は動的IPアドレスを持っています。ルータページ(http://192.168.1.1)からリリースをクリックして更新することができます。私の動的IPアドレスをC++で変更してください
私はhttp:// http://192.168.1.1ページにcurlでhttpリクエストを作成できましたが、これはそのルータを使用しているコンピュータでのみ問題を解決します。
私はルータページ(192.168.1.1)を通過せずに私のIPをC++で更新する方法があるかどうか知りたいです。
私はまた、肯定的な結果なしでコマンドラインから試しました。私が試した コードは以下の通りです:
#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;
}
IましたDHCPサーバーの有効聖霊降臨祭の次の値: DHCPサービス状態 DHCP州立
ipconfig /release
ipconfig /renew
は、私もこのコードを試してみました:有効 IP iniziale DHCP:192.168.1.2 IPフィナーレDHCP(RiservatoあたりUSO INTERNO):192.168.1.254
私はWindows XPとWindows 7のPL上の私のプログラムを実行する必要がありますatform。
感謝のあなたの助けのために
あなたのルータはDHCPサーバを稼働していると思います。この場合、 'DHCPRELEASE'パケットを送り、新しいIPアドレスを要求することができます。 – Rocki
私のルーターはDHCPサーバーを持っていると思うのですが、私はルーターのページで私のIPを変更できます。 C++を使って 'DHCPRELEASE'を送る方法はありますか? – Carme
ネットワークインターフェイスでipを変更したい場合は、このhttp://stackoverflow.com/questions/1070351/getadaptersinfo-and-getadaptersaddressess-bufferlength-paramを読んでから、MSDN https://msdn.microsoftを開始してください。 com/ru-ru/library/windows/desktop/aa366028%28v = vs.85%29.aspxおよびhttps://msdn.microsoft。com/ru-ru/library/windows/desktop/aa366309%28v = vs.85%29.aspx – user2807083