- 浏览: 326078 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
libaogui777:
前辈,您好, 使用PDFbox 提取内容遇到一个问题,想请教您 ...
java进行pdf解析-----pdfbox -
xin_hany:
提示惊醒了一下,解决了一个让人惆怅的问题,
danga的MemcachedClient的几个缺陷 -
roroyangivan:
牛B啊。。。我觉得 这种 回答。。。阿里的的CTO 都 HOL ...
怎样才是一个好的架构? -
406657836:
今天知道了一个线程创建时会给stack分配1M内存?一个线程默 ...
jvm线程的stack -
linzx0212:
受教了……
danga的MemcachedClient的几个缺陷
如何通过自己的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;
}
}
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);
%>
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);
%>
发表评论
-
Grails开发经验
2012-07-17 12:00 5268最近用grails开发,一路入坑多次,跌跌撞撞总算快走上坦途了 ... -
Ruby API代码技巧
2012-05-23 21:53 1132http://www.slideshare.net/ihowe ... -
TeracMiracle反编译成功
2005-11-09 10:57 733TM:中国人写的一个jsp版本的Blog程序,今天被我反编译完 ... -
jConfig关注
2005-11-09 11:25 788jConfig关注 不知道是不是有必要用jConfig。好 ... -
jdbc使用直接查询时结果集指针只能向前
2005-11-11 17:40 805今天发现这个现象,不能使用ResultSet.last()方法 ... -
php下扩展模块的配置
2006-01-18 21:50 1004php下扩展php_curl.dll的安装 ... -
学习中,来报个到。
2006-02-17 10:40 973公司早就决定全部转型到J2EE平台,但由于领导层 ... -
bug记录:mysql生成id后获取出错
2008-04-07 17:48 887今天同事给我看一段代码,是我前年写的。他发现了一个bug。代码 ... -
spring的ContextLoaderListener与DispatcherServlet在WebApplicationContext上的细微区别
2008-04-09 09:29 1896我们知道spring在web.xml中可以有三种方式来配置其x ... -
Tomcat崩溃事件
2008-06-04 11:05 3691今天一大早产品一部项目经理就来找我,他们的一台服务器昨天晚上t ... -
inner class与重载问题
2008-08-21 14:22 812今天貌似发现了一个java的bug.这是一个内部匿名类调用外部 ...
相关推荐
在IT领域,尤其是在网络编程中,获取本机的IP地址是一项基本操作。"易语言取本机所有IP地址"是一个针对...在实际应用中,这样的功能常用于网络服务的配置、网络诊断工具的开发以及多网络接口情况下的动态IP选择等场景。
### 3322动态IP解析知识点 ...通过以上介绍,我们了解到3322动态IP解析服务及其配置过程,这种服务对于需要远程访问家庭网络资源的用户来说非常有用。正确配置并使用该服务可以极大地提高远程访问的便利性和可靠性。
6. **安全性与隐私**:在进行远程获取网页内容时,要注意遵守目标网站的使用条款,避免频繁请求导致被封IP,同时要尊重用户隐私,不要获取未经授权的数据。 7. **数据解析**:获取到网页内容后,可能需要进一步处理...
4. **图像显示**:读取到的图像需要在用户界面上显示,这通常涉及到图像处理库,如OpenCV,它可以方便地进行图像显示、处理和分析。 5. **C++编程**:作为程序开发的主要语言,C++提供了强大的性能和灵活性,适合...
### 如何获得主机IP,检测主机IP是否改变源码...这种机制对于动态IP环境下的远程访问特别有用。此外,该代码还展示了如何使用ADO.NET进行数据库操作,以及如何处理异常情况,这对于开发类似应用具有一定的参考价值。
【标题】"C#开发的Window下查看远程桌面源码"涉及到的是使用C#编程语言在Windows操作系统上实现远程桌面连接的功能。C#是Microsoft公司推出的一种面向对象的编程语言,广泛应用于Windows应用开发,包括桌面应用和...
在公用网络空间上,登记私有动态IP的地址 2.引导远程用户连接到私有空间或专有地址 3.根据应用( web/即时通讯/OA)不同,登记不同应用的IP地址,方便远端(应用的客户端)读取. 特点: 1.使用 微软网络控件: Microsoft ...
这个IP地址是动态的,也可能固定不变,取决于ISP的服务类型。要获取这个公网IP,我们可以通过向特定的HTTP服务发起请求,这些服务会返回请求发出的公网IP。 在Java中,我们可以创建一个类来实现这个功能。例如,`...
- **文件I/O**:从本地或远程服务器下载IP列表文件,使用C++标准库的`fstream`类进行读取。 - **文本解析**:IP地址可能以多种格式存储,如纯文本、CSV、JSON等,需要根据文件格式解析数据。 5. **并发与多线程**...
1. **动态IP解析**:对于使用动态IP的设备,通过IPServer,远程用户可以查询设备的最新IP地址。 2. **端口映射**:如果设备不在公网直连,需在内部网络的网关上进行端口映射,确保数据通信(通常为8000端口)不冲突...
4.1 硬件连接:正确连接KV8000与远程IO模块电源,并将测试对象PLC的Ethernet接口,通过专用以太网电缆接入到远程IO模块的以太网口上。 4.2 模块参数及IP地址配置:将本站的硬件全部配置好之后,利用LAEConfig软件...
然而,为了实现本地和远程的切换,开发者可能在代码中设计了动态切换服务器连接的逻辑,根据用户输入的服务器信息来决定连接方式。 总的来说,这个项目提供了学习和理解OPC DA通信机制的一个实践案例,对于工业自动...
Delphi实现远程屏幕抓取通常会涉及到两个主要的应用程序:客户端(VClient.exe)和服务端(VServer.exe)。其中,服务端负责屏幕的捕获并将其转换为可传输的数据格式,而客户端则负责接收这些数据并进行显示。 ####...
这通常涉及到TCP/IP协议,用于建立可靠的连接,以及可能的UDP协议用于辅助数据传输。Delphi中的`TIdTCPClient`和`TIdTCPServer`组件可以方便地处理这些网络通信任务。 2. **编码与解码**:远程桌面需要将服务器屏幕...
动态域名IP更新,也被称为DDNS(Dynamic Domain Name System),是一种网络服务,用于解决动态IP地址用户的问题。当用户的公网IP地址发生变化时,DDNS服务会自动将新的IP地址更新到域名系统中,确保用户可以通过固定...
标题 "4- 远程配置_hlog.dll_海康威视相机参数远程配置_远程配置海康_源码.zip" 暗示了这个压缩包包含了一组与海康威视相机远程配置相关的源代码和可能的动态链接库文件(hlog.dll)。海康威视是一家知名的安防监控...
在本示例中,"C#调用大华摄像机100%可用"是一个用C#编写的程序,其目标是与浙江大华的网络摄像机进行交互。大华是中国知名的安防设备制造商,提供各种网络摄像机产品,这些产品通常可以通过网络接口进行远程控制和...
在本项目中,开发者使用易语言构建了一个能够实现远程控制的功能,使用户可以远程连接到另一台计算机进行操作。 远程桌面连接是Windows操作系统内置的一项功能,允许用户通过网络对另一台电脑进行图形化的远程操作...
这种技术常用于分布式系统,例如远程监控、自动化测试、动态部署等场景,允许管理员或程序在远程服务器上执行特定的操作。 了解并掌握Java Socket远程执行任务的概念和技术,对于开发分布式系统和进行网络编程有着...