永发信息网

java web 开发如何控制使用期限及绑定服务器mac

答案:1  悬赏:80  手机版
解决时间 2021-01-30 07:24
比如做一个项目,java的基于ssh框架,我想加一个限制,绑定服务器的mac地址,然后设定使用期限到2020年1月1日,目的是使你的代码只能在这个服务器上,在你规定的时间内正常运行,更换服务器或者时间超时,则提示授权过期,无法使用,要求是不能做显性的那种比如加拦截器什么的,太容易被破解了,请给出一些方案、链接、或者程序、思路 都可以,谢谢
最佳答案
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;


public class SystemTool {


public static String getOSName() {
return System.getProperty("os.name").toLowerCase();
}


public static String getUnixMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
// linux下的命令,一般取eth0作为本地主网卡
process = Runtime.getRuntime().exec("ifconfig eth0");
// 显示信息中包含有mac地址信息
bufferedReader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
// 寻找标示字符串[hwaddr]
index = line.toLowerCase().indexOf("hwaddr");
if (index >= 0) {// 找到了
// 取出mac地址并去除2边空格
mac = line.substring(index + "hwaddr".length() + 1).trim();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}
return mac;
}


public static String getWindowsMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try {
// windows下的命令,显示信息中包含有mac地址信息
process = Runtime.getRuntime().exec("ipconfig /all");
bufferedReader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
// 寻找标示字符串[physical
index = line.toLowerCase().indexOf("physical address");

if (index >= 0) {// 找到了
index = line.indexOf(":");// 寻找":"的位置
if (index >= 0) {
System.out.println(mac);
// 取出mac地址并去除2边空格
mac = line.substring(index + 1).trim();
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}

return mac;
}


public static String getMACAddress() throws Exception {

// 获取本地IP对象
InetAddress ia = InetAddress.getLocalHost();
// 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

// 下面代码是把mac地址拼装成String
StringBuffer sb = new StringBuffer();

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地址并返回
return sb.toString().toUpperCase();
}
}

写一个全局拦截的servlet,只要有请求的时候就调用这个类里面的获取mac地址的方法

String os = getOSName();
System.out.println(os);
if (os.equals("windows 7")) {
String mac = getMACAddress();
System.out.println(mac);
} else if (os.startsWith("windows")) {
// 本地是windows
String mac = getWindowsMACAddress();
System.out.println(mac);
} else {
// 本地是非windows系统 一般就是unix
String mac = getUnixMACAddress();
System.out.println(mac);
}

记得判断一下是什么系统
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
想买一台笔记本,看中的品牌是机械师,炫龙,
mega8单片机程序中WDR()函数是干什么用的?
中国民生银行atm(瑞江花园梅苑8号楼底商)地址
电视机显示画面倾斜
【白马非马的错误在于】“白马非马”论的错误
默秒全什么意思
我现在48岁可以缴费社会养老保险吗
大象艺术工作室地址在什么地方,我要处理点事
中国民生银行ATM(福建路富裕广场后门)地址在
褥套的意思是什么啊?知道的请说下!
pcb行业cp是什么意思
只是将电热水壶的底座接通电源,但电热水壶未
多比特托管·艺术地址好找么,我有些事要
音后面加个员字是什么字
在西游记中卷帘将军的性格是什么?
推荐资讯
我老公天天玩手机,晚上关灯了还要玩,我真的
红色动力网吧(凌桥店)地址有知道的么?有点事
中国移动通信(大众通信指定专营店)地址在哪,
求初一数学题180道,要答案
dnf剑神85级45技能能点几次?今天我好象少加
请问一下西安学大菁英学堂少儿英语怎么样?
掌上明珠家具地址在哪,我要去那里办事
汇龙家私地址在哪,我要去那里办事
2019年四清导航八年级数学上册华师大版答案
出国留学一定要中介才能顺利出国吗?
yjk 盈建科结构设计的一些问题
夫伦斯教育怎么去啊,我要去那办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?