2010-05-18 21 views
12

में वाईफ़ाई पर यातायात को निर्देशित कर रहा है, मैं .NET 2 का उपयोग कर सी # में सॉफ़्टवेयर का एक टुकड़ा लिख ​​रहा हूं, जो यह पता लगाता है कि विंडोज 0 पर सक्रिय ईथरनेट कनेक्शन है या नहीं।यह पता लगाने के लिए कि क्या विंडोज सी #

यह महत्वपूर्ण है कि यह जानता है कि यह वाईफाई की बजाय ईथरनेट है क्योंकि कार्यक्रम वेब क्लाइंट के साथ डेटा भेजना वाईफाई या ईथरनेट पर जा रहा है या नहीं, इस पर निर्भर करता है।

मैंने System.Net.NetworkInformation.NetworkInterfaceType का उपयोग करने का प्रयास किया है लेकिन ऐसा लगता है कि यह कई वाईफ़ाई कार्डों के लिए 'ईथरनेट' की रिपोर्ट करता है।

किसी भी सुझाव की बहुत सराहना की जाएगी।

उत्तर

5
NetworkInterface.NetworkInterfaceType संपत्ति के बारे में इस MSDN page के अनुसार

,

यह गुण केवल के एक सबसेट रिटर्न संभावित मान NetworkInterfaceType गणन में परिभाषित किया।

ईथरनेट एफडीडीआई लूपबैक पीपीपी स्लिप Tokenring अज्ञात

तो निर्धारणात्मक आप एसओएल हो सकता है: संभावित मान निम्न शामिल हैं।

हालांकि, आप यह निर्धारित करने के लिए उपलब्ध नेटवर्क कनेक्शन पर कुछ ह्युरिस्टिक्स करने में सक्षम हो सकते हैं कि वे वाईफ़ाई या केबल हैं या नहीं। इनमें कई पुनरावृत्तियों पर पिंग प्रतिक्रिया/विलंबता समय शामिल हो सकते हैं, आदि

इसके अलावा, एडाप्टर की गति संकेत के रूप में उपयोग की जा सकती है। मेरे वाईफाई एडाप्टर के लिए गति हमेशा "54000000" (उदा। 54 एमबीएस) के रूप में दिखाया जाता है। चूंकि सामान्य वाईफाई गति का एक सेट है, यह सहायक हो सकता है।

शायद निम्नलिखित कोड आरंभ हो सकता है:

using System; 
using System.Net.NetworkInformation; 
using System.Net; 

namespace ConsoleApplication7 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); 
      Ping pingObj = new Ping(); 

      for (int i = 0; i < adapters.Length; i++) 
      { 
       Console.WriteLine("Network adapter: {0}", adapters[i].Name); 
       Console.WriteLine(" Status:   {0}", adapters[i].OperationalStatus.ToString()); 
       Console.WriteLine(" Interface:   {0}", adapters[i].NetworkInterfaceType.ToString()); 
       Console.WriteLine(" Description:  {0}", adapters[i].Description); 
       Console.WriteLine(" ID:    {0}", adapters[i].Id); 
       Console.WriteLine(" Speed:    {0}", adapters[i].Speed); 
       Console.WriteLine(" SupportsMulticast: {0}", adapters[i].SupportsMulticast); 
       Console.WriteLine(" IsReceiveOnly:  {0}", adapters[i].IsReceiveOnly); 
       Console.WriteLine(" MAC:    {0}", adapters[i].GetPhysicalAddress().ToString()); 
       if (adapters[i].NetworkInterfaceType != NetworkInterfaceType.Loopback) 
       { 
        IPInterfaceProperties IPIP = adapters[i].GetIPProperties(); 
        if (IPIP != null) 
        { 
         // First ensure that a gateway is reachable: 
         bool bGateWayReachable = false; 
         foreach (GatewayIPAddressInformation gw in IPIP.GatewayAddresses) 
         { 
          Console.WriteLine(" Gateway:  {0} - ", gw.Address.ToString()); 

          // TODO: Do this many times to establish an average: 
          PingReply pr = pingObj.Send(gw.Address, 2000); 

          if (pr.Status == IPStatus.Success) 
          { 
           Console.WriteLine(" reachable ({0}ms)", pr.RoundtripTime); 
           bGateWayReachable = true; 
           break; 
          } 
          else 
           Console.WriteLine(" NOT reachable"); 
         } 
         // Next, see if any DNS server is available. These are most likely to be off-site and more highly available. 
         if (bGateWayReachable == true) 
         { 
          foreach (IPAddress ipDNS in IPIP.DnsAddresses) 
          { 
           Console.WriteLine(" DNS:   {0} - ", ipDNS.ToString()); 
           PingReply pr = pingObj.Send(ipDNS, 5000); // was 2000, increased for Cor in UK office 
           if (pr.Status == IPStatus.Success) 
           { 
            Console.WriteLine(" reachable ({0}ms)", pr.RoundtripTime); 
            Console.WriteLine(" --- SUCCESS ---"); 
            break; 
           } 
           else 
            Console.WriteLine(" NOT reachable"); 
          } 
         } 
        } // if (IPIP != null) 
       } 
      } // foreach (NetworkInterface n in adapters) 

      Console.ReadLine(); 
     } 
    } 
} 
संबंधित मुद्दे