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

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

0

8个回答

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

0

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

0

一般可以用网卡地址,即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());

0

这里有一个借助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();
    }
}
0
0

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

0

你需要了解的是如何获取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

0
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的。是时候展现真正的技术了!
其他相关推荐
sudo授权指定用户在指定主机上运行某些命令
sudo基本知识
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...
手机端运行本地javaweb项目在手机展示
前提条件:电脑和手机在同一个网络环境下。因此这就要求了需要有wifi,①电脑开wifi,手机连接;②或者就是电脑和手机连接相同的wifi。通过cmd窗口,输入命令ipconfig:我的是都用的wifi,因此我要的ip地址就是上图圈中的ip地址。然后把本地运行的连接,例如:localhost:8080/index 改成ip的来链接即:10.0.***.****:8080/index即可。问题:如果手...
eclipse上如何在手机上运行项目
手机要能与电脑相连,当然要安驱动了。效果就是你插入手机,电脑显示驱动已识别。驱动安装的官方教程:http://developer.android.com/sdk/win-usb.html 设置android手机为USB调试模式   步骤: menu—> 设置 —> 应用程序 —> 开发 , 选择【USB调试】 首先打开集成开发环境 连接手机,
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
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 已配置为允许远程连接。”先进入主菜单--〉查看--〉已注册的服务器,在“地服务器组”上点右键--〉新建服务器
通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口
在菜单那边找到SQLServer2014,展开找到SQL Server的配置管理器注意以下操作,以自己连接的服务为准修改之后 重启服务
手机连接测试本地javaweb项目
1.首先电脑和手机连网必须在同一个局域网内。 2.在电脑上开启一wifi ,手机连接开启好的wifi。或者手机电脑连接统一wifi也可以。 3.在电脑上windows+r 打开cmd窗口 输入命令行ipconfig 如下图所示 4.找到以太网的 IPv4地址,即ip地址,(电脑和手机都连wifi的话就找到无线局域网适配器 WLAN的 IPv4地址) 5.假如电脑浏览器访问的项目的地址
eclipse导出jar包,cmd指定main类运行
主要是为了开发GUI窗口,或者是 1、java项目没有导入第三方jar包的情况 这时候打包就比较简单: ①首先在MyEclipse中打开项目, 右键点击项目,选择“Export”; ②选择Java/JAR file,Next; ③Select the resources to export中可以选择你想要包含的项目文件夹,一些不必要的文件夹就无需放进去了,免得增大空间; 这里有
驱动程序收到意外的登录前响应。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接。该驱动程序只能与 SQL Server 2000 或更高版本一起使
十月 10, 2015 12:14:16 下午 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin 警告: ConnectionID:14 Prelogin error: host localhost port 1433 Unexpected end of prelogin response after 0 bytes read
怎样将自己编的java程序移植到手机上运行? 运行自编经典“Hello World!”
用JBuilder制作jar文件时,选择jad版本信息的时候,应该准确的填写。JBuilder9制作Midlet Suit jar时的MIDP的默认值是2.1,CLDC的默认值是1.1。 n73 Java:MIDP2.0、CLDC 1.1、3D API、PIM API、 5610xm Java MIDP 2.0   下面贴一段java程序的代码,这个小示例程序是在手机的屏幕上写出一行字“H
部署到虚拟机的web项目访问本机数据库失败问题解决
转自https://blog.csdn.net/weixin_42813765/article/details/82185103 第一种,通过cmd控制台完成:  一、 在命令窗口输入cmd,连接上本地数据库。  二、 查看本地数据库,选择mysql数据库  三、 修改权限:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'ro...
jar打包命令-指定主类一次搞定!
jar打包命令-指定主类一次搞定! 最近在百度上有好多朋友询问jar命令的使用方法,更多情况下是为了把Java程序转换成可执行文件,据我所知,现在有两种可行的方法: 1、终端使用jar命令将.class打包成xx.jar文件,然后在META-INF \MAINFEST.MF里面添加主类     Main-Class:主类名 开始本帖主题内容:google了一下,几乎全是采
虚拟机里部署java web工程
我本机使用的CentOS,以这个为例,以下内容全部本人亲测。 第一步:先下载VMware-workstation-full-12.1.1-3770994.exe 本机安装,然后网上找密钥破解。 网上下载CentOS-7-x86_64-DVD-1503-01.iso 点开如下图所示 点击创建新的虚拟机,一步一步按照网上的来,选择下载的CentOS-7-x86_64-DVD-1503-01.i
限制某个程序在规定时间内运行
遍历当前系统所有运行的程序,并能设置这些程序运行的时间,运行时间一到 弹出警告提示 受限程序自动终止 非常有创意 值得一看
Java项目启动时执行指定方法的几种方式
很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等。这里给出几种解决方案供大家参考。 1. 使用@PostConstruct注解 这个注解呢,可以在Spring加载这个类的时候执行一次。来看一下下方代码。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
Maven 打包 设置运行主类
Maven 运行 mvn clean package 命令打包在target目录下生成jar包,如何没有配置指定主类,运行jar会报错,如下lin@lin-laptop:~/测试项目/mvnstudy1/mvnstudy1$ java target/mvnstudy1-1.0-SNAPSHOT.jar 错误: 找不到或无法加载主类 target.mvnstudy1-1.0-SNAPSHOT.jar...
吐血整理:VMware安装Linux系统以及运行Java项目
一、安装Linux系统       工具:VMware  虚拟机                  Linux镜像ISO文件   1.点击创建新的虚拟机,如图操作,一直点击下一步;
新建虚拟机+LINUX虚拟机中部署java项目
创建虚拟机: 新建虚拟机教程文档:https://blog.csdn.net/qq_34272964/article/details/79393613 安装图形界面软件包:https://blog.csdn.net/qq_39521554/article/details/79718886 安装图形界面后重启操作:https://www.linuxidc.com/linux/2018-04/1...
Server Controller未在主机上运行或未在端口2050侦听
Domino Server 作为windows服务启动后,启动Domino Console连接服务的时候报“Server Controller未在主机上运行或未在端口2050侦听“这个错误,    解决办法如下:   我的domino的域名和计算机名一样,在hosts中,加入:127.0.0.1  computername    就可以连上服务器。    参考:http://www.2ct
java类命令行运行找不到主类的解决
写一个java类 (在确定jdk安装以及环境变量已配置,java、javac、java -version都可以成功输出)用在cmd命令窗口输javac进行编译, javac Hello1.java 若可以编译生成class文件,则表示编译成功;编译成功后运行class文件 java Hello1 报错:一直报错“找不到主类”解决办法: 将环境变量的CLASSPATH的最后加上分号
Java代码是如何在虚拟机中运行的
       Java作为一门高级语言,它的语法非常复杂、抽象程度也很高。想像C语言一样直接运行在硬件上显然是不可能的,所以在Java程序运行之前,需要将Java程序通过编译器转换成虚拟机所能识别的Java字节码,Java字节码都是固定的一个字节,因此只要将Java程序转换成虚拟机所能识别的Java字节码,就能做到“一次编译,到处运行”。        是不是感觉Java虚拟机很强大,虚拟机不仅...
关于eclipse 里面,运行是找不到主类的问题
设置环境变量什么的,重装JDK的问题就不多说了。。 如果环境变量没错,CMD下还能运行JAVAC  但是在eclipse里面死活找不到主类的时候。。 你要检查一下run configuration 里面的 JAVA APPLICATION 里面是否有你的文件。  不用检查 直接删掉下面所有的子文件 搞定 重要的事情说一遍
使用Gradle构建简单Java项目
转载自:pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group 使用Gradle编译和打包一个简单的Java项目。 使用Java插件 在build.gradle文件中加上如下语句: apply plugin: 'java'Java插件会在构建中添加一些新的约定(如默认的项目结构),新的
Linux 上 java项目cpu 居高不下,导致项目卡顿
1,登陆到linux 服务器,使用top 查看进程得cpu 使用率 top cpu 高得是pid=21412 2.使用   top -Hp 21412,查看该进程中 线程占用cpu最高得id 3.使用 jstack pid  打印信息: 可能出现 jstack command not found; 可能是因为linux 上面没有配置环境变量;需要找到jdk路径,在bin下执行 ...
Docker环境下Java应用的堆内存控制
在boom里面部署docker应用, 应用编排时都需要指定一个内存的最大使用上限。如果应用使用的内存超过了配额,镜像会被kill掉。所以java微服务应用,有必要设置应用自己的最大内存。参数说明设置java最大内存的方式在Dockerfile里面, 加上”-Xmx800m”类似的参数,表示Heap上限800兆。例如: CMD [“java”, “-Xmx800m”, “-jar”, “icare
利用Mutex标记限制程序重复运行
这是一段小代码, 主要是演示如何利用Mutex来限制一个程序二次运行。
SSH限制IP登录
vim /etc/hosts.allow 加入你允许访问你主机的IP sshd:192.168.10.88:allow据说支持 192.168.1.0/24 这种掩码的写法,但是我测试了不行,写成 192.168.1.* 是可以的 vim /etc/hosts.deny sshd:ALL:deny
怎样禁止安装程序 只让电脑运行某些程序 限制程序运行的方法
本文讲述的是如何阻止电脑随意安装软件、限制电脑打开某些程序或者只让电脑打开某些软件,从而有效控制电脑使用、防止电脑随意安装程序而导致电脑运行速度变慢、电脑性能下降的情况发生,有利于单位更好地管理电脑使用。
如何使用docker 对容器资源限制
在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。 docker 作为容器的管理者,自然提供了控制容器资源的功能。正如使用内核的 namespace 来做容器之间的隔...
如何将java工程部署到服务器上1
总体来说 1, 连接服务器 2, 上传war包工程 3, 启动tomcat 下面一步一步来说: 1,连接服务器:我们需要知道地址(例:202.114.23.34),用户名(例:root),密码(例:123456),端口号(为FileZilla准备的;例:22) 打开终端  输入ssh root@202.114.23.34,连接上后输入密码:123456,
局域网远程桌面
自己写的毕业设计,测试的时候在虚拟机上运行一个,主机上运行一个
java手机模拟器,可以直接运行jar包了
用这个工具可以模拟大部分的java手机,可以直接运行jar包
java运行jar包中指定Class的main方法
java运行jar包中指定Class的main方法 用OneJar打包后java -jar ****.jar总是运行指定的主方法,现在工程中有很多其他的主方法,想要运行指定的。可以用下面的命令:java -classpath ****.jar ****.****.className [args] [args] 可以不用写Maven中打包的方法Maven中打包 可以直接package 而不需要 cl...
交叉编译器解析
编译器,就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。
一个jar包里有多个main,指定运行某一个main
如果一个jar中含有多个主程序,而你没有配置默认主程序,或者想要运行指定主程序,则可以通过如下命令执行: java -cp example03-1.0-SNAPSHOT.jar com.alan.HelloWorld -cp example03-1.0-SNAPSHOT.jar   jar包 com.alan.HelloWorld  指定的主程序类
通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在
之前开发项目都是用的VS2010,数据库的连接都是内置,非常容易,没遇到太多的配置问题。      个人喜欢换换口味,想试试用Eclipse编写点JDBC,在学习各种数据库知识。使用Sql server 2008时出现了下面问题: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属
在linux虚拟机上部署MyEclipse上的javaWeb项目步骤
第一步:在MyEclipse上生成WAR包 右击javaWeb项目-----Export------MyEclipse JEE----------WAR file 第二步:SQLyog上生成mysql脚本文件 用SQLyog连接本地数据库------右击该项目所用数据库-------备份/导出--------------备份数据库 转存SQL-------结构和数据--------导出 第
hadoop 运行时main函数找不到
在运行自己写的wordcount的时候发现,会报这样一个错误主函数没有,但是主函数肯定是有的啊!查看源码,找到报错的地方会根据主函数的类的名字加载那个类,再去看看mainClassName是怎么来的根据代码来看,应该是先去jar文件的某个地方去获取主函数类的名字,如果是null则会去输入命令的参数中获取,那么看一下jar文件中有没有那个类名 (META-INF/MAINFIST.MF在解压jar文...