`
tedeyang
  • 浏览: 326078 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读取本机动态ip到远程网页

阅读更多

如何通过自己的ADSL使家里的电脑成为服务器呢?像花生壳这样的应用可以帮助你动态解析ip,不过这个程序太庞大了,根本没有必要。
下面介绍我的做法
条件
  上网方式:ADSL
  台式机:linux
  中继网页:在某虚拟主机申请一个免费空间,需要支持动态脚本(php、jsp等)
方案
  在本机运行一个Java程序,定时读取本机的外网IP,自动向中继网页用GET方式提交该数据。中继网页保存IP记录在内存中,其他访问者可以通过该页面查看当前的IP。

package  tedeyang;

import  java.io.BufferedReader;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.net.InetAddress;
import  java.net.URL;
import  java.net.URLConnection;
import  java.net.UnknownHostException;
import  java.util.Date;
import  java.util.Timer;
import  java.util.TimerTask;

public   class  UpdateIp  {
    
static  String page  =   " http://xxx.xxx.com/name/link.jsp?ip= " ; //  need 'ip='
     static  String strategy  =   " ifconfig " ; //  or jdk
     static   long  refreshTime  =   5L   *   60   *   1000 //  5 minutes

    
/** */ /**
     * 
@param  args
     * 
@throws  IOException
     
*/

    
public   static   void  main( final  String[] args)  throws  IOException  {
        
if  (args.length  <=   1 {
            System.out.println(
" Parameter error ! " );
            System.out
                    .println(
" should be followed by three parameters : updatePage ipStrategy refreshMinutes, at least updatePage " );
            System.out.println(
"     updatePage likes 'http://host/xxx.jsp?ip=' " );
            System.out.println(
"     ipStrategy maybe is jdk or ifconfig,default is ifconfig " );
            System.out.println(
"     refreshMinutes 's unit is minute, default is 5 minutes " );
            
return ;
        }

        page 
=  args[ 0 ];
        
if  ( ! page.endsWith( " ip= " ))
            page 
+=   " ?ip= " //  ?
        strategy  =  args[ 1 ];
        
try   {
            refreshTime 
=  Integer.parseInt(args[ 2 ]);
            refreshTime 
*=   60   *   1000 ;
        }
  catch  (Exception e)  {
        }

        
// cycle
         final  Timer t  =   new  Timer();
        t.schedule(
new  TimerTask()  {
            
public   void  run()  {
                
try   {
                    UpdateIp.run(page, strategy);
                }
  catch  (IOException e)  {
                    e.printStackTrace();
                    
//  t.cancel();
                }

            }
;
        }
0 , refreshTime);
    }


    
private   static   void  run(String page, String ipStrategy)  throws  IOException  {

        String ip 
=   " no " ;
        
if  (ipStrategy.equals( " jvm " ))
            ip 
=  getIpByJavaApi();
        
else
            ip 
=  getIpByLinuxIfconfig();
        System.out.print(
new  Date()  +   " , this ip is : "   +  ip);
        touchIp(page, ip);
        System.out.println(
"  , touch successed. " );
    }


    
private   static   void  touchIp(String page, String ip)  throws  IOException  {
        URL url 
=   null ;
        url 
=   new  URL(page  +  ip);
        URLConnection con 
=   null ;
        BufferedReader reader 
=   null ;
        
try   {
            con 
=  url.openConnection();
            con.connect();
            reader 
=   new  BufferedReader( new  InputStreamReader(con.getInputStream()));
            reader.readLine();
        }
  finally   {
            
try   {
                reader.close();
                con 
=   null ;
            }
  catch  (IOException e)  {
                e.printStackTrace();
            }

        }

    }


    
private   static  String getIpByJavaApi()  throws  UnknownHostException  {
        String ip 
=   " none " ;
        InetAddress[] all 
=  InetAddress.getAllByName(InetAddress.getLocalHost()
                .getHostName());
        
//  通过本机主机名,遍历多个ip
         for  ( int  i  =   0 ; i  <  all.length; i ++ {
            String ip2 
=  all[i].getHostAddress();
            
if  ( ! ip2.startsWith( " 127. " &&   ! ip2.startsWith( " 192. " )
                    
&&   ! ip2.startsWith( " 10. " &&   ! ip2.startsWith( " 172. " ))  {
                ip 
=  ip2;
            }

        }

        
return  ip;
    }


    
private   static  String getIpByLinuxIfconfig()  throws  IOException  {
        String ip 
=   " none " ;
        Process pre 
=  Runtime.getRuntime().exec(
                
new  String[]  " sh " " -c " " ifconfig ppp0 | grep addr "  } );
        BufferedReader reader 
=   null ;
        
try   {
            reader 
=   new  BufferedReader( new  InputStreamReader(pre
                    .getInputStream()));
            String line 
=  reader.readLine();
            
if  (line  !=   null   &&  line.matches( " .*addr.* " ))  {
                
int  s  =  line.indexOf( " addr: " +   5 ;
                
int  e  =  line.indexOf( "   " , s);
                ip 
=  line.substring(s, e).trim();
            }

        }
  finally   {
            
if  (reader  !=   null )
                reader.close();
        }

        
return  ip;
    }


}


 

<%!
static  String ip  =   " none " ;
static  List record  =   new  ArrayList();
%><%
String ipa
=  request.getParameter( " ip " );
if (record.size() > 100 ) {
 record.clear();
}

if (ipa  !=   null ) {
 
if (ipa.equals( " ask " )) {
 Iterator it 
=  record.iterator();
while (it.hasNext()) {
out.println(it.next()
+ " </br> " );
}

}
else {
 
this .ip  =  ipa;
 record.add(ipa
+ "   " + new  java.util.Date().getTime());
}

}

out.print(
" ip= " + ip);

%>
分享到:
评论

相关推荐

    易语言取本机所有IP地址

    在IT领域,尤其是在网络编程中,获取本机的IP地址是一项基本操作。"易语言取本机所有IP地址"是一个针对...在实际应用中,这样的功能常用于网络服务的配置、网络诊断工具的开发以及多网络接口情况下的动态IP选择等场景。

    3322 动态ip解析

    ### 3322动态IP解析知识点 ...通过以上介绍,我们了解到3322动态IP解析服务及其配置过程,这种服务对于需要远程访问家庭网络资源的用户来说非常有用。正确配置并使用该服务可以极大地提高远程访问的便利性和可靠性。

    asp如何远程获取网页内容

    6. **安全性与隐私**:在进行远程获取网页内容时,要注意遵守目标网站的使用条款,避免频繁请求导致被封IP,同时要尊重用户隐私,不要获取未经授权的数据。 7. **数据解析**:获取到网页内容后,可能需要进一步处理...

    海康网络相机利用SDK 多线程读取图像程序

    4. **图像显示**:读取到的图像需要在用户界面上显示,这通常涉及到图像处理库,如OpenCV,它可以方便地进行图像显示、处理和分析。 5. **C++编程**:作为程序开发的主要语言,C++提供了强大的性能和灵活性,适合...

    如何获得主机IP,检测主机IP是否改变源码

    ### 如何获得主机IP,检测主机IP是否改变源码...这种机制对于动态IP环境下的远程访问特别有用。此外,该代码还展示了如何使用ADO.NET进行数据库操作,以及如何处理异常情况,这对于开发类似应用具有一定的参考价值。

    C#开发的Window下查看远程桌面源码

    【标题】"C#开发的Window下查看远程桌面源码"涉及到的是使用C#编程语言在Windows操作系统上实现远程桌面连接的功能。C#是Microsoft公司推出的一种面向对象的编程语言,广泛应用于Windows应用开发,包括桌面应用和...

    宽带IP精灵VB源代码,登记私有动态IP.rar

    在公用网络空间上,登记私有动态IP的地址 2.引导远程用户连接到私有空间或专有地址 3.根据应用( web/即时通讯/OA)不同,登记不同应用的IP地址,方便远端(应用的客户端)读取. 特点: 1.使用 微软网络控件: Microsoft ...

    java获取公网IP

    这个IP地址是动态的,也可能固定不变,取决于ISP的服务类型。要获取这个公网IP,我们可以通过向特定的HTTP服务发起请求,这些服务会返回请求发出的公网IP。 在Java中,我们可以创建一个类来实现这个功能。例如,`...

    c++实现读取全世界ip地址

    - **文件I/O**:从本地或远程服务器下载IP列表文件,使用C++标准库的`fstream`类进行读取。 - **文本解析**:IP地址可能以多种格式存储,如纯文本、CSV、JSON等,需要根据文件格式解析数据。 5. **并发与多线程**...

    IPServer说明书

    1. **动态IP解析**:对于使用动态IP的设备,通过IPServer,远程用户可以查询设备的最新IP地址。 2. **端口映射**:如果设备不在公网直连,需在内部网络的网关上进行端口映射,确保数据通信(通常为8000端口)不冲突...

    凌科远程LUC系列组态基恩士KV8000连接(ethernetip)

    4.1 硬件连接:正确连接KV8000与远程IO模块电源,并将测试对象PLC的Ethernet接口,通过专用以太网电缆接入到远程IO模块的以太网口上。 4.2 模块参数及IP地址配置:将本站的硬件全部配置好之后,利用LAEConfig软件...

    OPC DA 远程&本地

    然而,为了实现本地和远程的切换,开发者可能在代码中设计了动态切换服务器连接的逻辑,根据用户输入的服务器信息来决定连接方式。 总的来说,这个项目提供了学习和理解OPC DA通信机制的一个实践案例,对于工业自动...

    Delphi实现远程屏幕抓取

    Delphi实现远程屏幕抓取通常会涉及到两个主要的应用程序:客户端(VClient.exe)和服务端(VServer.exe)。其中,服务端负责屏幕的捕获并将其转换为可传输的数据格式,而客户端则负责接收这些数据并进行显示。 ####...

    远程桌面 Delphi 源代码

    这通常涉及到TCP/IP协议,用于建立可靠的连接,以及可能的UDP协议用于辅助数据传输。Delphi中的`TIdTCPClient`和`TIdTCPServer`组件可以方便地处理这些网络通信任务。 2. **编码与解码**:远程桌面需要将服务器屏幕...

    易语言动态域名IP更新.rar

    动态域名IP更新,也被称为DDNS(Dynamic Domain Name System),是一种网络服务,用于解决动态IP地址用户的问题。当用户的公网IP地址发生变化时,DDNS服务会自动将新的IP地址更新到域名系统中,确保用户可以通过固定...

    4- 远程配置_hlog.dll_海康威视相机参数远程配置_远程配置海康_源码.zip

    标题 "4- 远程配置_hlog.dll_海康威视相机参数远程配置_远程配置海康_源码.zip" 暗示了这个压缩包包含了一组与海康威视相机远程配置相关的源代码和可能的动态链接库文件(hlog.dll)。海康威视是一家知名的安防监控...

    C#调用大华摄像机100%可用

    在本示例中,"C#调用大华摄像机100%可用"是一个用C#编写的程序,其目标是与浙江大华的网络摄像机进行交互。大华是中国知名的安防设备制造商,提供各种网络摄像机产品,这些产品通常可以通过网络接口进行远程控制和...

    易语言远程桌面连接

    在本项目中,开发者使用易语言构建了一个能够实现远程控制的功能,使用户可以远程连接到另一台计算机进行操作。 远程桌面连接是Windows操作系统内置的一项功能,允许用户通过网络对另一台电脑进行图形化的远程操作...

    JAVA Socket远程执行任务

    这种技术常用于分布式系统,例如远程监控、自动化测试、动态部署等场景,允许管理员或程序在远程服务器上执行特定的操作。 了解并掌握Java Socket远程执行任务的概念和技术,对于开发分布式系统和进行网络编程有着...

Global site tag (gtag.js) - Google Analytics