こんにちわlisです!
C++/CLIでIPアドレスを変更する方法です!
前回の管理者権限でコマンドプロンプトを実行する方法が関連しています。
IPアドレスを変更する方法の概要
どうやらC++/CLIで何かしらのAPIを使ってIPアドレスを変更というのは難しそうでした。
なので、コマンドプロンプトを介して変更してもらうことにしました。
MACアドレスからアダプタを取得
今回はMACアドレスからIPアドレスを変更する対象のアダプタを検索することとしました。
MACアドレスであれば、アダプタに対して一意なので。
入力されたMACアドレスを加工
テキストボックス「textBoxMac」に、よくあるMACアドレスの形式で入力させるものとします。
XX:XX:XX:XX:XX:XX
これを下記のように加工します。
- 「:」を消す
- 英字を大文字にする
using namespace System::Text::RegularExpressions; String^ GetMacAddress() { // テキストボックスからMACアドレスを取得 String^ orgMacAddress = textBoxMac->Text; if (orgMacAddress->Length < 1) { return; } // 「:」を削除 Regex^ regex = gcnew Regex(":"); String^ macAddress = regex->Replace(orgMacAddress, ""); // 英字を大文字に変換 macAddress = macAddress->ToUpper(); return macAddress; }
アダプタ名を取得
加工したMACアドレスを引数で受け取り、それを元にアダプタ名を取得します。
String^ ShowAdapterInfo(String^ macAddress) { // NICの情報を取得 cli::array<NetworkInterface^> ^nics = NetworkInterface::GetAllNetworkInterfaces(); if (nics->Length < 1) { return ""; // Error } // NICを検索 for each (NetworkInterface^ adapter in nics) { // 対象のMACアドレスをサーチ String^ mac = adapter->GetPhysicalAddress()->ToString(); if (mac != macAddress) { continue; } // アダプタ名を返す return adapter->Name; } return ""; // Error }
IPアドレスを変更
取得したアダプタ名を使ってIPアドレスを変更します。
void ChangeIPAddress(String^ adapterName, String^ ipAddress, String^ subnetMask) { Process^ p = gcnew Process(); p->StartInfo->Verb = "RunAs"; p->StartInfo->FileName = "C:\\Windows\\system32\\cmd.exe"; p->StartInfo->Arguments = "/c netsh interface ip set address name=\"" + adapterName + "\" source=static addr=" + ipAddress + " " + subnetMask;; p->Start(); }
参考
コチラを参考にしました。ありがとうございました!
あとがき
C++CLI IPアドレスを変更する方法でした!
IPを切替えてなにやらしなければいけない環境とかあれば、事前に簡単な変更アプリ作っておいて設定を自動化したりすると楽かもしれませんね!