lisz-works

プログラミングと興味を貴方に

C++CLI IPアドレスを変更する方法

【スポンサーリンク】

プログラムのソースコード

こんにちわlisです!

C++/CLIでIPアドレスを変更する方法です!

前回の管理者権限でコマンドプロンプトを実行する方法が関連しています。

www.lisz-works.com

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();
}

参考

コチラを参考にしました。ありがとうございました!

docs.microsoft.com

www.weblio.jp

oshiete.goo.ne.jp

docs.microsoft.com

あとがき

C++CLI IPアドレスを変更する方法でした!

IPを切替えてなにやらしなければいけない環境とかあれば、事前に簡単な変更アプリ作っておいて設定を自動化したりすると楽かもしれませんね!

www.lisz-works.com