Java获取浏览器端MAC地址
JS获取客户端IP地址、MAC和主机名的7个方法汇总

JS获取客户端IP地址、MAC和主机名的7个⽅法汇总今天在搞JS(javascript)获取客户端IP的⼩程序,上⽹搜了下,好多在现在的系统和浏览器中的都⽆效,很⽆奈,在Chrome、FireFox中很少搞到直接利⽤ActiveX获取IP等的JS脚本。
下⾯的代码是我在所有windowsNT5.0及以上的系统上都测试通过的,给出代码:⼀、使⽤JS获取客户端IP的⼏个⽅法⽅法⼀(只针对IE且客户端的IE允许AcitiveX运⾏,通过平台:XP,SERVER03,2000)。
获取客户端IP代码:复制代码代码如下:<HTML><HEAD><TITLE>GetLocalIP</TITLE></HEAD><BODY>获取IP:<script language="JavaScript"> function GetLocalIPAddr(){ var oSetting = null; var ip = null; try{ oSetting = new ActiveXObject("rcbdyctl.Setting"); ip = oSetting.GetIPAddress; if (ip.length == 0){ return "没有连接到Internet"; } oSetting = null; }catch(e){ return ip; } return ip; } document.write(GetLocalIPAddr()+"<br/>") </script></BODY></HTML>⽅法⼆(所有的平台及浏览器):获取客户端处在⽹络中的IP,前提是客户得联⽹。
使⽤的是新浪接⼝。
复制代码代码如下:<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>JavaScript获取客户端IP[利⽤新浪接⼝]</title></head><body><script type="text/javascript" src="/ip/" charset="gb2312"></script> <!--获取接⼝数据,注意charset --><script type="text/javascript">document.writeln("IP地址:"+ILData[0]+"<br />"); //输出接⼝数据中的IP地址document.writeln("地址类型:"+ILData[1]+"<br />"); //输出接⼝数据中的IP地址的类型document.writeln("地址类型:"+ILData[2]+"<br />"); //输出接⼝数据中的IP地址的省市document.writeln("地址类型:"+ILData[3]+"<br />"); //输出接⼝数据中的IP地址的document.writeln("地址类型:"+ILData[4]+"<br />"); //输出接⼝数据中的IP地址的运营商</script></body></html>⽅法三(所有的平台及浏览器):使⽤的搜狐接⼝复制代码代码如下:<script src="/cityjson?ie=utf-8"></script><script type="text/javascript">document.write(returnCitySN["cip"]+','+returnCitySN["cname"])</script>⽅法四:太平洋电脑⽹IP查询接⼝:把0.0.0.0换成IP地址,页⾯上还有其他⽆关内容,这些内容是告诉我们哪些接⼝可以调⽤、接⼝调⽤参数和使⽤⽅法等通过上边的js接⼝调⽤就可以判断⽤于属于哪个城市,直接显⽰该城市的相关信息了,对于需要城市切换的⽹站,⾸次判断⽤户来源⾮常有帮助。
JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址本⽂介绍了JAVA如何获取客户端IP地址和MAC地址,分享给⼤家,具体如下:1.获取客户端IP地址public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}}ip = request.getHeader("X-Real-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}return request.getRemoteAddr();}为什么不直接使⽤request.getRemoteAddr();⽽要在之前判断两个请求头"X-Forwarded-For"和"X-Real-IP"X-Forwarded-For: client1, proxy1, proxy2, proxy3其中的值通过⼀个逗号+空格把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到⼀个请求,就把请求来源IP地址添加到右边。
所有我们只取第⼀个IP地址X-Real-IP,⼀般只记录真实发出请求的客户端IP解决⽤localhost访问ip为0:0:0:0:0:0:0:1的问题public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}}ip = request.getHeader("X-Real-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getHeader("Proxy-Client-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getHeader("WL-Proxy-Client-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getRemoteAddr();return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;}2.获取客户端MAC地址UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);String smac = umac.GetRemoteMacAddr();添加⼀个获取MAC的时间限制final UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);//---长时间获取不到MAC地址则放弃ExecutorService exec = Executors.newFixedThreadPool(1);Callable<String> call = new Callable<String>() {public String call() throws Exception {return umac.GetRemoteMacAddr();}};try {Future<String> future = exec.submit(call);String smac = future.get(1000 * 1, LISECONDS);loginMonitor.setMacAddress(smac);} catch (TimeoutException ex) {loginMonitor.setMacAddress("获取失败");("获取MAC地址超时");}// 关闭线程池exec.shutdown();//---需要先获取IP地址作为参数构造⼀个UdpGetClientMacAddrUdpGetClientMacAddr.javapackage monsys.security.controller;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;/*** 主机A向主机B发送“UDP-NetBIOS-NS”询问包,即向主机B的137端⼝,发Query包来询问主机B的NetBIOS Names信息。
java useragent 正则

java useragent 正则
JavaUserAgent是指客户端的浏览器、操作系统、设备等信息的字符串。
通过识别UserAgent,网站可以根据客户端的不同特征来做出不同的响应,例如优化网页、提供不同的下载链接等。
以下是一些常见的Java UserAgent正则表达式:
1. 匹配IE浏览器:
'MSIE [0-9]+(.[0-9]+)?;'
2. 匹配Firefox浏览器:
'Firefox/[0-9]+(.[0-9]+)?'
3. 匹配Chrome浏览器:
'Chrome/[0-9]+(.[0-9]+)?'
4. 匹配Safari浏览器:
'Version/[0-9]+(.[0-9]+)? Safari/'
5. 匹配Android设备:
'Android [0-9]+(.[0-9]+)?'
6. 匹配iOS设备:
'iPhone OS [0-9]+(_[0-9]+)?'
7. 匹配Windows操作系统:
'Windows [NT|nt][0-9]+.[0-9]+'
8. 匹配Mac操作系统:
'Mac OS X [0-9]+(_[0-9]+)?'
以上正则表达式可以用于Java中的Pattern和Matcher类来进
行匹配。
在实际应用中,用户代理字符串可能会有不同的格式和版本,因此需要根据需要进行修改和调整。
E n i g m a 算 法 详 解

成为专业程序员路上用到的各种优秀资料、神器及框架本文是鄙人工作这几年随手收集整理的一些自认为还不错的资料,成长的道理上需要积累,这么长时间了,是时候放出来分享下了,或许能帮助到你。
欢迎点赞,让更多人看到,让福利普照。
因为本文以后不会更新,但项目依旧会更新。
所以,更好的做法是,请到GitHub上Star:stanzhai-be-a-professional-programmer成为一名专业程序员的道路上,需要坚持练习、学习与积累,技术方面既要有一定的广度,更要有自己的深度。
笔者作为一位tool mad,将工作以来用到的各种优秀资料、神器及框架整理在此,毕竟好记性不如烂键盘,此项目可以作为自己的不时之需。
本人喜欢折腾,记录的东西也比较杂,各方面都会有一些,内容按重要等级排序,大家各取所需。
这里的东西会持续积累下去,欢迎Star,也欢迎发PR给我。
技术站点必看书籍大牛博客GitHub篇工具篇平台工具常用工具第三方服务爬虫相关(好玩的工具)安全相关Web服务器性能-压力测试工具-负载均衡器大数据处理-数据分析-分布式工具Web前端语言篇C游戏开发相关日志聚合,分布式日志收集RTP,实时传输协议与音视频技术站点在线学习:Coursera、edX、Udacity?-way to explore国内老牌技术社区:OSChina、博客园、CSDN、51CTO 免费的it电子书:ITeBooks - Free Download - Big Library在线学习:UdemyCrowd-sourced code mentorship. and Practicecoding with fun programming challenges - CodinGameDevStore:开发者服务商店MSDN:微软相关的官方技术集中地,主要是文档类必看书籍SICP(Structureand Interpretation of Computer Programs)深入理解计算机系统代码大全2人件人月神话软件随想录算法导论(麻省理工学院出版社)离散数学及其应用设计模式编程之美黑客与画家编程珠玑The Little SchemerSimply Scheme_Introducing_Computer_ScienceC++ PrimeEffective C++TCP-IP详解Unix 编程艺术技术的本质软件随想录计算机程序设计艺术职业篇:程序员的自我修养,程序员修炼之道,高效能程序员的修炼《精神分析引论》弗洛伊德《失控》《科技想要什么》《技术元素》凯文凯利程序开发心理学天地一沙鸥搞定:无压力工作的艺术大牛博客云风(游戏界大牛): 云风的Tian (binghe)R大【干货满满】RednaxelaFX写的文章-回答的导航帖陈皓-左耳朵耗子:酷壳 - CoolShellJeff Atwood(国外知名博主): CodingHorror阮一峰(黑客与画家译者,Web):RuanYiFeng’s Personal Website廖雪峰(他的Python、Git教-程不少人都看过):HomeGitHub篇Awesome:这是个Awesome合集,常见的资料这里面都能找到Awesome2:类似第一个Awesome杂七杂八、有用没用的Awesome合集非常不错的语言类学习资料集合:Awesomenessawesome-ios-uiawesome-android-uiAwesome-MaterialDesi gnawesome-public-datasetsawesome-AppSec(系统安全)awesome-datascience书籍资料free-programming-books中文版免费的编程中文书籍索引《程序员编程艺术—面试和算法心得》GoBooksPapersLearning)深入学习(Deep Learning)资料Docker资料合集学习使用StromHadoopInternalsSparkInternals大数据时代的数据分析与数据挖掘in DatabasesDataScience blogs日志:每个软件工程师都应该知道的有关实时数据的统一概念AndroidCode PathAndroidLearn NotesPHP类库框架,资料集合优秀项目Design开源项目Android开源项目分类汇总前端 Node.jsGuide的中文分支Angular2学习资料AngularJS应用的最佳实践和风格指南React-Native学习指南七天学会NodeJSnode.js中文资料导航Nodejs学习路线图如何学习nodejs工作,工具系统管理员工具集合ProGitNginx开发从入门到精通Google全球 IP 地址库收集整理远程工作相关的资料Colorschemes for hackers游戏开发工具集,MagicTools开发者工具箱, free-for-devGitHub秘籍Git风格指南Bast-App平台工具常用工具Mac下的神兵利器asciinema:- 免费在线作图,实时协作Origami: 次世代交互设计神器百度脑图:百度脑图第三方服务DnsPod:一个不错的只能DNS服务解析提供商DigitalOcean:海外的云主机提供商,价格便宜,磁盘是SSD的,用过一段时间整体上还可以,不过毕竟是海外的,网速比较慢。
Java八股文——网络协议

Java⼋股⽂——⽹络协议1. HTTP协议⼀次http请求的过程⽤户输⼊url,浏览器本地解析url,如果在host⽂件中存有对应ip则访问对应ip,否则将域名交给DNS服务器,DNS服务器返回对应IP地址,应⽤层向ip地址发送http请求,然后是传输层TCP的三次握⼿确认连接,第⼀次是客户端向服务器发送syn,第⼆次是服务器发送syn和ack到客户端,第三次是客户端发送syn与ack确认,此时TCP握⼿成功,然后到⽹络层,通过ARP协议,使⽤ip解析出MAC地址,然后通过MAC地址在数据链路层传输数据,服务器接收到数据包后,由web服务器处理该请求,查找客户端请求的资源,并返回响应报⽂。
断开连接需要TCP4次挥⼿,任意⼀⽅可开始,机器1发送fin=1到机器2表⽰数据传输完毕,断开请求,机器2返回ack=1确认收到关闭请求,等待机器2的信息传送完毕后,机器2发送fin=1到机器1,此时机器2会有定时器等待机器1返回ack=1,如果没有返回,会重发fin=1,机器1返回ack=1确认关闭请求。
http与https的区别https需要去CA申请证书http运⾏在TCP之上,所有传输内容都是明⽂,HTTPS运⾏在SSL/TLS之上,SSL/TLS运⾏在TCP之上,所有传输内容都是加密的http默认端⼝80,HTTPS默认端⼝443GET和POST区别GET⽅法是从服务器获取资源POST⽅法是向指定URI提交数据,数据放在body中GET请求的URL有长度限制,⽽POST请求数据会放在消息体中,没有长度限制GET请求会被浏览器主动cache,⽽post不会GET请求在发送过程中产⽣⼀个TCP数据包,POST请求会产⽣两个数据包。
对于GET请求,浏览器会将header和data⼀起发送,服务器返回响应,⽽POST请求,浏览器是先发送header,服务器响应100 continue,浏览器再发送data。
Java最著名的开源项目

IBATIS 【持久层框架】
使用ibatis 提供的ORM机制,对业务逻辑 实现人员而言,面对的是纯粹的Java对 象。 相对Hibernate等 “全自动”ORM机制而 言,ibatis 以SQL开发的工作量和数据库 移植性上的让步,为系统 设计提供了更 大的自由空间。
2
WebWork 【Web框架】
WebWork是由OpenSymphony组织开发 的,致力于组件化和代码重用的拉出式 MVC模式J2EE Web框架。 在WebWork2.2中添加了对AJAX的支 持,这个支持是构建在DWR与Dojo这两 个框架的基础之上.
南开大学软件学院 框架】
南开大学软件学院 Java高级技术 32
JMagallanes 【报表制作】 :开源项目 JMagallanes是一个用Java/J2EE开发的 Olap和动态报表应用程序
南开大学软件学院 Java高级技术
33
JoBo 【Java开源 Web爬虫】:JoBo是 一个用于下载整个Web站点的简单工 具。它本质是一个Web Spider。与其它 下载工具相比较它的主要优势是能够自 动填充form(如:自动登录)和使用 cookies来处理session。JoBo还有灵活的 下载规则(如:通过网页的URL,大小, MIME类型等)来限制下载。
南开大学软件学院 Java高级技术
21
opencrx 【ERP与客户关系管理】
opencrx很容易与你现存的系统集成 (ERP, IVR, CTI, ...)是你对你以前投资的最大保 护 openCRX支持大多数通用技术,例如 RMI, CORBA, JMS, SOAP, 以及 JCA
南开大学软件学院 Java高级技术
java实现获取用户的MAC地址

java实现获取⽤户的MAC地址⽅法⼀:将本机地址与局域⽹内其他机器区分开来/*** 根据IP地址获取mac地址* @param ipAddress 127.0.0.1* @return* @throws SocketException* @throws UnknownHostException*/public static String getLocalMac(String ipAddress) throws SocketException,UnknownHostException {// TODO Auto-generated method stubString str = "";String macAddress = "";final String LOOPBACK_ADDRESS = "127.0.0.1";// 如果为127.0.0.1,则获取本地MAC地址。
if (LOOPBACK_ADDRESS.equals(ipAddress)) {InetAddress inetAddress = InetAddress.getLocalHost();// 貌似此⽅法需要JDK1.6。
byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress();// 下⾯代码是把mac地址拼装成StringStringBuilder sb = new StringBuilder();for (int i = 0; i < mac.length; i++) {if (i != 0) {sb.append("-");}// mac[i] & 0xFF 是为了把byte转化为正整数String s = Integer.toHexString(mac[i] & 0xFF);sb.append(s.length() == 1 ? 0 + s : s);}// 把字符串所有⼩写字母改为⼤写成为正规的mac地址并返回macAddress = sb.toString().trim().toUpperCase();return macAddress;} else {// 获取⾮本地IP的MAC地址try {System.out.println(ipAddress);Process p = Runtime.getRuntime().exec("nbtstat -A " + ipAddress);System.out.println("===process=="+p);InputStreamReader ir = new InputStreamReader(p.getInputStream());BufferedReader br = new BufferedReader(ir);while ((str = br.readLine()) != null) {if(str.indexOf("MAC")>1){macAddress = str.substring(str.indexOf("MAC")+9, str.length());macAddress = macAddress.trim();System.out.println("macAddress:" + macAddress);break;}}p.destroy();br.close();ir.close();} catch (IOException ex) {}return macAddress;}}我们再来看下⽅法⼆:package com.alpha.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class GetMac {/*** java获取客户端⽹卡的MAC地址** @param args*/public static void main(String[] args) {GetMac get = new GetMac();System.out.println("1="+get.getMAC());System.out.println("2="+get.getMAC("127.0.0.1"));}// 1.获取客户端ip地址( 这个必须从客户端传到后台):// jsp页⾯下,很简单,request.getRemoteAddr() ;// 因为系统的VIew层是⽤JSF来实现的,因此页⾯上没法直接获得类似request,在bean⾥做了个强制转换 // public String getMyIP() {// try {// FacesContext fc = FacesContext.getCurrentInstance();// HttpServletRequest request = (HttpServletRequest) fc// .getExternalContext().getRequest();// return request.getRemoteAddr();// } catch (Exception e) {// e.printStackTrace();// }// return "";// }// 2.获取客户端mac地址// 调⽤window的命令,在后台Bean⾥实现通过ip来获取mac地址。
28181新版调测软件使用方法.

软件安装 (2)1.1 JDK的安装配置 (2)1.2 调测软件安装 (6)1.3 运行环境要求 (6)2软件配置 (8)2.1 配置文件参数说明 (8)2.2 配置文件参数修改 (10)3程序启动和终止 (11)3.1 程序启动 (11)3.2 程序终止 (12)4软件操作说明 (13)5调试消息说明 (14)5.1设备连接(注册及校时) (15)5.2心跳 (15)5.3注销 (16)5.4实时点播 (16)5.5遥控消息 (18)5.6回放 (19)5.7下载 (20)5.8手动录像(开启和停止) (20)5.9录像文件检索 (21)5.10目录查询 (21)5.11布\撤防 (21)5.12报警 (22)5.13报警复位 (22)5.14设备状态查询 (22)5.15设备属性查询 (23)5.16设备远程启动 (23)1.软件安装1.1 JDK的安装配置1)进入Oracle的官方网站,下载JDK。
调测软件的运行需要JDK1.5以上的版本。
2)按照提示进行JDK的安装。
3)JDK安装完成以后,进行JAVA_HOME环境变量的配置,在“我的电脑”上右键,选择“属性”。
4)在“系统属性”窗口中选择“高级”,“环境变量”。
5)在“环境变量”“系统变量”窗口中点击“新建”按钮,添加“JAVA_HOME”变量,值为JDK安装根目录,例如“C:\Program Files\Java\jdk1.5.0_12”,点击“确定”按钮保存。
注:必须先配置JAVA_HOME环境变量,再将JAVA_HOME下的bin目录配置到Path系统变量中,否则会导致系统无法启动。
6)在“环境变量”“系统变量”窗口中修改“path”的值,添加Java可执行程序的安装路径,值为“%JAVA_HOME%\bin”,点击“确定”按钮保存修改。
7)测试JDK安装配置是否正确。
选择“开始”菜单->“运行”,键入“cmd”。
在控制台窗口中键入命令“java -version”,出现下图画面与所安装的JDK版本一致,说明JDK安装配置成功。
mac 提取jks文件的证书和私钥的方法

一、什么是jks文件?JKS文件是Java Key Store的缩写,是Java编程语言中用于存储密钥、证书和可信证书的文件格式。
JKS文件通常用于在Java应用程序中管理SSL证书和私钥。
在使用SSL加密通信或进行双向身份验证时,通常需要从JKS文件中提取证书和私钥用于配置服务器端。
二、为什么需要提取jks文件的证书和私钥?在实际的应用中,有时需要将JKS文件中的证书和私钥提取出来,用于其他用途,比如配置其他服务或导入到其他应用程序中。
了解如何提取JKS文件的证书和私钥是非常有用的。
三、提取jks文件证书和私钥的方法要提取JKS文件的证书和私钥,可以按照以下步骤进行操作:步骤一:使用keytool工具查看JKS文件内容使用Java自带的keytool工具来查看JKS文件中包含的证书和私钥信息。
打开命令行工具,切换到JKS文件所在的目录,然后执行以下命令:```bashkeytool -list -keystore yourkeystore.jks```其中,yourkeystore.jks是你的JKS文件的文件名。
执行以上命令后,会要求输入JKS文件的密码,输入正确密码后,将会列出JKS文件中包含的证书和私钥的详细信息。
步骤二:提取证书和私钥接下来,可以使用keytool工具提取JKS文件中的证书和私钥。
执行以下命令来导出证书:```bashkeytool -export -alias youralias -file certfile.cer -keystore yourkeystore.jks```其中,youralias是证书的别名,certfile.cer是导出的证书文件名,yourkeystore.jks是JKS文件的文件名。
执行以上命令后,会要求输入JKS文件的密码,输入正确密码后,证书将会被导出到certfile.cer文件中。
要提取私钥,执行以下命令:```bashkeytool -importkeystore -srckeystore yourkeystore.jks -destkeystore yourkeystore.p12 -deststoretype PKCS12 -srcalias youralias```其中,yourkeystore.jks是JKS文件的文件名,yourkeystore.p12是导出的私钥文件名,youralias是私钥的别名。
mac系统下安装Java开发环境(一)——JDK安装

mac系统下安装Java开发环境(⼀)——JDK安装mac下JDKMAC JDK 卸载⽅法(彻底卸载)1. 打开终端2. 输⼊sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.pluginsudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefpane3 查找当前版本输⼊:ls /Library/Java/JavaVirtualMachines/输出:jdk-9.0.1.jdk4.输⼊sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdkPS:红⾊标注为你安装的jdk版本号,也就是/Library/Java/JavaVirtualMachines/ 路径下的⽂件夹名安装jdk参考如下安装查看1.官⽹下载jdk版本安装查看版本终端,输⼊:/usr/libexec/java_home -Vjava -version查找当前版本输⼊:ls /Library/Java/JavaVirtualMachines/输出:jdk-9.0.1.jdkjdk的真实主⽬录如下:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home2.配置环境变量输⼊“open -e .bash_profile”命令:输⼊相应版本号的jdkJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/HomePATH=$JAVA_HOME/bin:$PATH:.CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.export JAVA_HOMEexport PATHexport CLASSPATH3..使⽤"source .bash_profile"使配置⽣效,然后输⼊”java -versionmac系统下安装Java开发环境(⼀)——JDK安装Mac系统安装JDK1.8及环境变量配置mac系统下安装Java开发环境(⼀)——JDK安装听语⾳原创|浏览:70641|更新:2018-05-03 11:55|标签:1234567MAC对于现在的程序开发⼈员来说,已经是很⼤⼀部分程序员的⽣产⼒⼯具。
JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址在Java中获取客户端IP地址和MAC地址需要使用Java的网络编程API,具体步骤如下:1.获取客户端IP地址获取客户端IP地址有多种方法,下面介绍两种常用的方法。
方法1:使用`InetAddress`类的`getLocalHost`方法```javaInetAddress localIp = InetAddress.getLocalHost(;String ip = localIp.getHostAddress(;System.out.println("客户端的IP地址是:" + ip);```方法2:使用`HttpServletRequest`类的`getRemoteAddr`方法```javaString ip = request.getRemoteAddr(;System.out.println("客户端的IP地址是:" + ip);```获取客户端MAC地址需要通过运行操作系统的命令来获取,下面介绍一种通用的方法。
方法:使用`InetAddress`类的`getByName`方法和`NetworkInterface`类的`getHardwareAddress`方法```javaInetAddress localHost = InetAddress.getByName("localhost");NetworkInterface networkInterface =NetworkInterface.getByInetAddress(localHost);byte[] mac = networkInterface.getHardwareAddress(;// 将mac地址转换成字符串形式StringBuilder sb = new StringBuilder(;for (int i = 0; i < mac.length; i++)sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));String macAddress = sb.toString(;System.out.println("客户端的MAC地址是:" + macAddress);```需要注意的是,获取MAC地址的方法在不同的操作系统上可能有所不同,在Linux、Windows等操作系统上应该是可行的,但在部分其他操作系统上可能无法获取MAC地址。
java获取客户端机器码的方法

在网络和软件开发领域,获取客户端机器码是一项常见的任务。
在Java编程中,我们也经常会遇到这样的需求,需要获取客户端机器码来进行识别、验证或其他操作。
那么,在Java中,我们该如何获取客户端机器码呢?本文将从深度和广度两个方面来探讨这个主题。
1. 基本概念我们需要了解客户端机器码的基本概念。
客户端机器码通常是指客户端设备的唯一标识,它可以用于识别客户端设备或验证客户端的合法性。
通常情况下,客户端机器码是由客户端设备的硬件或软件信息计算而来的,具有唯一性和不可变性。
2. Java中的实现在Java中,获取客户端机器码的方法有很多种,我们可以根据具体的需求来选择合适的方法。
常见的方法包括获取MAC位置区域、获取硬件信息、获取系统信息等。
在以下内容中,我将逐一介绍这些方法,并分析它们的优缺点。
2.1 获取MAC位置区域MAC位置区域是网卡设备的唯一标识,可以用于识别设备。
在Java 中,我们可以通过调用操作系统的命令来获取MAC位置区域,然后进行处理和格式化,最终得到客户端的机器码。
2.2 获取硬件信息除了MAC位置区域外,我们还可以通过获取客户端设备的硬件信息来生成机器码。
这些硬件信息可以包括CPU型号、硬盘序列号、主板型号等。
通过这些信息的组合,我们可以得到一个较为唯一的机器码。
2.3 获取系统信息获取客户端设备的系统信息也是一种常见的方法。
这包括操作系统版本、系统语言、时区等信息。
这些信息的组合可能会更加唯一和具有区分度。
3. 个人观点与理解在实际应用中,选择合适的方法来获取客户端机器码非常重要。
我们需要根据具体的业务需求、安全性考量和用户隐私保护等方面来综合考虑。
我们还需要注意到,客户端机器码可能受到用户干预、设备更换或者虚拟化环境的影响,这也需要我们在设计和使用时加以考虑。
4. 总结获取客户端机器码在Java开发中是一项具有挑战性的任务。
我们需要根据具体需求选择合适的方法,并在实际应用中注意到安全性和合法性的问题。
http协议获取mac地址http协议以及获取其中信息的方法

http协议获取mac地址http协议以及获取其中信息的方法1 课程回顾web入门1)web服务软件作用: 把本地资源共享给外部访问2)tomcat服务器基本操作:启动: %tomcat%/bin/startup.bat关闭:%tomcat%/bin/shutdown.bat访问tomcat主页:http://localhost:80803)web应用目录结构|- WebRoot 根目录|-静态资源(html+css+javascript+images+xml)可以直接被浏览器访问到的|-WEB-INF 不可以直接被浏览器访问到|-classes 存放class字节码文件|-lib 存放jar包文件web.xml web应用的配置文件,配置servlet 4)Servlet技术:用java语言开发动态资源的技术开发一个Servlet程序的步骤:1)创建一个java类,继承HttpServlet类2)重写HttpServlet类的doGet方法3)把写好的servlet 程序交给tomcat服务器运行!!!! 3.1 把编译好的servlet的class文件拷贝到tomcat的一个web应用中。
(web 应用的WEB-INF/classes目录下) 3.2 在当前web应用的web.xml文件中配置servlet HelloServlet d_servlet.HelloServlet HelloServlet /hello 4)访问servlet http://localhost:8080/myweb/hello2 Http协议入门2.1 什么是http协议http协议:对浏览器客户端和服务器端之间数据传输的格式规范2.2 查看http协议的工具1)使用火狐的firebug 插件(右键->firebug->网络)2)使用谷歌的“审查元素” 3)使用系统自带的telnet工具(远程访问工具)a)telnet localhost 8080 访问tomcat服务器b)ctrl+] 回车可以看到回显c)输入请求内容2.3 http协议内容3 Http请求3.1 请求行GET /day09/hello HTTP/1.1#http协议版本http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。
计算机网络复习题含答案解析

计算机网络复习题含答案一、单项选择题1、什么应用服务器会将主机变为远程服务器的一个虚拟终端,在命令行方式下运行时,通过本地计算机发送命令,在远程计算机上运行相应程序,并将相应的运行结构传送到本地计算机显示。
答案:Telnet(远程登录协议)2、100Base-F中的F是指什么?答案:光纤3、一个16口的二层以太网交换机,冲突域和广播域的个数分别为多少?答案:16 1(每个口有一个)4、Internet提供了大量的应用服务,什么服务是世界上使用最广泛的一类Internet服务,以文本形式或HTML格式进行信息传输,而图形等文件可以作为附件进行传递。
答案:E-mail5、Internet的网络层有4个重要的协议,分别是什么。
答案:IP(互联网协议);ARP协议(地址解析);RARP协议(反向地址解析);ICMP(Internet 控制消息协议)6、网络拓扑结构设计是否合理,将直接影响着网络的性能,可靠性与什么?答案:费用7、我们上网通常是和ISP及什么打交道?答案:ICP(Internet内容提供商)ISP(互联网服务提供商)8、从路由选择算法对网络拓扑和通信量变化的自适应角度划分,可以分为哪两大类?答案:静态路由选择算法,动态路由选择算法9、网络200.113.78.0/22中可以分配给主机使用的IP地址个数为多少?答案:1022(2^10-2)10、网络互联设备包括哪些?答案:中继器,网桥,路由器,网关11、Telnet服务所采用的默认端口是哪个?答案:2312、网桥与中继器相比能提供更好的网络性能,原因是什么?答案:网桥能分析数据包并只在重要的端口重发这些数据包网桥工作在数据链路层(书110,120)13、同一个VALN中的两台主机通信需要的条件是什么?答案:连接在同一台交换机上14、在因特网电子邮件系统中,电子邮件应用程序使用的协议是哪些?答案:SMTP;POP3;IMAP415、Internet网络主要是由通信子网和什么构成?答案:资源子网16、在www服务器与客户端之间发送和接受HTML文档时,使用的协议是什么协议?答案:HTTP17、一个主机的IP地址10.0.46.1的默认掩码是什么?答案:255.0.0.018、哪个协议是用来在计算机之间进行文件传输,利用该服务不仅可以从远程计算机获取文件,而且可以将文件从本地计算机传送到远程计算机。
(一)通过JAVA连接SAP(sapjco3.jar在Windows和MacOS上的配置)

(⼀)通过JAVA连接SAP(sapjco3.jar在Windows和MacOS上的配置)(⼀)通过JAVA连接SAP调⽤接⼝ (sapjco3.jar在Windows和MacOS上的配置)⼀、sapjoc3.jar获取由于sap官⽹提供的链接需要合作公司提供账号密码,如果商⽤请索要正确的⽤户名密码下载,如果只是想做测试使⽤,可以使⽤我这⾥提供的链接,资源失效请及时提醒我,谢谢密码:1u0t密码:7zuv密码:lafl⼆、测试项⽬环境准备1. 新建项⽬这个就不多谈了,直接上图,我这⾥新建了⼀个空的测试项⽬,新建lib⽂件夹,准备把需要⽤到的jar包丢进来2. windows和macOS环境配置1. windows直接把 sapjco3.jar sapjco3.dll sapjco3.pdb 拷贝⾄lib下,然后add library把他们都添加进去2. macOS把 sapjco3.jar 和 libsapjco3.jnilib 拷贝⾄lib下,同样add libray添加进去,这⾥只需要add sapjco3.jar 即可。
WARNING: 这⾥很多博客讲到需要添加classpath在变量⾥⾯,这是参照了官⽅提供的安装⽅式,这⾥的话我们只需要将上述⽂件拷贝⾄lib⽂件夹下即可。
三、源码编写及测试⾸先编写⽤来放置sap连接信息的SapConn实体类SapConn/*** Created by gang.xu01@ on 2018/12/6*/public class SapConn {// SAP服务器private String JCO_ASHOST;// SAP系统编号private String JCO_SYSNR;// SAP集团private String JCO_CLIENT;// SAP⽤户名private String JCO_USER;// SAP密码private String JCO_PASSWD;// SAP登录语⾔private String JCO_LANG;// 最⼤连接数private String JCO_POOL_CAPACITY;// 最⼤连接线程private String JCO_PEAK_LIMIT;// SAP ROUTERprivate String JCO_SAPROUTER;public SapConn(String JCO_ASHOST, String JCO_SYSNR, String JCO_CLIENT, String JCO_USER,String JCO_PASSWD, String JCO_LANG, String JCO_POOL_CAPACITY, String JCO_PEAK_LIMIT,String JCO_SAPROUTER) {this.JCO_ASHOST = JCO_ASHOST;this.JCO_SYSNR = JCO_SYSNR;this.JCO_CLIENT = JCO_CLIENT;this.JCO_USER = JCO_USER;this.JCO_PASSWD = JCO_PASSWD;this.JCO_LANG = JCO_LANG;this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;this.JCO_SAPROUTER = JCO_SAPROUTER;}public SapConn() {}public String getJCO_ASHOST() {return JCO_ASHOST;}public void setJCO_ASHOST(String JCO_ASHOST) {this.JCO_ASHOST = JCO_ASHOST;}public String getJCO_SYSNR() {return JCO_SYSNR;}public void setJCO_SYSNR(String JCO_SYSNR) {this.JCO_SYSNR = JCO_SYSNR;}public String getJCO_CLIENT() {return JCO_CLIENT;}public void setJCO_CLIENT(String JCO_CLIENT) {this.JCO_CLIENT = JCO_CLIENT;}public String getJCO_USER() {return JCO_USER;}public void setJCO_USER(String JCO_USER) {this.JCO_USER = JCO_USER;}public String getJCO_PASSWD() {return JCO_PASSWD;}public void setJCO_PASSWD(String JCO_PASSWD) {this.JCO_PASSWD = JCO_PASSWD;}public String getJCO_LANG() {return JCO_LANG;}public void setJCO_LANG(String JCO_LANG) {this.JCO_LANG = JCO_LANG;}public String getJCO_POOL_CAPACITY() {return JCO_POOL_CAPACITY;}public void setJCO_POOL_CAPACITY(String JCO_POOL_CAPACITY) {this.JCO_POOL_CAPACITY = JCO_POOL_CAPACITY;}public String getJCO_PEAK_LIMIT() {return JCO_PEAK_LIMIT;}public void setJCO_PEAK_LIMIT(String JCO_PEAK_LIMIT) {this.JCO_PEAK_LIMIT = JCO_PEAK_LIMIT;}public String getJCO_SAPROUTER() {return JCO_SAPROUTER;}public void setJCO_SAPROUTER(String JCO_SAPROUTER) {this.JCO_SAPROUTER = JCO_SAPROUTER;}@Overridepublic String toString() {return "SapConn{" +"JCO_ASHOST='" + JCO_ASHOST + '\'' +", JCO_SYSNR='" + JCO_SYSNR + '\'' +", JCO_CLIENT='" + JCO_CLIENT + '\'' +", JCO_USER='" + JCO_USER + '\'' +", JCO_PASSWD='" + JCO_PASSWD + '\'' +", JCO_LANG='" + JCO_LANG + '\'' +", JCO_POOL_CAPACITY='" + JCO_POOL_CAPACITY + '\'' +", JCO_PEAK_LIMIT='" + JCO_PEAK_LIMIT + '\'' +", JCO_SAPROUTER='" + JCO_SAPROUTER + '\'' +'}';}}然后编写⽤来建⽴sap连接的SapConn作为连接类编写连接类SAPConnUtils 下⾯是源码/*** Created by gang.xu01@ on 2018/12/4*/public class SAPConnUtils {private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";/*** 创建SAP接⼝属性⽂件。
物联网综合设计 实验16 农业光照调节系统

实验16 农业光照调节系统一、实验目的1. 了解农业光照调节系统的设计原理。
2. 了解农业光照调节系统的底层开发框架。
3. 掌握农业光照调节系统的Android应用与Web应用开发设计。
二、实验环境硬件环境:PC机Pentium处理器双核2GHz以上,内存4GB以上操作系统:Windows7 64位及以上操作系统开发软件:智云硬件物元仿真平台HSIMS、ZCloudWebTools、Android Studio、Chrome浏览器三、实验内容1. 系统设计分析1.1 项目背景农业光照调节系统是一个多传感器的采集反馈与控制系统,通过光照度传感器对大棚内的光照强度进行检测,并将监测到的数据上传到云平台,通过客户端可以监测相关信息,从而实时地监测大棚内光照强度的参数,判断大棚内光照强度。
在低于设定值时操作RGB 红外智能灯对大棚补光,当大棚的光照强度高于设定值时,打开遮阳帘减少大棚光照强度。
1.2 功能分析农业光照调节系统功能设计分两大模块:设备采集和控制、系统设置。
设备采集和控制功能模块:分为光照传感器数据采集,继电器的控制。
系统设置功能模块:服务器ID、IDKey、服务器地址参数设置与连接;传感器MAC地址获取与设置;系统软件版本查询与显示。
系统功能需求分析如下所示:功能功能说明采集数据显示 应用界面实时更新显示光照传感器状态。
遮阳帘实时控制 通过应用程序,对遮阳帘开关操作。
补光灯实时控制 通过应用程序,对补光灯开关操作模式设置(自动模式)通过设置光照强度上下限阈值开关遮阳帘、补光灯。
(手动模式)通过界面控制遮阳帘、补光灯开关。
智云连接设置服务器参数设置与连接。
数据通信协议本项目主要使用的是采集类传感器模块Sensor-A 、控制类传感器模块Sensor-B ,其ZXBee 协议定义如表所示。
传感器 属性 参数权限 说明Sensor-A (601)光强值 A2 R 光强值,浮点型:0.1精度, 0~65535,单位Lux 上报状态 D0(OD0/CD0)RW D0的Bit0~Bit7分别代表A0~A7的上报 上报间隔 V0 RW A0~A7传感器值的循环上报时间间隔 Sensor-B (602)上报状态D0(OD0/CD0) RW D0的Bit0~Bit7分别代表A0~A7的上报 继电器 D1(OD1/CD1) RW D1的Bit6~Bit7分别代表K1,K2的开关状态 LED D1(OD1/CD1)RW D1的Bit4、Bit5代表LED1/LED2的开关状态,0表示关闭,1表示打开上报间隔V0RWA0~A7传感器值的循环上报时间间隔应用层 平台层网络层感知层Android 应用web 应用无线节点、Android 网关 服务器(云平台)继电器/光强传感器,LED 灯2. 系统底层开发框架2.1 开发框架智云框架是在应用接口和SAPI接口上搭建起来的,通过合理调用这些接口,使项目的开发形成一套系统的开发逻辑。
Mac下配置JAVA_HOME

Mac下配置JAVA_HOME使⽤find / -name java搜索所有⽂件找jdk⽬录找到路径以后就是如何配置环境变量的问题,配置环境变量⽐较简单:需要修改两个⽂件第⼀个⽂件 .bash_profile ,使⽤如下命令修改:unix:bin bin$ cd ~ 进⼊到 ~ ⽬录unix:~ bin$ touch .bash_profile 创建⼀个配置⽂件unix:~ bin$ vi .bash_profile 使⽤vi编辑器编辑 .bash_profile⽂件然后输⼊ i ,在vi编辑器⾥⾯输⼊ i 的意思是开始编辑。
vi编辑器⾥⾯的内容如下:JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/HomeCLASSPAHT=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarPATH=$JAVA_HOME/bin:$PATH:export JAVA_HOMEexport CLASSPATHexport PATH添加如上所⽰的语句就可以了,第⼀⾏代表的是jdk的路径,⼀定要记住选择到 Home 这个⽂件加下⾯;然后退出vi编辑器使⽤如下命令:1. 输⼊ ese2. 输⼊冒号 : wq3. 保存退出如果以上修改完毕切正确,那么接下来就是让配置的环境变量⽣效,使⽤如下命令:source .bash_profileANDROID_HOME环境变量确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径。
具体的做法是把下⾯的命令加⼊到~/.bash_profile⽂件中:(译注:~表⽰⽤户⽬录,即/Users/你的⽤户名/,⽽⼩数点开头的⽂件在Finder中是隐藏的,并且这个⽂件有可能并不存在。
请在终端下使⽤vi~/.bash_profile命令创建或编辑。
Java获取URL链接的文件类型

Java获取URL链接的⽂件类型问题发⽣:查看源码发现:因为没有⽂件类型所以在转存图⽚的时候出错了⾕歌百度了⼀下发现解决办法:URLConnection class provides two static methods to help programs figure out the MIME type of some data; you can use these if the content type just isn't available or if you have reason to believe that the content type you're given isn't correct。
就是说URLConnection提供了两种⽅法可以猜测(根据实测结果,这个猜测是相当的准)数据的MIME类型。
第⼀个是:public static String guessContentTypeFromName(String name)这个⽅法根据URL⽂件部分的后缀名来判断类型,跟之前我的⽅法⼀样。
这个不能解决上⾯那个问题。
第⼆个是:public static String guessContentTypeFromStream(InputStream in)这个⽅法是根据流的前⾯⼏个字节来判断类型,这个就不需要⽂件后缀名了,完全可以解决上⾯那个问题。
BufferedInputStream bis = null;HttpURLConnection urlconnection = null;URL url = null;url = new URL(strUrl);urlconnection = (HttpURLConnection) url.openConnection();urlconnection.connect();bis = new BufferedInputStream(urlconnection.getInputStream());System.out.println("file type:"+HttpURLConnection.guessContentTypeFromStream(bis));但⽣产中发现有很多类型不能正确的判断出来,如bmp然后继续各种找,最后解决了...再看⼀下⽆后缀名的判断..HTTP Content-type 对照表Content-Type,内容类型,⼀般是指⽹页中存在的Content-Type,⽤于定义⽹络⽂件的类型和⽹页的编码,决定浏览器将以什么形式、什么编码读取这个⽂件,⽐如⽤PHP输出图⽚⽂件、JSON数据、XML⽂件等⾮HTML内容时,就必须⽤header函数来指定Content-Type,才能达到输出⼀张图⽚或是其它指定内容类型的需求。
Mac下安装配置Jmeter

Mac下安装配置Jmeter1、下载安装JDKa、java -version # 检查JDK版本/usr/libexec/java_home -V # 列出所有JDK版本的JAVA_HOME2、配置JDK环境变量a、mac本配置环境变量的规则如下Mac系统的环境变量,加载顺序为:a. /etc/profileb. /etc/pathsc. ~/.bash_profiled. ~/.bash_logine. ~/.profilef. ~/.bashrc打开终端,输⼊vim ~/.bash_profile,在⽂件下输⼊如下的配置信息:export JAVA_11_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home # 等号右边的路径⽬录,可以通过/usr/libexec/java_home -V这个命令得到export JAVA_HOME=$JAVA_11_HOME # 设置⼀个中间变量,为了⽅便多个JDK版本时更换JAVA_HOMEexport JMETER_HOME=/Users/a1911/Downloads/apache-jmeter-5.2.1export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATHexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar配置完成之后wq退出然后在终端中输⼊source ~/.bash_profile,使配置⽂件⽣效3、下载安装Jmeter4、解压Jmeter包没有配置环境变量前,可以进⼊jmeter的bin⽬录,执⾏sh jmeter也可以打开jmeter5、配置Jmeter环境变量第⼆步已经直接配置好了,现在可以在任何位置输⼊jmeter,就可以打开jmeter的GUI页⾯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
String str = ""; String macAddress = ""; try {
Process p = Runtime.getRuntime().exec("nbtstat -A " + ip); InputStreamReader ir = new InputStreamReader(p.getInputStream()); LineNumberReader input = new LineNumberReader(ir); for (int i = 1; i < 100; i++) {
//所以又第二个 if 判断 你可先在你机器上 cmd 测试下 nbtstat -A 命令 当然得有 一个你可以 ping 通的 //网络 ip 地址,然后根据你得到的结果中 mac 地址显示方式来确定这个循环取值
} } } catch (IOException e) { e.printStackTrace(System.out); } return macAddress; } 附: 通过代理了的客户端 ip 地址获取方式 于是可得出获得客户端真实 IP 地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }
str = input.readLine(); if (str != null) {
if (str.indexOf("MAC Address") > 1) { macAddress = str.substring(str.indexOf("MAC
Address") + 14, str.length()); break;
ip = request.getRemoteAddr(); } return ip; }
可是,如果通过了多级反向代理的话,X-Forwarded-For 的值并不止一个, 而是一串 IP 值,究竟哪个才是真正的用户端的真实 IP 呢?
答案是取 X-Forwarded-For 中第一个非 unknown 的有效 IP 字符串。如: X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
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 地址的方法二: public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
} if (str.indexOf("MAC பைடு நூலகம்ddress") > 1) {
macAddress = str.substring(str.indexOf("MAC 地 址") + 14, str.length());
break; } //以上有个判断,不同系统 cmd 命令执行的返回结果展示方式不一样,我测试的 win7 是 MAC 地址
1 人同问 求获取客户端 mac 地址 java 代码,急需急需,麻烦了
2012-06-15 20:21 提问者: 董超 73
我来帮他解答
满意回答
2012-06-18 14:47
通过 ip 获取指定 ip 地址的 mac 地址,ip 可以通过请求 request 获取, request.getRemoteAddr(); (当然获取 ip 也不是在任何情况下都有效的) 通过了 Apache,Squid 等反向代理软件就不能获取到客户端的真实 IP 地址。 您也许需要通过其他的方式获取,(见附) //获取 mac 如下 (nbtstat -A IPAddress 是对给定的 IP 地址解析其主机名。如果 不能正常解析它的主机 //名的话,有可能是防火墙屏蔽了。也可能是在 DNS 中将 NetBios 解析选项屏 蔽了。) public String getMACAddress(String ip){