asp.net获取客户端的MAC地址

摘要:
最近,在构建投票系统时有一项要求:为了防止恶意拉票或刷票,需要通过远程客户端的IP地址获取客户端网卡的MAC地址-AIAddressess显示远程计算机的NetBIOS名称表,其名称由远程计算机的IP地址指定。“已注册”中的状态表示该名称已通过广播或WINS服务器注册-S显示NetBIOS客户端和服务器会话,并尝试将目标IP地址转换为名称。按Ctrl+C停止重新显示统计信息。即:MACAddress=00-18-F3-A7-E1-56,因此在asp-in中。net,我们也使用这个原理来首先获取指定Ip的所有信息,然后使用常规规则获取所需的mac地址。
近日在做一个投票系统中有这样一个需求:为了防止恶意拉票或刷票,需要通过远程客户端的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地址的,有空研究下。结果如下图:

asp.net获取客户端的MAC地址第1张

看到网卡的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 "找不到主机信息";
      }     

    }
}

免责声明:文章转载自《asp.net获取客户端的MAC地址》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DataTable/DataSet 与XML 互转由endl对printf和cout的思考下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

当共享和访问出现问题时

1.检查guest账户是否开启 XP默认情况下不开启guest账户,因此些为了其他人能浏览你的计算机,请启用guest账户。同时,为了安全请为guest设置密码或相应的权限。当然,也可以为每一台机器设置一个用户名和密码以便计算机之间的互相访问。 2.检查是否拒绝Guest用户从网络访问本机 当你开启了guest账户却还是根本不能访问时,请检查设置是否...

Mac 如何彻底删除 Anaconda?

1、如果已经安装配置好了 Anaconda,可以通过which conda,查看 Anaconda 的目录: →_→$ which conda /anaconda3/condabin/conda 不同人的mac可能配置的路径不一样。 2、然后可以查看 /anaconda 的文件大小 我的Anaconda 已经占用 10.19GB 磁盘空间了。 3、查看各...

LOB类型的学习、总结

LOB相关的概念 LOB类型: 将信息文件(十进制、二进制)、图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据。 有两种Lob,Internal Lob和External Lob。Internal Lob是指Lob数据存储在Oracle数据文件里,External Lob是指Lob数据存储在数据库外部的操作系统中。 CLOB:  ...

Windows10更新系统后,无法打开VMware

windows推送更新系统,更新完之后vmware就不能用了,打开如下图所示: 解决方案 1.win10打开—>此电脑—>属性—>打开控制面—>程序—>查看已安装的更新 点击‘“查看已安装的更新” 2,找到windows的最近更新补丁,右键,点击“卸载”。 3、卸载需要时间,卸载后“立即重启计算机” 4、重启后重新打开VM虚...

Layui upload 上传有进度条

首先需要下载最新的 layui的js layui 有进度条是在 2.5.5的时候添加了进度条的功能,所有在也不用 xhr:function了 1、前台HTML <link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /> <script src="~/Scripts/layu...

SQL Server 2000 安装错误,解决方法 Process Exit Code: (1060) 指定的服务未安装

今天早上,发现SQL Server2000 无法连接.打开服务管理器后.启动服务器..发现服务器启动后自动关闭.真郁闷.还以为是SQL Server2000文件丢失.于是卸裁SQL Server2000后.重装..但装到最后配制文件时.却跳出一个对话框"安装程序配置服务器失败...."查了安装日志如下: ....... 14:34:50 Process...