小编是菜鸟,这两天拿到一个需求,登录时判断ip地址是否允许登录,这几天做下来小编遇见了好多坑,给大家分享一下。
系统架构:.net+java
首先,不管怎么样http请求头才是获取ip地址的唯一方式:
1、js是一个脚本语言,不能获取本机ip地址;
2、java可以直接获取请求,但是.net是要在iss上部署,如果直接在后端获取,获取的是部署机器上的ip地址,只能在.net部分获取;
话不多少,给大家分享一下源码;
java部分:
import javax.servlet.http.HttpServletRequest;

public class GetIp {
public static String getUserIp(HttpServletRequest request){
String ip = request.getHeader(“x-forwarded-for”);
if(ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)){
ip = request.getHeader(“Proxy-Client-IP”);
}
if(ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)){
ip = request.getHeader(“WL-Proxy-Client-IP”);
}
if(ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)){
ip = request.getRemoteAddr();
}
return ip;
}
}
.net部分:
public string GetIP()
{
HttpRequest request = HttpContext.ApplicationInstance.Context.Request;
string ip = request.ServerVariables[“HTTP_X_FORWARDED_FOR”];
if (string.IsNullOrEmpty(ip)) {
ip = request.ServerVariables[“REMOTE_ADDR”];
}
if (string.IsNullOrEmpty(ip)) {
ip = request.UserHostAddress;
}
if (string.IsNullOrEmpty(ip)) {
ip = “0.0.0.0”;
}
return ip;
}
大家有什么不懂,可以直接联系小编,小编第一时间为你解答!


写完这个需求,客户又该需求了,让使用MAC地址验证,下来在讲讲MAC地址的获取:

package com.asppro.util;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class GetAddress {/*** 获取客户端ip地址* @param request* @return*/public static String getUserIp(HttpServletRequest request){String ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("WL-Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getRemoteAddr();}return ip;}/**获取本地的mac地址* @param args* @throws UnknownHostException * @throws SocketException */public static String getLocalMac() throws SocketException, UnknownHostException {// TODO Auto-generated method stubInetAddress ia = InetAddress.getLocalHost();//获取网卡,获取地址byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();StringBuffer sb = new StringBuffer("");for(int i=0; i<mac.length; i++) {if(i!=0) {sb.append("-");}//字节转换为整数int temp = mac[i]&0xff;String str = Integer.toHexString(temp);if(str.length()==1) {sb.append("0"+str);}else {sb.append(str);}}return sb.toString();}/*** 通过ip地址获取客户端的mac地址* @param ip* @return* @throws Exception*/public static String GetMacAddress(String ip) throws Exception {if(!booleanIP(ip)){return "IP非法";}if(ip.equalsIgnoreCase("127.0.0.1")){return "不能输入本地地址";}String str = "";String macAddress = "";try {if (!Ping(ip)) {return "无法访问";}Process p = Runtime.getRuntime().exec("arp -a ");InputStreamReader ir = new InputStreamReader(p.getInputStream());LineNumberReader input = new LineNumberReader(ir);for (int i = 1; i < 100; i++) {str = input.readLine();if (str != null) {if (str.indexOf(ip) > 1) {str = str.replace(ip, "").replaceAll(" ", "");if(str.length()>17){macAddress = str.substring(0, 17);}break;}}}} catch (IOException e) {e.printStackTrace(System.out);}return macAddress;}/*** 验证IP是否非法* @param ip* @return*/private static boolean booleanIP(String ip) {String p = "(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})";Pattern pattern = Pattern.compile(p);Matcher matcher = pattern.matcher(ip);return matcher.matches();}/*** 判断ip通信是否通畅* @param ip* @return* @throws IOException*/private static boolean Ping(String ip) throws Exception {boolean f = false;Process process = Runtime.getRuntime().exec("ping " + ip);InputStreamReader r = new InputStreamReader(process.getInputStream());LineNumberReader returnData = new LineNumberReader(r);String line = "";while ((line = returnData.readLine()) != null) {if(line.indexOf(String.valueOf("TTL")) == -1){}else {f = true;break;}}return f;}
}

这是获取MAC地址的方法,有两个注意的地方:
1、获取MAC地址的电脑必须能够ping通;
2、不能使用localhost和127.0.0.1获取;
还有一个获取本地IP地址的方法,也在这里总结一下:
String localIp = InetAddress.getLocalHost().getHostAddress();

获取客户端IP和MAC地址相关推荐

  1. ASP.NET获取客户端IP及MAC地址

    ASP.NET获取客户端IP及MAC地址 2008-12-01 14:50 ASP.NET获取客户端IP及MAC地址很多时候非常必要的,像做投票.留言.评论 等系统的时候防止别人恶意操作,导致数据的虚 ...

  2. java自动获取ip_java自动获取电脑ip和MAC地址

    java自动获取电脑ip和MAC地址 利用getLocalHost获得计算机名称和ip getByInetAddress可以确定一个IP地址属于哪一个网络接口,这个IP地址通过命令行参数传入 用get ...

  3. 获取客户端IP和MAC

    source article:http://www.cnblogs.com/leanco/articles/1148338.html 获取客户端IP: private string GetClient ...

  4. 客户端IP与MAC地址绑定化解方法

    一个账号绑定一台电脑,我电脑没办网,能用别人的网吗???被限制上网的朋友们提出了一个难题:被限制不能上网了?那还有没有办法再突破封锁继续上网呢?要再突破封锁也是可以实现的,这里我说一下IP与MAC地址 ...

  5. mac asp.net 服务器文件路径,asp.net如何获取服务器ip与mac地址

    使用DNS方法获取服务器的IP地址: 复制代码 代码示例: private void ButtonIP_Click(object sender, System.EventArgs e) { Syste ...

  6. python获取计算机IP、mac地址、计算机名

    在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 我们先来看一下python 获得本机MAC地址: import uuid def get_ma ...

  7. C#获取电脑IP、MAC地址示例代码

    /// <summary> /// 使用 C# 自带的类库实现计算机信息获取 /// </summary> public class DefaultDeviceInfo { p ...

  8. android 访问内网ip_android 获取局域网IP与MAC 地址 毫秒级(详解)

    两个 linux命令 开始理清思路:主要使用 linux 两个命令(2017-07-21 fix:这个思路不好,后面使用udp取代[毫秒级]) [ping]: 查询某个ip是否被设备占用 [cat]  ...

  9. Android_获取手机IP和MAC地址

    需要加入以下权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />     ...

最新文章

  1. 算法系列15天速成——第十天 栈
  2. mac mysql 可视化工具_推荐3款好用的Redis、MySQL和MongoDB可视化管理工具
  3. Python 技术篇-百度语音API鉴权认证获取Access Token实例演示
  4. 【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
  5. Bigo 实时计算平台建设实践
  6. uva 437——The Tower of Babylon
  7. 调用gserverdkey dll的飞鸽传书2012
  8. 各数据库连接配置与maven依赖安装
  9. 【OpenCV学习笔记】【函数学习】二十(访问图像像素)
  10. 西南科技大学OJ题 交换二叉树的孩子结点1105
  11. 地方时太阳时html源码,地方时和时区
  12. 能打开QQ,但打开不了网页-网络热门故障排查
  13. 验证OpenCV安装是否成功工程测试模板
  14. unison与fswatch文件同步
  15. wordpress企业网站主题
  16. 英语流利说 第25天
  17. 全球及中国净水器市场产量趋势与竞争策略研究报告2022版
  18. twitter推文不收录_如何阻止Twitter用户的转发(但仍然看到他们的推文)
  19. 模仿搜索框搜索提示案例笔记分享
  20. 台球从起步到高手(配图)

热门文章

  1. 解答:为什么蚊子咬的包会痒痒
  2. 物料主数据(SAP屠夫)
  3. F4IF_INT_TABLE_VALUE_REQUEST如何返回多于一个列
  4. ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例
  5. 这届不敢看体检报告的年轻人还能“年轻”多久?
  6. 知乎进化:对抗内容“熵增”胜算几何?
  7. c语言现在正在下雨吗,用C语言模拟下雨
  8. angularjs http和ajax,AngularJS $ http和$ resource
  9. android:process=.server,Android启动(三)----开启SystemServer进程
  10. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】