2012-08-23 2 views
1

J'ai un problème avec l'ensemble Ipv6 dans Windows.
Le code ci-dessous peut définir une adresse IPv4 mais je ne peux pas essayer de définir IPv6.
S'il vous plaît aidez-moi.Définir ipv6 pour Windows avec C#

ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
try 
{ 

    ManagementObjectCollection moc = mc.GetInstances(); 

    foreach (ManagementObject mo in moc) 
    { 
     // Make sure this is a IP enabled device. Not something like memory card or VM Ware 
     if ((bool)mo["IPEnabled"]) 
     { 
      if (mo["Caption"].Equals(nicName)) 
      { 
       ManagementBaseObject newIP = mo.GetMethodParameters("EnableStatic"); 
       ManagementBaseObject newGate = mo.GetMethodParameters("SetGateways"); 
       ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder"); 

       newGate["DefaultIPGateway"] = new string[] { Gateway }; 
       newGate["GatewayCostMetric"] = new int[] { 1 }; 

       newIP["IPAddress"] = IpAddresses.Split(','); 
       newIP["SubnetMask"] = new string[] { SubnetMask }; 

       newDNS["DNSServerSearchOrder"] = DnsSearchOrder.Split(','); 

       ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null); 
       ManagementBaseObject setGateways = mo.InvokeMethod("SetGateways", newGate, null); 
       ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null); 

       break; 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    string str = ex.Message; 

} 

Répondre

1

J'ai essayé aussi de définir une adresse IPv6 fixe via WMI, mais il ne semble pas fonctionner (l'adresse IPv4 fonctionne).
La seule façon dont j'ai trouvé cela est de démarrer netsh à partir du code, et de l'utiliser pour définir l'adresse IPv6 fixe (statique). Si quelqu'un a une solution plus élégante, je l'utiliserai volontiers. Pendant ce temps:

Utilisez la classe .NET System.Diagnostics.Process pour démarrer un processus netsh.

La référence de commande netsh, qui vous indique les paramètres que vous avez besoin, est here.

J'ai trouvé que je devais commencer un nouveau processus netsh pour chaque commande que j'ai envoyé.
Pour chaque processus netsh, j'ai créé un gestionnaire pour l'événement OutputDataReceived du processus, qui consignait les commentaires netsh.

+0

Oui, je pense que "Link Local IPv6" est assigné par adresse MAC, nous pouvons en ajouter plus mais ne pouvons pas le changer. –

+0

Avez-vous essayé d'utiliser P/Invoke pour la méthode IPHLPAPI.DLL SetUnicastIpAddressEntry? Je n'ai pas eu besoin de l'essayer, mais cela semble prometteur pour vos besoins. –