我在近期项目里面去记录异常日志时,用到了这两个地址,也是从网上和前辈那里学习到的,本人项目是MVC框架的,自己整理了一个公共方法类,包括获取远程客户端IP和Mac地址,以及获取本机Mac地址的方法,代码如下:

 using System;
using System.Management;
using System.Runtime.InteropServices;
using System.Web; namespace St_Te.Ultity
{
/// <summary>
/// 获取IP和Mac地址的方法类
/// </summary>
public class GetIPandMac
{
/// <summary>
/// 获取客户端IP地址
/// </summary>
public static string GetIP()
{
return HttpContext.Current.Request.UserHostAddress;
} /// <summary>
/// 获取本机Mac地址
/// </summary>
/// <returns></returns>
public static string GetMac()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection mocollection = mc.GetInstances(); foreach (ManagementObject mo in mocollection)
{
if ((bool)mo["IPEnabled"] == true)
{
var mac = mo["MacAddress"].ToString();
mo.Dispose();
return mac;
}
}
return "";
} [DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip); /// <summary>
/// 获取客户端Mac地址
/// </summary>
/// <returns></returns>
public static string GetClientMAC()
{
string mac = string.Empty;
// 在此处放置用户代码以初始化页面
try
{
if (HttpContext.Current.Request.UserHostAddress != null)
{
string strClientIP = HttpContext.Current.Request.UserHostAddress.Trim();
int ldest = inet_addr(strClientIP); //目的地的ip
inet_addr("");
long macinfo = new Int64();
int len = ;
SendARP(ldest, , ref macinfo, ref len);
string macSrc = macinfo.ToString("X");
while (macSrc.Length < )
{
macSrc = macSrc.Insert(, "");
}
for (int i = ; i < ; i++)
{
if ( == (i % ))
{
if (i == )
{
mac = mac.Insert(, macSrc.Substring(i, ));
}
else
{
mac = "-" + mac.Insert(, macSrc.Substring(i, ));
} }
}
}
}
catch (Exception ex)
{
throw ex;
}
return mac;
}
}
}

说明一下,获取IP地址的方法,如果直接在controller里面获取,则这样写:

var ip = Request.UserHostAddress;

获取Mac地址的方法里引用了ManagementClass类,需要添加System.Management.dll的引用。

ManageMentClass 对象被实例化时,根据初始化参数的不同能够获取不同的本地信息:

"Win32_NetworkAdapterConfiguration" 获取本机网络适配器对象。据此可以获取网络地址等。

"Win32_DiskDiver" 获取本机硬盘的相关信息,

"Win32_Processor" 获取本机CPU相关的信息。

"Win32_OperatingSystem" 获取内存等相关信息。

/***************************我是可爱的分割线*******************************/

获取远程请求的IP地址、本机Mac地址和客户端Mac地址的更多相关文章

  1. Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息

    引入jar包 <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUti ...

  2. Nginx 反向代理时获取用户的真实 IP

    在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...

  3. Ngxin 开启CDN 日志获取不了真实IP的解决办法。

    nginx配置里面在http{ 后加入如下两行代码即可: set_real_ip_from 0.0.0.0/0;real_ip_header X-Forwarded-For; 重启nginx生效. 注 ...

  4. 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;

    package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...

  5. 阿里云X-Forwarded-For 发现tomcat记录的日志所有来自于SLB转发的IP地址,不能获取到请求的真实IP。

    1.背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,能够看看.没怎么看懂.呵呵,要细细读下. 2.须要开启to ...

  6. 通过Request对象获取请求的IP地址

    /** * 标识要从哪些消息头中获取IP地址 */ private static final String[] getIpArray = {"HTTP_X_FORWARDED_FOR&quo ...

  7. java后端通过request对象获取请求的ip地址工具类

    package cn.zgjkw.battalion.util; import org.apache.log4j.Logger; import javax.servlet.http.HttpServl ...

  8. ansible获取远程机器上的ip地址

    问题: 想要使用ansible-playbook脚本创建一个以远程机器的IP命名的目录 错误的代码:# vim test.yml --- - hosts: all remote_user: root ...

  9. JAVA获取请求的IP地址

    private static final String[] ADDR_HEADER = { "X-Forwarded-For", "Proxy-Client-IP&quo ...

随机推荐

  1. Python3中替代Python2中cmp()函数的新函数(gt,ge,eq,le,lt)

    原文出处:http://blog.csdn.net/Artprog/article/details/52197779 Python3中已经不能使用cmp()函数了,被如下五个函数替代: import ...

  2. Android LinearLayout整个布局设置不可点击

    1,activity的xml布局(布局中有个Button按钮,点击按钮弹出一个popupwindow ) <?xml version="1.0" encoding=" ...

  3. echarts 中 请求后台改变数据

    function tablenumber() { $.ajax({ type : "get", url : "../res/error.json", dataT ...

  4. html第五节课

    格式布局 一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 示例: 二.position:absolute 1.外层没有position:absolu ...

  5. constraint、index、view(day04)

    回顾: 1.sql99中的表连接 select 字段列表 from 左表 {[inner]|{left|right|full} [outer]} join 右表 on 关联条件; 集合操作 union ...

  6. 9.简单理解ES分布式

    主要知识点:     1.Elasticsearch对复杂分布式机制的透明隐藏特性 2.Elasticsearch的垂直扩容与水平扩容 3.增减或减少节点时的数据rebalance 4.master节 ...

  7. Yii2验证码使用教程

    控制器代码 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaActio ...

  8. Codeforces 902C/901A - Hashing Trees

    传送门:http://codeforces.com/contest/902/problem/C 本题是一个关于“树”的问题. 将一棵高度为h的有根树表示为数列{ai|i=0,1,2,...,h},其中 ...

  9. Solr数据不同步

    Solr配置了集群,本地有253和254,2个独立的Solr服务.  同一个页面的图片,刷新2次,图片地址不一样,最后查明,后台数据源Solr1和Solr2的数据不一致.    第1步推测:本地缓存, ...

  10. (25)Spring Boot使用自定义的properties【从零开始学Spring Boot】

    spring boot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们应该怎么做呢. 若继续在application.properties中添加 如: ...