asp.net擷取用戶端的MAC地址

來源:互聯網
上載者:User
近日在做一個投票系統中有這樣一個需求:為了防止惡意拉票或刷票,需要通過遠程用戶端的IP地址

來擷取用戶端網卡的MAC地址。晚上找了很多資料,終於有點收穫。

    如何取得網卡mac地址,就不得不講到dos命令:NBTSTAT,下面簡單介紹下:
1. 具體功能

  該命令用於顯示本機電腦和遠端電腦的基於 TCP/IP(NetBT) 協議的 NetBIOS 統計資料、 NetBIOS 名稱表和 NetBIOS 名稱緩衝。 NBTSTAT 可以重新整理 NetBIOS 名稱緩衝和註冊的 Windows Internet 名稱服務 (WINS) 名稱。使用不帶參數的 NBTSTAT 顯示協助。

2. 文法詳解

nbtstat [-a remotename] [-A IPaddress] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [Interval]
3. 參數說明

-a remotename 顯示遠端電腦的 NetBIOS 名稱表, 其中, remote name 是遠端電腦的 NetBIOS 電腦名稱。 NetBIOS 名稱表是運行在該電腦上的應用程式使用的 NetBIOS 名稱列表。
-A IPaddress 顯示遠端電腦的 NetBIOS 名稱表, 其名稱由遠端電腦的 IP 位址指定 ( 以小數點分隔 ) 。
-c 顯示 NetBIOS 名稱緩衝內容、 NetBIOS 名稱表及其解析的各個地址。
-n 顯示本機電腦的 NetBIOS 名稱表。 Registered 中的狀態表明該名稱是通過廣播或 WINS 伺服器註冊的。
-r 顯示 NetBIOS 名稱解析統計資料。 在配置為使用 WINS 的 Windows 電腦上,該參數將返回已通過廣播和 WINS 解析和註冊的名稱號碼。
-R 清除 NetBIOS 名稱緩衝的內容並從 Lmhosts 檔案中重新載入帶有 #PRE 標記的項目。
-RR 重新釋放並重新整理通過 WINS 註冊的本機電腦的 NetBIOS 名稱。
-s 顯示 NetBIOS 客戶和伺服器會話,並試圖將目標 IP 位址轉化為名稱。
-S 顯示 NetBIOS 客戶和伺服器會話,只通過 IP 位址列出遠端電腦。
  Interval 重新顯示選擇的統計資料,可以中斷每個顯示之間的 Interval 中指定的秒數。 按Ctrl+C 停止重新顯示統計資訊。如果省略該參數, NBTSTAT 將只顯示一次當前的配置資訊。

我們試下它的功能:在DOS視窗下,輸入:

nbtstat -a 192.168.168.242
      這裡的192.168.168.242是我的本機IP,測試中發現呆會的程式並不能取得非本地的mac地址,也就是說只能取得伺服器的網卡mac地址,而不能取得用戶端的網卡mac地址,記得以前用一些駭客軟體的時候可以辦到擷取對方的網卡mac地址的,有空研究下。結果如:

看到網卡的MAC地址了吧!也就是:

MAC Address = 00-18-F3-A7-E1-56
所以在asp.net中我們也是根據這個原理,先取得指定Ip的所有資訊後,再用正則取得我們要的mac地址。

詳細代碼請參考下面,代碼多有參考網路,為我所用,非我所想。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

//引入相應的空間資訊
using System.Text.RegularExpressions;
using System.Diagnostics;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //此處輸入Ip地址,你可以做成接受文字框的值進行查詢
        Response.Write(GetCustomerMac("192.168.168.242"));
    }

 
    //這裡是關鍵函數了
    public string GetCustomerMac(string IP)
    {
      string dirResults="";
      ProcessStartInfo psi  = new ProcessStartInfo();
      Process proc = new Process();
      psi.FileName = "nbtstat";
      psi.RedirectStandardInput = false;
      psi.RedirectStandardOutput = true;
      psi.Arguments = "-a " + IP;
      psi.UseShellExecute = false;
      proc = Process.Start(psi);
      dirResults = proc.StandardOutput.ReadToEnd();
      proc.WaitForExit();
       
      //匹配mac地址
      Match m = Regex.Match(dirResults, "\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w\\w");

      //若匹配成功則返回mac,否則返回找不到主機資訊
      if (m.ToString() != "")
      {
          return m.ToString();
      }
      else
      {
          return "找不到主機資訊";
      }     

    }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.