C# 無直接操作網路設定的 API,需透過 WMI Win32_NetworkAdapterConfiguration 管理類別實現 IP 釋放與續約。
using System;
using System.Collections.Generic;
using System.Management;
namespace NetworkTool {
class Program {
static void Main(string[] args) {
var allDevices = new Dictionary<string, ManagementObject>();
var descriptions = new List<string>();
// 取得啟用 IP 的網卡
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
foreach (ManagementObject obj in mc.GetInstances()) {
if ((bool)obj["IPEnabled"]) {
string desc = (string)obj["Description"];
allDevices[desc] = obj;
descriptions.Add(desc);
}
}
// 列出供選擇
for (int i = 0; i < descriptions.Count; i++)
Console.WriteLine($"{i}: {descriptions[i]}");
Console.Write("選擇網卡編號 (q 退出):");
string input = Console.ReadLine();
while (input != "q") {
if (int.TryParse(input, out int idx) && idx >= 0 && idx < descriptions.Count) {
Console.WriteLine("1: 釋放 IP 2: 續約 IP");
string opt = Console.ReadLine();
if (int.TryParse(opt, out int action)) {
ManagementObject nic = allDevices[descriptions[idx]];
int ret = (action == 1) ? ReleaseIP(nic) : RenewIP(nic);
if (ret < 2) Console.WriteLine(action == 1 ? "釋放成功" : "續約成功");
}
}
Console.Write("選擇網卡編號 (q 退出):");
input = Console.ReadLine();
}
}
static int RenewIP(ManagementObject obj) {
var outParams = obj.InvokeMethod("RenewDHCPLease", null, null);
return Convert.ToInt32(outParams["ReturnValue"]);
}
static int ReleaseIP(ManagementObject obj) {
var outParams = obj.InvokeMethod("ReleaseDHCPLease", null, null);
return Convert.ToInt32(outParams["ReturnValue"]);
}
}
}
System.Management.dll