2 qq 36376333 qq_36376333 于 2018.08.11 11:06 提问

如何限制java项目在指定主机上运行 5C

springboot项目,现在用混淆加密代码,
同时想要实现在指定服务器上运行,
我想的是在程序启动的时候去获取本地ip,
然后比对ip地址,
相同的话运行,不相同的话程序结束,
但是试了好多种方法获取的都是127.0.0.1,在本地运行的时候获取的是局域网的IP,
想问一下各位大神有没有什么合适的解决方法,
用什么东西做限制无所谓,
只要实现只能在指定服务器运行这个要求就好
用云服务器的MAC地址做绑定可以吗,云服务器的MAC地址会不会更改?
感谢

9个回答

caozhy
caozhy   Ds   Rxr 2018.08.11 12:11

按照你的思路,可以用公网ip,而不是本机ip,用httpclient去访问公网上一个能报告ip的网址(比如ip138),用返回的你服务器的公网ip代替本机ip
还可以用本机的硬盘卷标、主板序列号、mac等。不过这个需要jni去调用原生的代码,并且操作系统平台相关(windows、linux获取的方式不同)

caozhy
caozhy   Ds   Rxr 2018.08.11 17:37

这里有一个借助ip138返回你的出口ip的代码

 public class Test {
    public static void main(String[] args) {
        try {
            String ip1 = getMyIP();
            System.out.println("myIP:" + ip1);
            String ip2 = getMyIPLocal();
            System.out.println("myLocalIP:" + ip2);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    private static String getMyIP() throws IOException {
        InputStream ins = null;
        try {
            URL url = new URL("http://iframe.ip138.com/ic.asp");
            URLConnection con = url.openConnection();
            ins = con.getInputStream();
            InputStreamReader isReader = new InputStreamReader(ins, "GB2312");
            BufferedReader bReader = new BufferedReader(isReader);
            StringBuffer webContent = new StringBuffer();
            String str = null;
            while ((str = bReader.readLine()) != null) {
                webContent.append(str);
            }
            int start = webContent.indexOf("[") + 1;
            int end = webContent.indexOf("]");
            return webContent.substring(start, end);
        } finally {
            if (ins != null) {
                ins.close();
            }
        }
    }

    private static String getMyIPLocal() throws IOException {
        InetAddress ia = InetAddress.getLocalHost();
        return ia.getHostAddress();
    }
}
Ding_Ren_
Ding_Ren_   2018.08.11 20:43
qq_31942447
qq_31942447   2018.08.11 22:08

看了你的问题,我觉得你可以换一种思路,你的目的是为了配置固定的服务使用程序,那么你可以在数据库做个配置,比如一个md5加密后的密钥,在程序调用的时候查找比对密钥。类似于这种的。

zhaomin_g
zhaomin_g   2018.08.13 10:40

你需要了解的是如何获取ip地址:
Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
Enumeration inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
if (inetAddress.isLoopbackAddress()) {//回路地址,如127.0.0.1
System.out.println("loop addr:" + inetAddress);
} else if (inetAddress.isLinkLocalAddress()) {//169.254.x.x
System.out.println("link addr:" + inetAddress);
} else {
//非链接和回路真实ip
System.out.println("ip:" + inetAddress);
}
}
}

[点击并拖拽以移动]

结果:

loop addr:/127.0.0.1
loop addr:/0:0:0:0:0:0:0:1
ip:/192.168.10.89

xionglangs
xionglangs   Rxr 2018.08.13 11:39
zhangyy130
zhangyy130   2018.08.11 15:38

一般可以用网卡地址,即MAC地址。
InetAddress localInetAddress=null;
Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
Enumeration inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
if (inetAddress.isLoopbackAddress()) {//回路地址,如127.0.0.1
//xxxxx
} else if (inetAddress.isLinkLocalAddress()) {//169.254.x.x
//
} else {
// Use a non-link local, non-loop back address by default
localInetAddress=inetAddress;
}
}
}
byte[] mac = NetworkInterface.getByInetAddress(localInetAddress).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);
System.out.println("每8位:"+str);
if(str.length()==1) {
sb.append("0"+str);
}else {
sb.append(str);
}
}
System.out.println("本机MAC地址:"+sb.toString().toUpperCase());

qq_33345063
qq_33345063   2018.08.11 15:47

把你的地址也改成他的不就行了嘛。。。。。。。。

zhaomin_g
zhaomin_g   2018.08.11 12:30

对ip限制,一般将ip段配置到数据库,程序执行时到库中进行查找匹配

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
手机端运行本地javaweb项目在手机展示
前提条件:电脑和手机在同一个网络环境下。因此这就要求了需要有wifi,①电脑开wifi,手机连接;②或者就是电脑和手机连接相同的wifi。通过cmd窗口,输入命令ipconfig:我的是都用的wifi,因此我要的ip地址就是上图圈中的ip地址。然后把本地运行的连接,例如:localhost:8080/index 改成ip的来链接即:10.0.***.****:8080/index即可。问题:如果手...
Eclipse中Java项目打成jar包,在虚拟机终端上面运行
一、此Java项目中不引用第三方jar包 1、利用Eclipse自带的Export,选择java下的JAR file,选择打成jar包的路径,和Main class。 2、测试(此项目中只有一个Syso"hello world"的类,并且输出语句在主函数中) 二、引用到第三方jar包 (一)、手动打包 1、自定义配置文件MANIFEST.MF(在项目下新建MANIFEST
sqlserver出错总结
一、关于“验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。” 本地数据库(SqlServer2008)连接不上了,提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。”先进入主菜单--〉查看--〉已注册的服务器,在“地服务器组”上点右键--〉新建服务器
idea打包Jar(纯java项目可执行主类)
1、用maven-shade-plugin打包我们这里利用maven中的maven-shade-plugin插件。在pom.xml中,我们加入如下的信息来加入插件。&amp;lt;!-- 配置打可执行的jar --&amp;gt; &amp;lt;plugin&amp;gt; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt; &amp;lt;artifactI...
eclipse上如何在手机上运行项目
手机要能与电脑相连,当然要安驱动了。效果就是你插入手机,电脑显示驱动已识别。驱动安装的官方教程:http://developer.android.com/sdk/win-usb.html 设置android手机为USB调试模式   步骤: menu—> 设置 —> 应用程序 —> 开发 , 选择【USB调试】 首先打开集成开发环境 连接手机,
aix上如何限制指定ip地址通过telnet连接
可以想一想:除了使用tcp-wrapper 来限制ip 的tcp 和Telnet ,还有其它啥方法。
Java项目部署 : 将Java项目打包成jar包,并指定指定的main方法执行
需求: Java项目部署 ; 服务器安装JRE , 指定Java项目指定的main方法执行;
通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口
在菜单那边找到SQLServer2014,展开找到SQL Server的配置管理器注意以下操作,以自己连接的服务为准修改之后 重启服务
如何使用docker 对容器资源限制
在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。 docker 作为容器的管理者,自然提供了控制容器资源的功能。正如使用内核的 namespace 来做容器之间的隔...
ERROR:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连
本文转载于:file:///C:/Users/Administrator/Desktop/[%E8%BD%AC%E8%BD%BD]%E9%80%9A%E8%BF%87%E7%AB%AF%E5%8F%A3%201433%20%E8%BF%9E%E6%8E%A5%E5%88%B0%E4%B8%BB%E6%9C%BA%20localhost%20%E7%9A%84%20TCP%20IP%20%E8%BF