C#取得内网IP、外网IP、客户端IP方法

前言

  在 Windows Form Application 里对于取得 IP Address 有内网、外网两种 IP Address ,如果只需要取得内网 IP Address ,可以透过使用 IPHostEntry 类别取得,而外网的话就必须要发送一个 Request 到一个可以取得 IP Address 的网站后再分析 Response 的内容,这个网站可以自己做或者使用现成的,如 http://www.whatismyip.com.tw/ 。

  另外,在使用 Socket 通讯的情况下,也有可能有需要知道前来连结的客户端的 IP Address 是什么,这时就可以使用 Socket.RemoteEndPoint 属性来取得远程 IP 地址和通讯端口编号,以下就列出范例代码看看该如何使用。

范例程序代码

/// <summary>
        /// 取得外网 IP Address
        /// </summary>
        /// <returns></returns>
        private string GetExtranetIPAddress()
        {
            HttpWebRequest request = HttpWebRequest.Create("http://www.whatismyip.com.tw") as HttpWebRequest;
            request.Method = "GET";
            request.ContentType = "application/x-www-form-urlencoded";
            request.UserAgent = "Mozilla/5.0";
            string ip = string.Empty;
            WebResponse response = request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                string result = reader.ReadToEnd();
                string pattern = @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}";
                ip = Regex.Match(result, pattern).ToString();
            }
            return ip; // result: 210.125.21.xxx
        }

取得外网 IP Address

/// <summary>
        /// 取得本机 IP Address
        /// </summary>
        /// <returns></returns>
        private List<string> GetHostIPAddress()
        {
            List<string> lstIPAddress = new List<string>();
            IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
            foreach (IPAddress ipa in IpEntry.AddressList)
            {
                if (ipa.AddressFamily == AddressFamily.InterNetwork)
                    lstIPAddress.Add(ipa.ToString());
            }
            return lstIPAddress; // result: 192.168.1.17 ......
        }

取得本机 IP Address

/// <summary>
/// 执行服务器监听
/// </summary>
public static void RunServer()
{

    // 建立X509凭证
    ServerCertificate = new X509Certificate(Certificate, "ssl");
    // 监听任何IP Address来的讯息
    listener = new TcpListener(System.Net.IPAddress.Any, 17170);
    // 开启监听
    listener.Start();

    while (IsRun)
    {
        TcpClient client = listener.AcceptTcpClient();

        ProcessClient(client);
    }
}

/// <summary>
/// 接收客户端讯息处理并回复
/// </summary>
/// <param name="pClient"></param>
private static void ProcessClient(TcpClient pClient)
{
    SslStream sslStream = new SslStream(pClient.GetStream(), true);

    // 取得连接者 IP 与 Port
    IPEndPoint point = pClient.Client.RemoteEndPoint as IPEndPoint;
    string ip = point.Address.ToString(); // result: 127.0.0.1
    string port = point.Port.ToString(); // result: 55236

    // do something...
}

Socket 取得远程 IP Address 与 Port

string tempIP =string.Empty;if (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length >1)     tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();

如果是ADSL上网,获取公网ip

时间: 2024-10-13 12:01:20

C#取得内网IP、外网IP、客户端IP方法的相关文章

如何快速判断IP是内网还是外网(转)

TCP/IP协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-172.31.255.255 192.168.0.0/16:192.168.0.0-192.168.255.255 使用保留地址的网络只能在内部进行通信,而不能与其他网络互连.如果要与外部通信,那么必须通过网关与外部通信,这里使用了NAT, NAPT技术就是用来保证通信的代理机制. 提示:上述IP地址

树莓派实战1:查询自己内网,外网ip

这4个实战合起来的完成效果就是:让树莓派每小时把自己ip地址通过邮件自动地发送到自己邮箱 实战2 :http://blog.csdn.net/make_app/article/details/47305179 实战3 :http://blog.csdn.net/make_app/article/details/47305337 实战4:http://blog.csdn.net/make_app/article/details/47305387 0.系统环境 树莓派a+,系统wheezy 输入un

C#获取内网和外网IP

写了个小客户端,里面用到了获取内网和外网的IP地址,代码如下: // InnerIP var ipHost = Dns.Resolve(Dns.GetHostName()); var ipaddress = ipHost.AddressList[0]; innerIP = ipaddress.ToString(); /// <summary> /// 获得客户端外网IP地址 /// </summary> /// <returns>IP地址</returns>

H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器

H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 这个问题很经典的,防火墙上显然配置了NAT的方式进行了转换,但是内部用户在访问的

c语言 c++ 实现查看本地ip,外网ip, 本地主机名,查看http网址对应的ip

/******************************************************************************* 作者 :邓中强 Email :[email protected] QQ :1246747572 博客 :http://www.cnblogs.com/dzqdzq/ 时间 :2014/01/01 功能 ********************************************************************

BAT&VBS脚本:Windows连接VPN后同时登陆内网和外网

今天连公司的VPN,发现连上去之后就登陆不了外网了,上网查了下,再加上与同事的交流,发现连接VPN后同时登陆外网需要下面几个步骤: (我的环境:Windows 7 旗舰版 Service Pack 1) 1)建立好VPN,连接VPN 2)进入到VPN属性页面 3)找到网络选项卡,选中"Internet版本协议4(TCP/IPv4)",点击下方的"属性"按钮 4)在"Internet版本协议4(TCP/IPv4)"的属性界面中,点击"高级

Hyper-V 配置虚拟机内网及外网环境

一.为Hyper-V虚拟机准备内外网环境 1.内网环境——虚拟机与虚拟机及主机可以互通 内网环境的虚拟交换机使用仅内部网络,之后在本地配置内网的IP段即可 对vEthernet (localSwitch)设置IP 至此,所有连接到此交换机上的虚拟机,只要改好对应的IP地址就可以互通了 2.外网环境——使虚拟机也可以连到互联网上 外网环境的虚拟交换机使用外部网络,并选择可以正常上网的物理网卡,我这里是PC,对于无线网卡没有测试,应用后查看本地网络 表示vEthernet (internetSwit

路由表配置及多网卡同时使用内网和外网

CMD命令:route 子命令1:route print 查看路由表 子命令2:route add 添加静态路由 子命令3:route delete 删除静态路由 查看 使用子命令1结果如下图 (注:红框为动态路由[由系统管理,无需要人工管理],绿框为静态路由[可由人工自由增删]) 可以看出路由表由以下几部分组成:网络地址.网络掩码.网关地址.跃点数,这里我们主要关心网络地址和网关地址,是指本机访问的目标IP时使用的网关(也就是网卡),因此我们需要配置XXX地址使用XXX网关即可达到我们的目的.

如何理解内网和外网

回答一: 关于内网和外网 网上经常看到有人问内网和外网的区别,其实外网和内网的概念很模糊,全看你怎么理解.希望这篇文章能帮助大家明确一些概念. 简单的说,自己的单位或者家庭.小区内部有局域网:单位.家庭之外有覆盖范围极大的网络,比如internet,这个大网络延伸到了我们的单位.家庭(通过光纤.网线.电话线等).我们把自己的局域网连接到internet上,那么我们的访问范围就从局域网扩展到了整个internet.这时候,就说局域网是内网,internet是外网. 同理,如果你们单位的局域网很庞大

防火墙网络性能测试-(3)内网与外网之间的网络性能测试

飞塔防火墙内网接口与外网接口配置 通常飞塔防火墙的外网Wan口用来接宽带,因为需要测试外网口的数据读取,所以Wan口连接了笔记本B,Wan口IP地址设为10.0.8.1,笔记本B的IP地址设置为10.0.8.38,笔记本A连接到内网Intelnal任一接口,这样比较有代表性,内网Intelnal的IP是10.0.1.1,笔记本A的IP地址设置为10.0.1.38. ① 防火墙的外网口,设置为静态IP地址: ② 内网internal的IP地址为10.0.1.1,外网wan1的IP地址为10.0.8