获取远程请求的IP地址、本机Mac地址和客户端Mac地址
我在近期项目里面去记录异常日志时,用到了这两个地址,也是从网上和前辈那里学习到的,本人项目是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地址的更多相关文章
- Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息
引入jar包 <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUti ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- Ngxin 开启CDN 日志获取不了真实IP的解决办法。
nginx配置里面在http{ 后加入如下两行代码即可: set_real_ip_from 0.0.0.0/0;real_ip_header X-Forwarded-For; 重启nginx生效. 注 ...
- 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...
- 阿里云X-Forwarded-For 发现tomcat记录的日志所有来自于SLB转发的IP地址,不能获取到请求的真实IP。
1.背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,能够看看.没怎么看懂.呵呵,要细细读下. 2.须要开启to ...
- 通过Request对象获取请求的IP地址
/** * 标识要从哪些消息头中获取IP地址 */ private static final String[] getIpArray = {"HTTP_X_FORWARDED_FOR&quo ...
- java后端通过request对象获取请求的ip地址工具类
package cn.zgjkw.battalion.util; import org.apache.log4j.Logger; import javax.servlet.http.HttpServl ...
- ansible获取远程机器上的ip地址
问题: 想要使用ansible-playbook脚本创建一个以远程机器的IP命名的目录 错误的代码:# vim test.yml --- - hosts: all remote_user: root ...
- JAVA获取请求的IP地址
private static final String[] ADDR_HEADER = { "X-Forwarded-For", "Proxy-Client-IP&quo ...
随机推荐
- 本博客基本不再更新,请移步至我的CSDN博客
本博客基本不再更新,请移步至我的CSDN博客:http://blog.csdn.net/wpxu08
- 程序员客栈与DaoCloud这两家企业联手后,运维工程师要失业了!
2017年1月11日 ,程序员客栈与DaoCloud正式建立合作伙伴关系,为创业企业和团队提供容器应用解决方案.通过与DaoCloud合作,客栈可以更有效地把控开发环节中的不确定因素,解决项目工期不确 ...
- Data mapping-数据映射
数据映射:根据数据的结构信息建立数据间的映射操作机制. 数据映射的要素: 一.数据 1.源数据: 2.目标数据: 3.数据间关系: 4.数据的元数据(结构信息). 5.元素类型的对应关系. 二.元数据 ...
- webstorm for mac
mac上使用webstrom,破解的方法 参见博客:Webstorm 破解2016.1 for mac 上面的说明有点问题,博主的写的有点问题.应该是1.先打开到注册页面:2.再关闭webstrom; ...
- https://blog.csdn.net/cddcj/article/details/52193932
https://blog.csdn.net/cddcj/article/details/52193932 兼容性
- 【ubuntu子系统】使用windows自带的ubuntu子系统
在windows10系统中,自带了一款ubuntu子系统,就像是一个应用程序,一款软件,提供ubutnu的terminal窗口,可以使用对应的命令行模式.最重要的是,可以直接用来连接linux服务 ...
- XX-Net的完整教程
1.下载谷歌浏览器,安装. 2.百度搜索github,github中搜索XX-Net,下载稳定版 3.解压缩下载的文件夹,运行start.vbs文件.如果弹出管理员请求权限请允许,弹出防火墙警告,请允 ...
- switch 语句的反汇编浅析
switch 的简单情景(case 不超过 3 项) 首先,我们分析一下 switch 语句的一种简单情景,我们可以用 C 写出如下如下代码. 编译后用 OllyDBG 载入,它将显示出如下的反汇编代 ...
- Hexo系列(二) 配置文件详解
Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...
- openldap+openssh+jumpserver实现跳板机监控系统
首先感谢 http://www.jumpserver.org/ 提供的优秀跳板机系统. 我们把跳板机系统经过二次开发主要是 弃用角色功能使用ldap自动登录. 添加登录后临时认证. 上传下载我们自己在 ...