`
menjoy
  • 浏览: 421582 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

获取本机外网IP地址(External IP Address)

    博客分类:
  • Java
阅读更多

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 获取本机外网IP地址
 * 思想是访问网站http://checkip.dyndns.org/,得到返回的文本后解析出本机在外网的IP地址
 * @author Administrator
 *
 */
public class ExternalIpAddressFetcher {
    // 外网IP提供者的网址
    private String externalIpProviderUrl;

    // 本机外网IP地址
    private String myExternalIpAddress;

    public ExternalIpAddressFetcher(String externalIpProviderUrl) {
        this.externalIpProviderUrl = externalIpProviderUrl;

        String returnedhtml = fetchExternalIpProviderHTML(externalIpProviderUrl);
        
        parse(returnedhtml);
    }

    /**
     * 从外网提供者处获得包含本机外网地址的字符串
     * 从http://checkip.dyndns.org返回的字符串如下
     * <html><head><title>Current IP Check</title></head><body>Current IP Address: 123.147.226.222</body></html>
     * @param externalIpProviderUrl
     * @return
     */
    private String fetchExternalIpProviderHTML(String externalIpProviderUrl) {
        // 输入流
        InputStream in = null;
        
        // 到外网提供者的Http连接
        HttpURLConnection httpConn = null;

        try {
            // 打开连接
            URL url = new URL(externalIpProviderUrl);
            httpConn = (HttpURLConnection) url.openConnection();
                        
            // 连接设置
            HttpURLConnection.setFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.setRequestProperty("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");

            // 获取连接的输入流
            in = httpConn.getInputStream();
            byte[] bytes=new byte[1024];// 此大小可根据实际情况调整
            
            // 读取到数组中
            int offset = 0;
            int numRead = 0;
            while (offset < bytes.length
                   && (numRead=in.read(bytes, offset, bytes.length-offset)) >= 0) {
                offset += numRead;
            }
            
            // 将字节转化为为UTF-8的字符串        
            String receivedString=new String(bytes,"UTF-8");
            
            // 返回
            return receivedString;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
                httpConn.disconnect();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        // 出现异常则返回空
        return null;
    }
    
    /**
     * 使用正则表达式解析返回的HTML文本,得到本机外网地址
     * @param html
     */
    private void parse(String html){
        Pattern pattern=Pattern.compile("(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})", Pattern.CASE_INSENSITIVE);    
        Matcher matcher=pattern.matcher(html);        
        while(matcher.find()){
            myExternalIpAddress=matcher.group(0);
        }    
    }    

    /**
     * 得到本机外网地址,得不到则为空
     * @return
     */
    public String getMyExternalIpAddress() {
        return myExternalIpAddress;
    }
    
    public static void main(String[] args){
        ExternalIpAddressFetcher fetcher=new ExternalIpAddressFetcher("http://checkip.dyndns.org/");
        
        System.out.println(fetcher.getMyExternalIpAddress());
    }
}
 
分享到:
评论

相关推荐

    Qt获取外网IP地址代码

    在Qt开发中,获取外网IP地址是一项常见的需求,特别是在构建网络应用时,可能需要知道设备的公网IP以便于远程通信。Qt库提供了一系列的网络功能,包括TCP/IP通信,使得开发者可以方便地处理网络相关的任务。下面我们...

    asp.net得到本机IP地址

    4. 获取外网IP地址: 如果你需要获取本机对外的公网IP,通常需要通过访问某些提供公网IP查询服务的网站来获取,因为本地网络环境无法直接获取。以下是一个简单的示例,使用`HttpClient`类来获取: ```csharp using ...

    获取外网IP

    在IT领域,获取外网IP是一项常见的需求,特别是在网络编程和服务器管理中。外网IP,也称为公网IP,是互联网上唯一标识你设备的地址,使得其他网络上的设备能够与之通信。以下是对这个主题的详细解释: 1. **什么是...

    简单获得外网IP

    在IT领域,获取外网IP地址通常用于诊断网络连接问题、建立远程连接(如SSH或远程桌面)、监控网络变化或进行地理位置定位等。公网IP是由互联网服务提供商(ISP)分配给设备接入互联网时使用的唯一标识。 以下是一个...

    脚本获取外网IP发到指定邮箱

    首先,我们需要理解如何使用VBScript获取外网IP。这通常涉及到HTTP请求,因为我们可以向提供IP查询服务的网站发起请求,然后解析返回的HTML内容来提取IP地址。例如,可以向"http://checkip.dyndns.org"这样的站点...

    C++ Win32 获取计算机的内网与外网Ip

    在IT领域,尤其是在网络编程中,获取计算机的内网与外网IP地址是常见的需求。本文将详细讲解如何使用C++和Win32 API来实现这一功能,特别是结合Visual Studio 2008(VS2008)的开发环境。 首先,我们需要了解一些...

    .NET获取不同地区的天气预报和外网IP地址

    在.NET开发中,获取不同地区的天气预报和外网IP地址是一项常见的需求,这通常涉及到网络通信和API调用。本文将详细讲解如何利用.NET技术来实现这一功能,主要围绕两个核心概念:天气预报的获取与外网IP地址的查询。 ...

    获取局域网外网地址并上传到免费FTP空间

    这段代码首先初始化Winsock,然后通过`gethostbyname`函数获取www.google.com的IP地址,因为通常外网IP可以通过访问互联网上的任何网站来间接获得。最后,我们使用`inet_ntoa`将二进制IP地址转换为字符串形式。 ...

    Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP

    本文将详细介绍如何使用Shell脚本来获取本地网卡的IP地址、MAC地址、子网掩码、DNS服务器IP以及外网IP。以下是一个具体的实现示例: ```bash #!/usr/bin/env bash # 脚本名称:get_network_info.sh # 作者:Purple_...

    py代码-动态加载UI-------- 获取本机名称和IP地址的例子

    如果需要获取外网IP,可能需要使用第三方库如`requests`,向公共API发送请求获取: ```python import requests def get_external_ip(): response = requests.get('https://api.ipify.org') return response.text...

    windows下VMware Fusion创建Centos6.7方法.docx

    Windows 下 VMware Fusion 创建 CentOS 6.7 ... IConfiguration of CentOS 6.7 virtual machine on VMware Fusion for Windows, and configuring fixed IP address and connecting to internal and external networks.

    H3C交换机常用配置命令.doc

    1. 通过DHCP方式获取IP地址:]ip address dhcp-alloc 该命令用于通过DHCP方式获取IP地址。 2. 取消DHCP:]undo ip address dhcp-alloc 该命令用于取消DHCP。 3. 显示DHCP客户信息:&lt;H3C&gt;display dhcp 该命令...

    cisco路由器交换机的配置命令

    配置NAT源地址转换(`ip nat inside source static internal_ip external_ip`),并指定接口为内网或外网接口(`ip nat inside`/`outside`)。 7. **CLI调试与日志**:调试命令(如`debug ip packet`)用于追踪...

    AirPlane飞机游戏

    适合不能上外网,又不爱玩windows自带那几个游戏的人,来试试这个小游戏吧~-Nostalgic look, I believe many people have played, a few paintings on paper box, and then add a few different directions of ...

    思科模拟实验

    - `ip nat inside source static &lt;internal-ip&gt; &lt;external-ip&gt;`:配置静态NAT规则,将内部IP地址映射为外部IP地址。 - `ip nat pool &lt;pool-name&gt; &lt;start-ip&gt; &lt;end-ip&gt; netmask &lt;subnet-mask&gt;`:定义一个地址池,供...

    H3C交换机常用配置命令大全

    1. DHCP获取IP:`[H3C-Vlan-interface20]ip address dhcp-alloc` 使管理接口通过DHCP获取IP地址。 2. 取消DHCP获取:`[H3C-Vlan-interface20]undo ip address dhcp-alloc` 返回到静态IP配置。 3. 查看DHCP信息:`[H3...

    h3c交换机常用配置.doc

    1. DHCP获取IP地址:`[H3C-Vlan-interface20]ip address dhcp-alloc` 使管理VLAN接口通过DHCP服务获取IP地址。 2. 取消DHCP获取:`[H3C-Vlan-interface20]undo ip address dhcp-alloc` 恢复静态IP配置。 3. 显示DHCP...

    H3C交换机常用配置命令大全.doc.docx

    1. `ip address dhcp-alloc`: 使接口通过DHCP获取IP地址。 2. `undo ip address dhcp-alloc`: 停止DHCP获取。 3. `display dhcp`: 查看DHCP客户端信息。 4. `debugging dhcp-alloc`与`undo debugging dhcp-alloc`: ...

    ios-ips配置

    这里的`your_tftp_server_ip`需要替换为实际的TFTP服务器IP地址。 #### 四、高级配置选项 除了基本配置外,Cisco还提供了一些高级配置选项,如调整签名的有效性、更改签名的动作等。 1. **退休/恢复签名**:可以...

    路由器访问控制列表详解

    - `source address`:定义需要过滤的源 IP 地址。 - `host/any`:`host` 表示精确匹配单个主机,`any` 匹配所有主机。 - `wildcard-mask`:通配符屏蔽码,与子网掩码相反,用于指定哪些部分的 IP 地址应被匹配,哪些...

Global site tag (gtag.js) - Google Analytics