16 Star 24 Fork 5

善忘技术夹 / hskserver

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

#hskserver 作为一个程序员,如果有自己的服务器,做个svn什么的,放点代码, 做个网站,存放一些数据, 在外面通过网络能直接访问, 这也算是一个比较美好的事情吧。当然,在天朝, 就不要期望在自己的服务器上做个外网访问的网站了。除非你能不用80端口来做网站,还有人访问,否者的话, 就放弃吧。不过自己用的网站,或者测试用的, 还是没有问题的。下面就说说我自己的配置

一、前置条件

  • 一台电脑 (稳定的,性能不用太好省电,最好是台式机,你总不能天天开着笔记本放那,为了稳定性,还是放弃windows吧,server也不行,建议还是弄个linux,我对ubuntu熟悉一点, 所以就用ubuntu了。)

  • 宽带(这个就不说了,网速越快越好了,不过如果你家里的网络是小区宽带,宽带通什么的, 直接放弃吧,没有外网ip,什么都做不了, 我用的是联通的20M光纤,坑爹的联通上传速度是300k左右,在这里要痛诉一下假宽带,如果ADSL基本上都能实现的)

  • _ 花生壳账号 (这不需要有独立的域名, 现在绑定独立域名好像收费了,我绑定的早,免费的用的挺好,就直接上http://hsk.oray.com/去注册申请一个吧,用花生壳提供的二级域名就好了,这个主要用来获取唯一的公网IP用的)_

这里直接使用阿里云域名更好, 花生壳好像不支持了, 使用aliyun的sdk,调用更新域名地址就ok了

二、获取公网IP

完成以下3个步骤就可以了
    
1.修改resource目录下的application.properties文件

2.使用maven的package方法打包

3.nohup java -jar hskserver-1.0-SNAPSHOT.jar &

其实最好的方法也是最简单的方法,就是在路由器上设置, 我的路由器上也能设置, 就是丫的不稳定, 也不知道是不是花生壳免费的不稳定,反正稳定不了几天 路由器配置主要是两个地方

  1. DMZ主机

DMZ主机设置方式

这个方式简单,但是正个服务器也都暴露在外网了,如果你熟悉端口, 一个一个端口映射也没有关系。配置了DMZ主机就不需要端口映射了

端口映射

  1. 花生壳路由器配置 记得选择启用后提交哦

花生壳配置图片

如果你的路由器设置上花生壳账号密码还能正常的话,那恭喜你了, 后面的东西就不用看了。本文的主要目的就是这个不稳定

三、通过花生壳给的API,动态的提交请求, 同步域名解析地址

由于路由器的不稳定, 所以还是通过自己的程序来实现, 花生壳的API说明地址

其实主要做的事情就是获取你路由器的公网IP地址: 和实际上域名映射的IP地址比较,如果不一样的,就需要提交请求, 让花生壳解析到正确的IP地址上。

参考上面的连接的地址的《例子》 1.使用URL验证 适用于浏览器或应用程序(fetch, curl, lwp-request),可以在URL中包含验证信息。 http://username:password@ddns.oray.com/ph/update?hostname=yourhostname&myip=ipaddress

这个方式在浏览器的时候调用特别有用, 但是我用nodejs的ajax异步请求的时候总是出现不能反回正确的情况。 我直接用java来模拟模拟浏览器提交了,反正特别的稳定。

2.原始HTTP GET请求 实际的HTTP请求,类似下面的代码。 其中 base-64-authorization 请使用 Base64 加密 username:password 后的字符替换。 GET /ph/update?hostname=yourhostname&myip=ipaddress HTTP/1.0 Host: ddns.oray.com Authorization: Basic base-64-authorization User-Agent: Oray 请注意必须使用GET请求,POST是不被允许的。 这个方法应该是一样的, 我没有试过,

我实现的方式,是通过定时器的方式, 定时1分钟执行一次。来检测IP地址是否有变化,如果有,参照API提交,并且发邮件通知, 这个域名解析不是实时生效饿, 如果你着急用, 能通过邮件,获取到IP地址也是不错的,通过IP来连接自己的主机,如果没有变化, 不做任何操作

实现中主要的代码信息

获取远程域名对应的IP地址

public static String getRemountIPByHSK() {
    Document doc = null;
    try {
        URL url = new URL("http://ddns.oray.com/checkip");
        doc = Jsoup.parse(url, 10 * 1000);
        Elements es = doc.select("body");
        String ipstr = es.text();
        Pattern pattern = Pattern
                .compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); // 正则表达式匹配格式
        Matcher matcher = pattern.matcher(ipstr);
        if (matcher.find()) {
            String srcStr = matcher.group(); // 这里得到的ip
            return srcStr;
        }
    } catch (IOException e) {
        Logger.getLogger("publish").error(e.getMessage(), e);
        return getRemountIP();
    }
    return "";
}

获取本地路由器的IP

public static String getIPByName(String name) {
    InetAddress address = null;
    String ip = "";
    try {
        address = InetAddress.getByName(name);
        ip = address.getHostAddress().toString();
    } catch (Exception e) {
        Logger.getLogger("publish").error(e.getMessage(), e);
    }
    return ip;
}

需要更新IP的方法 注册花生壳的时候送你的二级域名 这个一定你的申请时二级域名

public static String sendGet(String ip) {
    String result = "";
    BufferedReader in = null;
    try {
        // String urlNameString = url + "?" + param;
        String url = "http://ddns.oray.com/ph/update?hostname=注册花生壳的时候送你的二级域名&myip="
                + ip;
        URL realUrl = new URL(url);
        // 打开和URL之间的连接
        URLConnection connection = realUrl.openConnection();
        // 设置通用的请求属性
        connection
                .setRequestProperty("Accept",
                        "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        connection.setRequestProperty("Connection", "Keep-Alive");
       
        connection.setRequestProperty("User-agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
        connection.setRequestProperty("Authorization",
                "Authorization");
        // 建立实际的连接
        connection.connect();
        // 获取所有响应头字段
        Map<String, List<String>> map = connection.getHeaderFields();
        // 遍历所有的响应头字段
        for (String key : map.keySet()) {
            Logger.getLogger("publish").info(key + "--->" + map.get(key));
        }
        // 定义 BufferedReader输入流来读取URL的响应
        in = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
    } catch (Exception e) {
        System.out.println("发送GET请求出现异常!" + e);
        Logger.getLogger("publish").error(e.getMessage(), e);
    }
    // 使用finally块来关闭输入流
    finally {
        try {
            if (in != null) {
                in.close();
            }
        } catch (Exception e2) {
            Logger.getLogger("publish").error(e2.getMessage(), e2);
        }
    }
    return result;
}
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: You must give any other recipients of the Work or Derivative Works a copy of this License; and You must cause any modified files to carry prominent notices stating that You changed the files; and You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2015 善忘技术夹 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

使用家庭ADSL宽带或光纤,利用花生壳架设自己的服务服务器,解决路由器上自带花生壳域名同步不及时的问题,IP地址不能及时的更新 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/swjsj.com/hskserver.git
git@gitee.com:swjsj.com/hskserver.git
swjsj.com
hskserver
hskserver
master

搜索帮助