获取远程请求的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 ...
随机推荐
- Visual Studio 推荐插件以及一些设置
Microsoft Visual Studio 作为微软自家的 IDE 集成 NuGet 包管理器,是的引用一些不同版本组件DLL十分方便. 集成编译环境,强大的 Debug 断点.附加功能 项目模板 ...
- 在 Laravel 应用中使用 pjax 进行页面加速
说明# PHPHub 使用 pjax 来加速网页的加载, 这篇文章是在开发完此功能后做的笔记. 什么是 Pjax# .--. / \ ## a a ( '._) |'-- | _.\___/_ ___ ...
- C# 根据空格数截取
#region --根据空格数截取 ; ; //循环截取 , }; while (!sr.EndOfStream) { ; i < strTest.Length - ; i++) { ).Tri ...
- APICloud上啦加载下拉刷新模块
apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...
- WPF动态折线图
此项目源码下载地址:https://github.com/lizhiqiang0204/WpfDynamicChart 效果图如下: 此项目把折线图制作成了一个控件,在主界面设置好参数直接调用即可,下 ...
- 在 CentOS 7 上设置 grub2
在 CentOS 7 上设置 grub2 1. 开机选单是自动创建出来的 请勿尝试手动编辑开机选单,因为它是按照 /boot/ 目录内的文件自动创建出来的.然而你可以调整 /etc/default/g ...
- IDEA全局查找快捷键
双击shift
- 利用Redis锁解决高并发问题
这里我们主要利用Redis的setnx的命令来处理高并发. setnx 有两个参数.第一个参数表示键.第二个参数表示值.如果当前键不存在,那么会插入当前键,将第二个参数做为值.返回 1.如果当前键存在 ...
- hdu 1245 Saving James Bond 策画几何+最短路 最短路求步数最少的路径
#include<stdio.h> #include<string.h> #include<math.h> #define inf 0x3fffffff #defi ...
- 关于Excel导入导出POI工具类
import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...