`
huzhenyu
  • 浏览: 192016 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java小程序自动报告内网服务器的公网IP地址

    博客分类:
  • JAVA
阅读更多
公司搭了一SVN服务器,由于没有固定IP地址。在公司记下IP往邮件一发,回家想通过这个IP连上服务器,发现在IP不对。所以想一办法,写一小程序,让服务器自动检测外网IP地址发到邮箱。这样就可以回家取下邮件拿到IP,就可连上SVN服务器(注已做好端口映射)。
说下原理:
1.用URL连上一可查看IP地址的网址,取下当前服务器的公网IP地址
2.进行下判断,看拿到的IP地址,是否有变,没变不处理,有变发邮件
3.将取得的公网IP地址发指定邮箱
4.使用定时器,定时执行2步骤
5.通过IDE(本人采用Eclipse)生成可执行jar
话不多说上代码:
package com.huzy.autoip;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class AutoIP {

	private static String localIP = "127.0.0.1";
	
	public static void main(String[] args) throws Exception {
		timer();
	}

	private static String getLocalIp() {
		URL url = null;
		try {
			url = new URL("http://www.ip138.com/ip2city.asp");
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		BufferedInputStream bis;
		try {
			bis = new BufferedInputStream(url.openStream());
			InputStreamReader isr = new InputStreamReader(bis);
			BufferedReader reader = new BufferedReader(isr);
			String s = null;
			while ((s = reader.readLine()) != null) {
				if (s.trim().equals(""))
					continue;
				String regEx = "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])";
				Pattern pat = Pattern.compile(regEx);
				Matcher mat = pat.matcher(s);
				boolean rs = mat.find();
				if (rs)
					return mat.group(0);
			}
			bis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void sendMail(String content) throws Exception {
		Properties props = System.getProperties();
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.host", "smtp.163.com");
		Session session = Session.getInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("your_name@163.com", "your_password");
			}
		});
		Message message = new MimeMessage(session);
		message.setSubject("hello");
		message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("one@163.com"));
		message.setFrom(new InternetAddress("your_name@163.com"));
		message.setText("the time " + new Date() + " IP " + content);
		Transport.send(message);
	}
	
	public static void timer(){
        Timer timer = new Timer();
        timer.schedule(new MyTask(), 0, 10 * 1000);
    }
	
	public static class MyTask extends TimerTask {

		private String newIP = null;
		@Override
		public void run() {
			try {
				newIP = getLocalIp();
				if(newIP != null) {
					if (!newIP.equals(localIP)) {
						localIP = newIP;
						sendMail(localIP);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}


2
0
分享到:
评论

相关推荐

    Socket在公网上通信

    描述中提到的“使用花生壳加路由映射”是一种解决公网IP访问问题的方法,尤其适用于动态IP或无固定公网IP的环境。 花生壳是一款动态域名解析服务(DDNS)软件,它能够将用户的动态IP与固定的域名绑定,使得外部设备...

    手机安装ubuntu 以及搭建web服务器,实现内网传透工具集合.zip

    学习和分享这些技术可以帮助开发者或爱好者在任何地方建立自己的Web服务器,无论是在没有固定公网IP的家庭网络还是在外出时,都能方便地管理和测试Web应用。这种灵活性和便捷性对于学习、开发和演示都非常有益。同时...

    利用本地动态IP实现本地程序动态发布至公网上以供访问,实现类似DDNS的功能

    标题中的“利用本地动态IP实现本地程序动态发布至公网上以供访问,实现类似DDNS的功能”是指在家庭或小型办公室环境中,通过个人电脑或服务器上的动态公网IP地址,将本地运行的应用程序发布到互联网上,让外部用户...

    获取外网IP

    外网IP(公网IP)是指互联网服务提供商(ISP)分配给用户用于连接到Internet的唯一IP地址。每个连接到Internet的设备都需要这样的IP地址,以便其他设备可以找到并与其通信。在家庭或小型办公室网络中,通常只有一个...

    udp打洞 客户端和服务端 附说明文档

    NAT用于将内部网络的私有IP地址转换为对外的公共IP地址,这样可以节省公网IP资源,并提供一定的安全保护。然而,这也使得内网中的设备在没有特殊配置的情况下,无法主动与外部网络建立连接。UDP打洞就是利用了NAT的...

    花生壳6.5+tomcat6.0发布java项目归纳.pdf

    接着,在花生壳管理界面添加应用,填写应用名称(任意),内网IP地址为本机IP,内网端口一般设为80。点击确定后,花生壳的配置即告完成。 二、Tomcat6.0的配置与项目部署 1. 确认环境:在服务器上安装JDK和Tomcat...

    UpnpDemoNAT映射

    NAT(网络地址转换)是路由器常用的一种技术,用于将私有网络内的IP地址映射到公网IP地址,以解决公网IP地址稀缺的问题。"UpnpDemoNAT映射"的项目显然是一个演示如何使用UPnP协议进行NAT端口映射的示例。 在NAT环境...

    把自己的电脑作为jsp网站服务器参照.pdf

    这里需要注意,`name`属性应设置为您注册的域名或者公网IP地址;`docBase`属性则是您JSP项目的部署路径。 2. **启动Tomcat**:在Tomcat安装目录下的`bin`文件夹中,运行`startup.bat`脚本启动Tomcat服务器。 ####...

    Android webview

    结合“经过阿里云映射在了公网ip上”,这里指的是利用阿里云的服务,如负载均衡或云服务器ECS,将公网IP映射到树莓派的IP地址。这样,即便树莓派在内网中,也可以通过阿里云的服务让外部网络访问到树莓派提供的视频...

    局域网的端口映射工具

    6. **动态DNS集成**:如果用户的公网IP是动态分配的,端口映射工具可能会集成动态DNS服务,确保即使IP地址变化,用户也能通过固定域名访问内部服务器。 在提供的压缩包中,"映射工具.exe"可能就是这样一个端口映射...

    阿里云服务器ECS-快速入门Linux.pdf

    通常使用SSH方式远程连接Linux实例,这需要知道实例的公网IP地址和SSH登录凭证。在安全组设置中,确保允许所需端口的入站流量,以便远程访问。 4. **部署环境**: 部署环境包括安装必要的软件、配置系统参数和...

    android 与 PC socket 通信示例测试过

    为了在广域网中实现通信,可能需要配置端口映射,这通常涉及到路由器的端口转发设置,将公网IP的特定端口映射到内网PC的相应端口。 实际开发中,还需要考虑错误处理、网络异常的恢复、数据编码解码(如JSON或XML)...

    tomcat-redis依赖jar包

    - 防火墙配置:确保只允许必要的IP地址访问Redis服务器。 - 密码保护:启用Redis的认证机制,防止未授权访问。 - 避免暴露在公网:Redis默认不推荐直接暴露在公网上,建议通过内网或代理服务器访问。 6. **监控...

    JAVASE-基础 - 网络编程

    网络编程是现代软件开发中不可或缺的一部分,涉及的技术包括但不限于IP地址管理、端口识别、协议选择等。通过了解这些基础知识,我们可以更好地设计和实现高效稳定的网络应用程序。无论是CS还是BS架构,都有其适用...

    百度2018校招核心网络研发工程师笔试题(第三批).pdf

    - SNAT(源网络地址转换):在内网主机通过路由器访问互联网时,SNAT用于将内部网络的IP转换为公网IP,以便通信。SNAT过后,源IP会发生变化,但目的IP、校验和、协议字段通常保持不变。 3. **系统性能**: - 并发...

    基于NIO-EPOOL模型netty实现的具备一致性哈希算法的NAT端口映射器

    它通过将内部IP和端口映射到外部IP和端口,使得内部设备可以通过公网进行通信。在Netty中实现NAT端口映射器,需要处理TCP连接的建立、数据的转发以及断开等过程,并确保在高并发下保持稳定性和效率。 一致性哈希在...

Global site tag (gtag.js) - Google Analytics