IP地址更改时接收通知

时间:2015-01-13 09:22:19

标签: java

当IP地址发生变化时,有没有办法在Java中接收通知?

例如,当计算机从dhcp服务器收到新地址时。我想避免轮询,因为机器已经处于高负荷状态。从我到目前为止发现它似乎是不可能的。

在纯java中运行的东西最好,但是linux特定的方式也可以。

编辑:我应该提到IP地址是本地计算机的IP地址,而不是某些远程服务器。 IE浏览器。我希望在运行java程序的机器的IP地址发生变化时收到通知。

4 个答案:

答案 0 :(得分:0)

Linux特定方式:编写shell脚本以监视syslog以获取最近的更改。如果syslog(/ var / log / syslog)发生任何更改,则提取IP地址,或者u可以使用run ifconfig perodically并比较id,IP地址中有任何chage。

答案 1 :(得分:0)

您可以使用此工具生成一个由Java程序获取的触发器:

http://sourceforge.net/projects/ipmonitor/

答案 2 :(得分:0)

我不认为你没有投票就行。问题是,在一般情况下,机器可能有多个IP,这使事情变得复杂。

假设您对用于连接某个已知位置的IP感兴趣(例如某些内部服务器或仅仅是“www.google.com”),那么最简单的方法是打开到该位置的套接字并调用{{ 1}}。这将始终返回正确的IP地址。这个解决方案是跨平台的,易于实现,但如果你真的不需要那种连接,那就有点尴尬了。

另一种方法是解析操作系统的路由表(在linux上运行socket.getLocalAddress()。这不需要外部连接,但需要(有时是错综复杂的)解析。

概述了第三种更清洁的获取当前IP地址的方法here。但是,当程序在具有多个公共IP的计算机上运行时,或者具有多个私有地址且没有公共地址的计算机上运行时,它会出现问题。通过这种方法,您最终会在这种情况下猜测IP,而您可能并不总是正确的。但是,如果您知道要监视哪个地址,或者知道接口名称,那么这是迄今为止最好的解决方案。

答案 3 :(得分:-1)

试试这个:

InetAddress old = InetAddress.getLocalHost();
while(true) {
    InetAddress new = InetAddress.getLocalHost();
    if(!old.toString().equals(new.toString())) {
        System.out.println("IP has changed to: " + new.toString());
        System.out.println("IP was: " + old.toString());
        old = new;
    }
}

你应该在一个单独的Thread中运行这个循环,并将while(true)更改为一个布尔字段,你可以从线程外部进行管理