C#列出所有物理网络适配器的方法

本文实例讲述了C#列出所有物理网络适配器的方法。分享给大家供大家参考。具体如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Text;
namespace RobvanderWoude
{
 class ListNICs
 {
  public static ArrayList nics = new ArrayList( );
  public static string computer = string.Empty;
  // Use global variables, so we only need to run the WMI queries once
  public static string nsrootwmi = computer + "root\\WMI";
  public static string nsrootcimv2 = computer + "root\\CIMV2";
  public static ManagementObjectSearcher searcher1 = new ManagementObjectSearcher( nsrootwmi, "SELECT * FROM MSNdis_PhysicalMediumType" );
  public static ManagementObjectCollection wmi1 = searcher1.Get( );
  public static ManagementObjectSearcher searcher2 = new ManagementObjectSearcher( nsrootcimv2, "SELECT * FROM Win32_NetworkAdapter" );
  public static ManagementObjectCollection wmi2 = searcher2.Get( );
  public static ManagementObjectSearcher searcher3 = new ManagementObjectSearcher( nsrootwmi, "SELECT * FROM MSNdis_LinkSpeed" );
  public static ManagementObjectCollection wmi3 = searcher3.Get( );
  static int Main( string[] args )
  {
   try
   {
    bool listBluetooth = true;
    bool listWired = true;
    bool listWireless = true;
    #region Command line parsing
    // Only 2 optional argument allowed: remote computer name and/or adapter type
    if ( args.Length > 2 )
    {
     return WriteError( "Invalid command line arguments" );
    }
    if ( args.Length > 0 )
    {
     foreach ( string arg in args )
     {
      // We'll display a 'friendly' message if help was requested
      if ( arg.StartsWith( "/" ) || arg.StartsWith( "-" ) )
      {
       switch ( arg.ToUpper( ) )
       {
        case "/?":
        case "-?":
         return WriteError( string.Empty );
        case "/B":
        case "/BLUETOOTH":
         if ( ( listBluetooth && listWired && listWireless ) == false )
         {
          return WriteError( "Select a single adapter type only, or omit type to select all" );
         }
         listWired = false;
         listWireless = false;
         break;
        case "/W":
        case "/WIRED":
         if ( ( listBluetooth && listWired && listWireless ) == false )
         {
          return WriteError( "Select a single adapter type only, or omit type to select all" );
         }
         listBluetooth = false;
         listWireless = false;
         break;
        case "/WL":
        case "/WIFI":
        case "/WIRELESS":
         if ( ( listBluetooth && listWired && listWireless ) == false )
         {
          return WriteError( "Select a single adapter type only, or omit type to select all" );
         }
         listBluetooth = false;
         listWired = false;
         break;
        default:
         return WriteError( "Invalid command line argument" );
       }
      }
      else
      {
       if ( !string.IsNullOrEmpty( computer ) )
       {
        return WriteError( "Do not specify more than one computer name" );
       }
       computer = "\\\\" + arg + "\\";
      }
     }
    }
    #endregion Command line parsing
    foreach ( ManagementObject queryObj1 in wmi1 )
    {
     if ( queryObj1["NdisPhysicalMediumType"].ToString( ) == "10" )
     {
      if ( listBluetooth )
      {
       AddAdapter( queryObj1["InstanceName"].ToString( ), "Bluetooth" );
      }
     }
     if ( queryObj1["NdisPhysicalMediumType"].ToString( ) == "0" )
     {
      if ( listWired )
      {
       AddAdapter( queryObj1["InstanceName"].ToString( ), "Wired" );
      }
     }
     if ( queryObj1["NdisPhysicalMediumType"].ToString( ) == "1" )
     {
      if ( listWireless )
      {
       AddAdapter( queryObj1["InstanceName"].ToString( ), "Wireless" );
      }
     }
    }
    nics.Sort( );
    foreach ( string nic in nics )
    {
     Console.WriteLine( nic );
    }
    return 0;
   }
   catch ( Exception e )
   {
    return WriteError( e );
   }
  }
  public static void AddAdapter( string name, string type )
  {
   foreach ( ManagementObject queryObj2 in wmi2 )
   {
    if ( ( queryObj2["Name"].ToString( ) == name ) && Convert.ToBoolean( queryObj2["PhysicalAdapter"] ) )
    {
     foreach ( ManagementObject queryObj3 in wmi3 )
     {
      if ( queryObj3["InstanceName"].ToString( ) == name )
      {
       nics.Add( String.Format( "{0,6}", Convert.ToInt32( queryObj3["NdisLinkSpeed"] ) / 10000 ) + " Mb/s\t" + String.Format( "{0,-11}", "[" + type + "]" ) + "\t" + name );
      }
     }
    }
   }
  }
  #region Error handling
  public static int WriteError( Exception e )
  {
   return WriteError( e == null ? null : e.Message );
  }
  public static int WriteError( string errorMessage )
  {
   if ( string.IsNullOrEmpty( errorMessage ) == false )
   {
    Console.Error.WriteLine( );
    Console.ForegroundColor = ConsoleColor.Red;
    Console.Error.Write( "ERROR: " );
    Console.ForegroundColor = ConsoleColor.White;
    Console.Error.WriteLine( errorMessage );
    Console.ResetColor( );
   }
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "ListNICs, Version 1.00" );
   Console.Error.WriteLine( "List physical network adapters on the specified computer" );
   Console.Error.WriteLine( );
   Console.Error.Write( "Usage: " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "LISTNICS" );
   Console.ResetColor( );
   Console.Error.Write( " [ computername ] [ " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/B" );
   Console.ResetColor( );
   Console.Error.Write( "luetooth | " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/W" );
   Console.ResetColor( );
   Console.Error.Write( "ired | " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/W" );
   Console.ResetColor( );
   Console.Error.Write( "ire" );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "L" );
   Console.ResetColor( );
   Console.Error.WriteLine( "ess ]" );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Where: \"computername\" is a remote computer name (default: this computer)" );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "  /B" );
   Console.ResetColor( );
   Console.Error.Write( "luetooth or " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/B" );
   Console.ResetColor( );
   Console.Error.WriteLine( " list Bluetooth adapters only (default: all)" );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "  /W" );
   Console.ResetColor( );
   Console.Error.Write( "ired  or " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/W" );
   Console.ResetColor( );
   Console.Error.WriteLine( " list wired adapters only  (default: all)" );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "  /W" );
   Console.ResetColor( );
   Console.Error.Write( "ire" );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "L" );
   Console.ResetColor( );
   Console.Error.Write( "ess or " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/WL" );
   Console.ResetColor( );
   Console.Error.WriteLine( " list wireless adapters only (default: all)" );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Written by Rob van der Woude" );
   return 1;
  }
  #endregion Error handling
 }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#实现从网络同步标准北京时间的方法

    本文实例讲述了C#实现从网络同步标准北京时间的方法.分享给大家供大家参考.具体分析如下: 这段C#代码可以从http://www.time.ac.cn网站上获取标准的北京时间,只需简单的组合即可让本地服务器实时同步正确的北京时间 #region /// <summary> /// 获取标准北京时间 /// /// </summary> /// /// <returns></returns> /// public static DateTime GetStan

  • c#网络唤醒功能实现

    网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的IT管理人员可以经由网络远程唤醒一台处于休眠或关机状态的计算机.使用这一功能,IT管理人员可以在下班后,网络流量最小以及企业的正常运作最不受影响的时候完成所有操作系统及应用软件的升级及其他管理任务. 为了唤醒网络上的计算机,用户必须发出一种数据包,该数据包的格式与普通数据包不同,而且还必须使用相应的专用软件才能产生.当前比较普遍采用的是AMD公司制作的Magic Packet,这套软件可以生成网络唤醒所需要的特殊数据包.该数据包包含有连续6

  • c#设计模式 适配器模式详细介绍

    后续内容将包括以下结构模式: 适配器模式(Adapter):Match interfaces of different classes合成模式(Composite):A tree structure of simple and composite objects装饰模式(Decorator):Add responsibilities to objects dynamically代理模式(Proxy):An object representing another object享元模式(Flywei

  • C#网络编程基础之进程和线程详解

    在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下baike. 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动.它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 线程:是"进程"中某个单一顺序的控制流. 关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到. 二:进程

  • C# Socket网络编程实例

    本文实例讲述了C# Socket网络编程技巧.分享给大家供大家参考.具体分析如下: 客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址,及应用程序所对应的端口号 TCP协议:安全稳定,一般不会发生数据丢失,但是效率低.利用TCP发生数据一般经过3次握手(所有效率低,自己百度三次握手) UDP协议:快速,效率高,但是不稳定,容易发生数据丢失(没有经过三

  • c#判断网络连接状态的示例分享

    复制代码 代码如下: public partial class Form1 : Form { [DllImport("wininet.dll")] private extern static bool getInterState(out int conn, int val); public Form1()  {InitializeComponent();  getNet(); } //判断当前是否连接入Internet网络private void getNet(){int Out;if

  • c# 适配器模式

    结构图: 客户可以对接的接口类: 复制代码 代码如下: class Target { public virtual void Request() { Console.WriteLine("普通请求!"); } } 客户需要使用适配器才能使用的接口: 复制代码 代码如下: class Adaptee { public void SpecialRequest() { Console.WriteLine("特殊请求!"); } } 适配器的定义:继承与Target类 复制

  • C#设置本地网络如DNS、网关、子网掩码、IP等等

    如今网络在我们的生活工作中所起的作用越来越大,可以说离开了网络我们就无法正常的工作和生活.作为程序员我们写的程序大多数也会跟网络相关,而想要使用网络首先要将机器的网络配置设置好.而手动设置的方法显然很不可取,所以我们要让程序帮我们完成.下面是一个很常用的C#设置系统各种网络参数的一个小Demo一起看看吧. 这个Demo是通过"Win32_NetworkAdapterConfiguration"这个管理类.这里面已基本包括了IP,DNS,网关的设置信息. 在C#中使用WMI还是比较简单的

  • C#列出所有物理网络适配器的方法

    本文实例讲述了C#列出所有物理网络适配器的方法.分享给大家供大家参考.具体如下: using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Management; using System.Text; namespace RobvanderWoude { class ListNICs { public static ArrayList nics

  • python连接远程ftp服务器并列出目录下文件的方法

    本文实例讲述了python连接远程ftp服务器并列出目录下文件的方法.分享给大家供大家参考.具体如下: 这段python代码用到了pysftp模块,使用sftp协议,对数据进行加密传输 import pysftp srv = pysftp.Connection(host="your_FTP_server", username="your_username",password="your_password") # Get the directory

  • ASP.NET列出数据库活跃链接的方法

    本文实例讲述了ASP.NET列出数据库活跃链接的方法.分享给大家供大家参考.具体分析如下: 这里列出数据库的活跃链接.主要使用geeric列表和一个贮存器,创建一个泛型列表的链接,如果他们是活跃的,那么他们将显示在导航了. //First in C# where you create the controller action method //to create the method that will populate all content details //add the follow

  • T-sql语句修改SQL Server数据库逻辑名、数据库名、物理名的方法

    本文实例讲述了T-sql语句修改SQL Server数据库逻辑名.数据库名.物理名的方法.分享给大家供大家参考,具体如下: 更改MSSQL数据库物理文件名Sql语句的写法 注意:要在活动监视器里面确保没有进程连接你要改名的数据库!!!!!!!!!!!!!!!!!!!! Sql语句如下 USE master --改逻辑名 ALTER DATABASE YQBlog MODIFY FILE(NAME='YQBlogAA',NEWNAME='YQBlog') -- GO ALTER DATABASE

  • 使用 Iisext.vbs 列出Web服务扩展的方法

    应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可使用命令行脚本 iisext.vbs(存储在 systemroot\system32 中)列出所有已定义的 Web 服务扩展的 ID.这些扩展必须驻留在运行带有 IIS 6 的 Windows Server 2003 家族的成员的计算机上. Iisext.vbs 执行可用于 IIS 管理器的相同的操作.您可以使用任一工具来管理 IIS 网

  • linux中快速列出文件列表的多种方法总结

    前言 最近在工作中碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录.于是如何快速获取文件列表便是这两天的头等大事,折腾半天找到一个较为快速的方法,记录如下,话不多说了,来一起看看详细的介绍吧. 多种实现方法 尝试了多种方法,有编程的和非编程的. 1.walk python的walk库能够递归的读取目录下所有文件,这个是最常规的方法,然而效率有些缓慢.实现很简单,不赘述. 2.os

  • C# WinForm编程获取文件物理路径的方法

    本文介绍如何在使用C#开发WinForm程序时,获取程序文件的物理路径.这个物理路径可以用于定位程序所在的目录,从而进行日志创建等扩展操作. 在C#开发时,可以很方便的获取程序文件的物理路径..NET Framework提供了一个AppDomain.CurrentDomain类,这个类有一个静态属性,那就是BaseDirectory,它就保存了程序文件的物理路径.我们可以使用ToString()的方法来将其读出. 复制代码 代码如下: /// <summary> /// 返回程序路径(即工作路

  • Linux上创建、列出、删除Docker容器方法总结

    1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供使用/bin/bash shell访问该容器的权限. # docker run [OPTIONS] <IMAGE NAME> [COMMAND] [ARG...] 例如,下面的命令将使用名为"ubuntu"的图像创建新的docker容器.要列出所有可用图像,请使用docker images命令. # docker run -i -t ubuntu /bin/bash 要退出Do

  • 比较全的Vista破解方法

    下面列出各种破解vista的方法,按出现的时间顺序排列1.替换法原理:用替换vista的一些许可文件的办法来用测试版序列号激活vista,是最早出现的办法缺点:许可变为测试版,有时间限制 2.kms私服激活法原理:不是去微软的官方服务器激活,而是去私人架设的服务器激活,也可以用vmware虚拟机自己架设激活服务器或在局域网中其它机器架设激活服务器来进行激活.优点:激活后跟正版软件并无区别,此法微软较难封杀.缺点:只适用于b版(商业版)和e版(企业版),并且隔6个月就要重新激活一次.而且私服存在不

  • asp.net编程获取项目根目录实现方法集合

    本文实例总结了asp.net编程获取项目根目录实现方法.分享给大家供大家参考,具体如下: 编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法2.AppDomain.CurrentDomain.BaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集 2.取得Web应用程序的根目录方法 方法1.HttpRuntime.AppDoma

随机推荐