我在近期项目里面去记录异常日志时,用到了这两个地址,也是从网上和前辈那里学习到的,本人项目是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. VTK初始化New返回Null问题

    原文链接:http://www.cppblog.com/mythma/archive/2013/08/02/vtk-6-new-null.html 在使用VTK6.0时候,会遇到X::New()返回为 ...

  2. MOOC推荐及三门基础学科

    top1:学堂在线 http://www.xuetangx.com/ top2:网易云课堂 http://study.163.com/ top3:coursera https://www.course ...

  3. ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键

    LittlevGL 添加自定义字体获取字库 ttf 文件可以从一些网站上获取字库文件,比如请注意字体许可证 生成源文件使用 LittlevGL 提供的字库文件转换工具,将 ttf 字库文件转换为源文件 ...

  4. H3C交换机配置学习随笔

    1.交换机配置VLAN vlan 创建VLAN: <h3c>system-view [h3c]vlan 10 删除ID为10的vlan:undo vlan 10 注:任何型号的交换机,都支 ...

  5. PAT_A1126#Eulerian Path

    Source: PAT A1126 Eulerian Path (25 分) Description: In graph theory, an Eulerian path is a path in a ...

  6. 通过分析反汇编还原 C 语言 if…else 结构

    让我们从反汇编的角度去分析并还原 C 语言的 if - else 结构,首先我们不看源代码,我们用 OllyDBG 载入 PE 文件,定位到 main 函数领空,如下图所示. 在图示中,我已经做好了关 ...

  7. 文件操作(day15)

    调用函数可以使用被调用函数动态分配的 存储区 calloc函数也可以动态分配一组连续的 存储区 这个函数可以把所有动态分配的存储区 内容设置成0 为了使用这个函数也需要包含stdlib.h头文件 这个 ...

  8. 使用正则表达式爬取500px上的图片

    网址:https://500px.com/seanarcher,seanarcher是一个up主的名字 打开这个网址,会发现有好多图片,具体到每一个图片的url地址 https://500px.com ...

  9. 重新学习html和css

    当初学习前端的时候,属于快速入门那种,没有好好深入学习html和css.如今,在空闲时间重新拿起基础书学习,都会写到一些新的知识. 1.css实现圆角.渐变功能.使用border-radius以及li ...

  10. ecshop3 调用指定分类下推荐/热卖/新品商品,可指定调用数量

    第一步:--------------------------------------------------------------------------------------/** * 取指定分 ...