首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 獲取客戶端 MAC 地址:調用 nbtstat 命令解析輸出

     編輯:ASP.NET 基礎

原理與局限

  • **僅限內網/同一廣播域**:`nbtstat -A ` 通過 NetBIOS 解析 MAC,跨路由器/Internet 無效。
  • **依賴命令行工具**:服務器需允許啟動進程、訪問 `nbtstat.exe`(通常在 `C:\Windows\System32`)。
  • **權限要求**:應用程序池身份需有執行權限,IIS 默認 `NETWORK SERVICE` 可能受限。
  • **現代替代**:Web 端無法直接獲取 MAC,常用方案:ActiveX/插件(已淘汰)、客戶端程序上報、DHCP 服務器查詢、ARP 表讀取(需同網段服務器)。

完整代碼

using System.Text.RegularExpressions;
using System.Diagnostics;

public class MacHelper
{
    public static string GetClientMac(string ip)
    {
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "nbtstat",
            Arguments = "-A " + ip,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };

        using (Process proc = Process.Start(psi))
        {
            string output = proc.StandardOutput.ReadToEnd();
            proc.WaitForExit();

            // 清理輸出空格
            output = output.Replace(" ", "").Replace("\t", "").Replace("\r", "").Replace("\n", "");

            // 正則提取 MAC
            Regex reg = new Regex("MacAddress=(?[0-9A-F-]{17})", RegexOptions.IgnoreCase);
            Match m = reg.Match(output);
            if (m.Success) return m.Groups["mac"].Value;

            // 錯誤處理
            if (output.Contains("Hostnotfound")) return "Host not found";
            return "";
        }
    }
}

調用示例

string clientIp = Request.UserHostAddress; // 或解析 X-Forwarded-For
string mac = MacHelper.GetClientMac(clientIp);
Response.Write("Client MAC: " + mac);

安全提示

輸入 `ip` 參數直接拼接進 `Arguments`,存在**命令注入**風險。生產環境必須驗證 IP 格式(`IPAddress.TryParse`)或使用白名單字符過濾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved