帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
用Java和DDNS将PC变成公网可访问的小型服务器(流量不限,带宽上限取决于宽带上限)
发布时间:2024-03-08 23:13:10   分类:帮助文档
用Java和DDNS将PC变成公网可访问的小型服务器(流量不限,带宽上限取决于宽带上限) 前言 其实ipv6这个我一直有断断续续的研究,因为不是主业,而且公司的网络好像不支持ipv6,所以没花多少时间研究过。 前一阵子,我有个做短视频软件的想法,就要搞个视频服务器,最初尝试了降级用网盘解决我的需求,比如特别轻量级的一个网盘,相信对个人服务器或者内网穿透有兴趣的朋友都有用过吗,Qt封装的CHFS,很小巧的软件,用来临时存取文档是没有问题,但是对视频来说,没有分片传输,导致看一个电影需要把电影整个下载下来,就很不爽。 所以准备自己写一个视频网盘,可以像百度云盘那样,点到哪个进度就看哪里,而且加载速度要快。 当然这是需求,这有个大前提,就是服务器的流量不要钱,而且带宽足够XD。 所以ipv6服务器就首先进入了我的考虑范围,ipv6不像公网ipv4需要额外申请,而且吐槽下联通这边的效率,问了两次客服,一次师傅都说不知道ipv6是啥,上次去营业厅办业务顺便问了下,也说不知道,只有企业ipv4。所以说ipv6还是方便,实际上基本上我们每个宽带都有ipv6地址,具体的可以cmd使用ipconfig看一下就可以看到,如果没有可能是没开启。 判断开没开启ipv6,博客 我浓缩精华,直接访问https://test-ipv6.com/,这个网站可以直接显示你当前电脑是否能访问ipv6。 通过这个老哥的启发,想到了可以直接用ipv6 ipv6好用是好用,但是缺点就是个人ipv6地址是在不断变化的,如果能获得一个固定的网址,那访问起来就变得很容易了。 一、编写工具类 引入maven 我使用的是腾讯云的DDNS映射,主要是腾讯云的轻量服务器价格太哇塞了,家人们谁懂 XD。 com.tencentcloudapi tencentcloud-sdk-java-common LATEST com.tencentcloudapi tencentcloud-sdk-java-dnspod LATEST 然后编写一个工具类代码 import com.ruoyi.common.core.utils.StringUtils; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.common.profile.ClientProfile; import com.tencentcloudapi.common.profile.HttpProfile; import com.tencentcloudapi.dnspod.v20210323.DnspodClient; import com.tencentcloudapi.dnspod.v20210323.models.DescribeRecordListRequest; import com.tencentcloudapi.dnspod.v20210323.models.DescribeRecordListResponse; import com.tencentcloudapi.dnspod.v20210323.models.ModifyRecordRequest; import com.tencentcloudapi.dnspod.v20210323.models.ModifyRecordResponse; import java.io.BufferedReader; import java.io.InputStreamReader; / * cmd提取ipv6 * @author admin */ public class Ipv6Utils { final static String cmd = "ipconfig"; final static String target = "IPv6 地址 . . . . . . . . . . . . :"; final static String SecretId = "你的腾讯云DDNSDOP SecretId"; final static String SecretKey = "你的腾讯云DDNSDOP SecretKey "; final static Long RecordId = 0L; //你的腾讯云DDNSDOP RecordId / * 获取服务所在机器ipv6 */ private static String getIpv6() { String ipv6 = StringUtils.EMPTY; Process process = null; try { process = Runtime.getRuntime().exec(cmd); BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream(), System.getProperty("sun.jnu.encoding"))); BufferedReader outputErr = new BufferedReader(new InputStreamReader(process.getErrorStream(), System.getProperty("sun.jnu.encoding"))); String line = ""; Long l1 = 0L; Long l2 = 0L; while ((line = output.readLine()) != null) { l1++; if (line.trim().startsWith(target) && !line.contains("::")) { ipv6 = line.trim().replace(target, StringUtils.EMPTY); } } while ((line = outputErr.readLine()) != null) { l2++; } } catch (Exception e) { //e.printStackTrace(); } finally { if (process != null) { process.destroy(); } return ipv6; } } public static void updateDnsPod(){ String ipv6 = Ipv6Utils.getIpv6(); if(StringUtils.isNotEmpty(ipv6)){ Ipv6Utils.updateDnsPod(ipv6); } } / * 更新腾讯云dns */ private static void updateDnsPod(String ipv6){ try{ // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential(SecretId, SecretKey); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("dnspod.tencentcloudapi.com"); // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); // 实例化要请求产品的client对象,clientProfile是可选的 DnspodClient client = new DnspodClient(cred, "", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 ModifyRecordRequest req = new ModifyRecordRequest(); req.setDomain("disspua.com"); //填写你的域名 req.setSubDomain("xxx"); //xxx.disspua.com 就是我的域名 req.setRecordType("AAAA"); //AAAA是ipv6使用的RecordType req.setRecordLine("默认"); req.setValue(ipv6); //获取到的当前ipv6地址 req.setRecordId(RecordId); // 返回的resp是一个ModifyRecordResponse的实例,与请求对象对应 ModifyRecordResponse resp = client.ModifyRecord(req); // 输出json格式的字符串回包 System.out.println(ModifyRecordResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } } / * 获取腾讯云dns列表 */ private void getDnsList(){ try{ // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential(SecretId, SecretKey); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("dnspod.tencentcloudapi.com"); // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); // 实例化要请求产品的client对象,clientProfile是可选的 DnspodClient client = new DnspodClient(cred, "", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 DescribeRecordListRequest req = new DescribeRecordListRequest(); req.setDomain("disspua.com"); // 返回的resp是一个DescribeRecordListResponse的实例,与请求对象对应 DescribeRecordListResponse resp = client.DescribeRecordList(req); // 输出json格式的字符串回包 System.out.println(DescribeRecordListResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } } } 二、加入启动计划 / * 网关启动程序 * * @author admin */ @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) public class GatewayApplication { public static void main(String[] args) { //动态绑定ipv6 Ipv6Utils.updateDnsPod(); SpringApplication.run(GatewayApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 网关启动成功 ლ(´ڡ`ლ)゙ \n" + " _ _ \n" + " | |(_) \n" + " __ ____ ____ __ __| | _ ___ ___ _ __ _ _ __ _ ___ ___ _ __ ___ \n" + " \\ \\ /\\ / /\\ \\ /\\ / /\\ \\ /\\ / / / _` || |/ __|/ __|| '_ \\ | | | | / _` | / __|/ _ \\ | '_ ` _ \\ \n" + " \\ V V / \\ V V / \\ V V /_| (_| || |\\__ \\\\__ \\| |_) || |_| || (_| | _| (__| (_) || | | | | | \n" + " \\_/\\_/ \\_/\\_/ \\_/\\_/(_)\\__,_||_||___/|___/| .__/ \\__,_| \\__,_|(_)\\___|\\___/ |_| |_| |_| \n" + " | | \n" + " |_| \n"); } } 三、结语 ok,测试用过后直接加入到网关启动类的启动命令之前,这样启动微服务的时候都会刷新DDNSDop控制台里的ipv6记录,更新为本地最新的ipv6记录,这样就可以通过域名愉快的访问服务了。 这方案好就好在,手机流量是自动走ipv6的,之前和对象想连麦看电影,都是版权限制,现在可没那些限制了,直接个人服务器走起。
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价