IPアドレスを変更するプログラム
/* ** IPアドレスを変更するプログラム in C++言語 Ver0.01α ** Written by Straus Ashley ** 2010 / 10 / 23 ** ☆ゴリ押しだが、シンプルなIP変更方法だぉ☆ ** ** 根本的な機能はWindowsのコマンドプロンプトの機能。 ** 「netsh」というコマンドを利用している。 ** 「netsh interface ip」というコマンドでipの設定をする。 ** 効果としては、手動でIPアドレスを設定したのと同じ効果を得る。 ** ** XPの場合 ** netsh interface ip set address 対象アダプタ static IPアドレス サブネット・マスク デフォルト・ゲートウエイ none ** netsh interface ip set dns 対象アダプタ static IPアドレス PrimaryかSecondary ** という引数であり、管理者であれば実行に制限は特にないため(管理者権限は要る UACはない)、 ** #include <stdlib.h>でインクルードし、system関数を使いコマンドを実行する。 ** ** 例) 無線LANのIPアドレス等を次のように設定したい場合 ** IPAddress : 192.168.1.21 ** Subnet Mask : 255.255.255.0 ** Default Gateway : 192.168.1.1 ** ** system("netsh interface ip set address \"ワイヤレス ネットワーク接続\" static 192.168.1.21 255.255.255.0 192.168.1.1 none"); ** ** 例) 有線LANのIPアドレス等を次のように設定したい場合 ** IPAddress : 192.168.1.21 ** Subnet Mask : 255.255.255.0 ** Default Gateway : 192.168.1.1 ** ** system("netsh interface ip set address \"ローカル エリア接続\" static 192.168.1.21 255.255.255.0 192.168.1.1 none"); ** ** 例) 無線LANのDNSのアドレスを次のように設定したい場合 ** Primary : 192.168.1.1 ** secondary : NULL ** ** system("netsh interface ip set dns \"ワイヤレス ネットワーク接続\" static 192.168.1.1 primary"); ** ** Vistaの場合 ** コマンドが少し違うようだ ** IPを設定する場合noneを消す必要がある。 ** VistaはUACにより管理者権限を要求されるため、一般ユーザはsystem関数でコマンドを実行しても権限が無いと言われる。 ** しかしsystem関数では権限昇格を入力できないため、スルーされる。 ** ビルドしたプログラムを右クリックして、「管理者として実行」とすればよいが、ビルドの度にするのは面倒であると思われる。 ** 従ってrunasを指定したWin32APIを用いて、その場で管理者権限を昇格できるようにする。 ** 一時的に権限昇格するため、まだセキュリティ上よい(?)。 ** ShellExecuteExの実行を決める構造体に上述の設定を施し、実行する。 ** 余談であるが、コンソールが追加で表示されるのを防ぐために、info.nShow = SW_HIDE;を指定したが、SW_SHOWで表示可能。 ** 実行後UACでパスワードを入力し、管理者として実行することができる。 ** ** 最後に。。。 ** 1.本プログラムではエラーチェックをしていません。 ** 2.好きに改造してOK。 ** 3.壊れても知りません。 ** 4.IP変更するプログラム創るのに、調べ始めてから3時間もかかったアル。 ** 5.後は・・・任せた orz */ #include <stdlib.h> #include <windows.h> int main(void) { //Vista用 SHELLEXECUTEINFO info; ZeroMemory(&info, sizeof(info)); info.cbSize = sizeof(info); info.fMask = SEE_MASK_FLAG_NO_UI; info.lpVerb = L"runas"; info.lpFile = L"netsh"; info.lpParameters = L"interface ip set address \"ワイヤレス ネットワーク接続\" static 192.168.1.24 255.255.255.0 192.168.1.1"; info.nShow = SW_HIDE; ShellExecuteEx(&info); //XP用 //設定するコマンド //IP //system("netsh interface ip set address \"ワイヤレス ネットワーク接続\" static 192.168.1.21 255.255.255.0 192.168.1.1 none"); //DNS //system("netsh interface ip set dns \"ワイヤレス ネットワーク接続\" static 192.168.1.1 primary"); //元に戻すコマンド //IP //system("netsh interface ip set address \"ワイヤレス ネットワーク接続\" dhcp"); //DNS //system("netsh interface ip set dns \"ワイヤレス ネットワーク接続\" dhcp"); return 0; }