1. 程式人生 > >C#讀取網絡卡地址的幾種方法

C#讀取網絡卡地址的幾種方法

 轉自:http://www.cnblogs.com/diulela/archive/2012/04/07/2436111.html 

以下是收集的幾種C#程式讀取MAC地址的方法,示例中是讀取所有網絡卡的MAC地址,如果僅需要讀取其中一個,稍作修改即可。

1 通過IPConfig命令讀取MAC地址

///<summary>/// 根據擷取ipconfig /all命令的輸出流獲取網絡卡Mac
///</summary>///<returns></returns>publicstatic List<string> GetMacByIPConfig()
{
  List<string
> macs =new List<string>();   ProcessStartInfo startInfo = new ProcessStartInfo("ipconfig", "/all");
  startInfo.UseShellExecute = false;
  startInfo.RedirectStandardInput = true;
  startInfo.RedirectStandardOutput = true;
  startInfo.RedirectStandardError = true;
  startInfo.CreateNoWindow = true;
  Process p = Process.Start(startInfo);
  //
擷取輸出流  StreamReader reader = p.StandardOutput;
  string line = reader.ReadLine();
  while (!reader.EndOfStream)
  {
    if (!string.IsNullOrEmpty(line))
    {
      line = line.Trim();

      if (line.StartsWith("Physical Address"))
      {
        macs.Add(line);
      }
    }
    line = reader.ReadLine();
  }

  //
等待程式執行完退出程序  p.WaitForExit();
  p.Close();
  reader.Close();
 
  return macs;
}

2 通過WMI讀取MAC地址

    1)該方法依賴WMI的系統服務,該服務一般不會被關閉;但如果系統服務缺失或者出現問題,該方法無法取得MAC地址。 ///<summary>/// 通過WMI讀取系統資訊裡的網絡卡MAC
///</summary>///<returns></returns>publicstatic List<string> GetMacByWMI()
{
  List<string> macs =new List<string>();
  try
  {
    string mac ="";
    ManagementClass mc =new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();
    foreach (ManagementObject mo in moc)
    {
      if ((bool)mo["IPEnabled"])
      {
        mac = mo["MacAddress"].ToString();
        macs.Add(mac);
      }
    }
    moc =null;
    mc =null;
  }
  catch
  {  }

  return macs;
}

3 通過NetworkInterface讀取MAC地址

    1)如果當前的網絡卡是禁用狀態(硬體處於硬關閉狀態),取不到該網絡卡的MAC地址,(您可以通過禁用網絡卡進行試驗)。     2)如果當前啟用了多個網絡卡,最先返回的地址是最近啟用的網路連線的資訊 //返回描述本地計算機上的網路介面的物件(網路介面也稱為網路介面卡)。publicstatic NetworkInterface[] NetCardInfo()
{
  return NetworkInterface.GetAllNetworkInterfaces();
}

///<summary>/// 通過NetworkInterface讀取網絡卡Mac
///</summary>///<returns></returns>publicstatic List<string> GetMacByNetworkInterface()
{
  List<string> macs =new List<string>();
  NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
  foreach (NetworkInterface ni in interfaces)
  {
    macs.Add(ni.GetPhysicalAddress().ToString());
  }
  return macs;
}

4 通過SendARP讀取MAC地址

///<summary>/// 通過SendARP獲取網絡卡Mac
/// 網路被禁用或未接入網路(如沒插網線)時此方法失靈
///</summary>///<param name="remoteIP"></param>///<returns></returns>publicstaticstring GetMacBySendARP(string remoteIP)
{
  StringBuilder macAddress =new StringBuilder();

  try
  {
    Int32 remote = inet_addr(remoteIP);

    Int64 macInfo =new Int64();
    Int32 length =6;
    SendARP(remote, 0, ref macInfo, ref length);

    string temp = Convert.ToString(macInfo, 16).PadLeft(12, '0').ToUpper();

    int x =12;
    for (int i =0; i <6; i++)
    {
      if (i ==5)
      {
        macAddress.Append(temp.Substring(x -2, 2));
      }
      else
      {
        macAddress.Append(temp.Substring(x -2, 2) +"-");
      }
      x -=2;
    }

    return macAddress.ToString();
  }
  catch
  {
    return macAddress.ToString();
  }
}

[DllImport("Iphlpapi.dll")]
privatestaticexternint SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
[DllImport("Ws2_32.dll")]
privatestaticextern Int32 inet_addr(string ip);

5 從登錄檔讀取MAC地址

    常規使用者可通過讀取登錄檔項Windows Genuine Advantage獲取到物理網絡卡地址。

    1)如果登錄檔項被修改,則無法取得該MAC地址

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Genuine Advantage 

相關推薦

C#讀取地址方法

 轉自:http://www.cnblogs.com/diulela/archive/2012/04/07/2436111.html  以下是收集的幾種C#程式讀取MAC地址的方法,示例中是讀取所有網絡卡的MAC地址,如果僅需要讀取其中一個,稍作修改即可。 1 通過IPCo

重啟方法

1.重啟windows網絡卡命令 rem 禁用網絡卡 netsh interface set interface 本地連線 disabled rem 啟用網絡卡netsh interface set interface 本地連線 enabled 2.根據相關資訊作出如下修改

在ubuntu下獲取命令列方法

1. ifconfig -a 其中 HWaddr欄位就是mac地址2. cat /sys/class/net/eth0/address 檢視eth0的mac地址,其中eth0根據網絡卡不同而不同3. c

iOS-檢測的方法

else required 判斷網絡狀態 sha geb all ane mes nsinteger 1.AFN框架中的:AFNetworkReachabilityManager //AFN判斷網絡 -(void)getInternetStatue{ // 1.獲得網絡監控

Ubuntu14.04重啟的三方法

$ ifconfig -a 展示全部網絡卡 $ ifconfig enp2s0 up 啟用網絡卡enp2s0 $ sudo vi /etc/network/interfaces auto enp2s0iface enp2s0 inet staticaddress 192.168.2.10networ

C#獲取Mac地址

需要using System.Management; /// <summary> /// Get LocalHost MAC Address /// </summary> /// <returns></returns> pub

linux中讀取資訊(ip, mask, mac)以及判斷物理網線是否插好的C程式---我親自試了一下,還不錯!

      說明: 我主要轉載如下兩篇文章, 但本文中加入了自己的一些描述       轉載地址一:http://blog.chinaunix.net/uid-20692625-id-3172833.html       轉載地址二:http://blog.chinaun

c# 通過NetworkInterface讀取Mac

 using System.Net.NetworkInformation;         ///<summary>         /// 通過NetworkInterface讀取網絡卡Mac         ///</summary>    

無線的四工作模式

無線網絡卡一般有四種工作模式,即 Managed,Master,Ad-hoc,Monitor。 Managed 模式:該模式用於你的無線客戶端直接與無線接入點(Access Point,即AP)進行接入連線。在這個模式中,我們可以進行無線接入internet上網,無線網絡卡的驅動程式依賴無線AP

Linux修改地址(臨時/永久)

1.臨時修改(重啟服務或者重啟系統後失效): ifconfig eth0 192.168.1.1 netmask 255.255.255.0 縮略:ifconfig eth0 192.168.1.1 (eth0是第一個網絡卡,eth1是第二個)   2  永久修改

的7bond模式

一、bond模式   Mode=0(balance-rr) 表示負載分擔round-robin,和交換機的聚合強制不協商的方式配合   Mode=1(active-backup) 表示主備模式,只有一塊網絡卡是active,另外一塊是備的standby,這時如果交換機配的是捆綁,將不能正常工作,因為交換機

c# 多 由【網路介面卡名】獲取資訊,IP

c# 多網絡卡 由【網路介面卡名】獲取網絡卡資訊,IP 多網絡卡電腦中,網路介面卡的名字 多樣化! 專案中需要,根據網路介面卡 名字 獲取 單個網絡卡的IP: using System.Net.NetworkInformation;

Linux--多的7Bond模式

網絡卡bond是通過把多張網絡卡繫結為一個邏輯網絡卡,實現本地網絡卡的冗餘,頻寬擴容和負載均衡。在應用部署中是一種常用的技術,我們公司基本所有的專案相關伺服器都做了bond,這裡總結整理,以便待查。 bond模式: Mode=0(balance-rr) 表示負載分擔round-ro

嘗試探索基於Linux C抓包過程

        其實想探究網絡卡抓包問題已經有好久了。前幾天找了時間算是基本上了解了那部分的一些基本東西,在這裡只是贅述罷了。 抓包首先便要知道經過網絡卡的資料其實都是通過底層的鏈路層(MAC),在Linux系統中我們獲取網絡卡的資料流量其實是直接從鏈路層收發資料幀。至於如

Linux軟體安裝及VirtualBox地址10.0.2.15ip問題

在VirtualBox中安裝linux(centOS-6-bin-DVD1) 發現ip是10.0.2.15 在用客戶端連線22埠一直不能連線 出現這種情況,是因為VirtualBox的預設網路連線方式為這個:  將它改為【橋接網絡卡】: Linux解壓縮命令

獲得本機ipv4和ipv6地址(即有線地址

程式原始碼如下: 1. 形參ipv4, ipv6為外部呼叫者傳入,用來儲存ipv4地址和ipv6地址, 2. MAX_PATH為自定義巨集, 為數值260, IPVN_SIZE為數值50, DEFAULT_STR_PORT為字串"8080" 3. 需在標頭檔案中包含以下內容

Linux 多的7bond模式

網絡卡繫結mode共有七種(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6 常用的有三種mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。mode=6:平衡負載模式,有自動

cirros 修改地址

cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 172.16.0.254 netmask

u-boot 新增設定地址的命令

#if defined(CONFIG_CMD_PING) static int do_ping(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { if (argc < 2) return -1; NetPingIP = string

c# 獲取資訊

private IList<IPInfo> GetIPInfo() { IList<IPInfo> rIPList = new List<IPInfo>(); Networ