前言

  在 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

private static string GetIP()
{
string tempip = "";
try
{
WebRequest wr = WebRequest.Create("http://www.ip138.com/ips138.asp");
Stream s = wr.GetResponse().GetResponseStream();
StreamReader sr = new StreamReader(s, Encoding.Default);
string all = sr.ReadToEnd(); //读取网站的数据 int start = all.IndexOf("您的IP地址是:[") + ;
int end = all.IndexOf("]", start);
tempip = all.Substring(start, end - start);
sr.Close();
s.Close();
}
catch
{
}
return tempip;
}

取得外网ip

/// <summary>
/// 执行服务器监听
/// </summary>
public static void RunServer()
{ // 建立X509凭证
ServerCertificate = new X509Certificate(Certificate, "ssl");
// 监听任何IP Address来的讯息
listener = new TcpListener(System.Net.IPAddress.Any, );
// 开启监听
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 >)     tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[].ToString();

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

【ASP.NET开发】获取客户端IP地址 via C#

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

  1. C#获取内网和外网IP

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

  2. 内网IP外网IP的关联及访问互联网原理

    首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的.但两个局域网内的内网IP可以有相同的. 外网:即互联网 ...

  3. 如何通过IP地址分辨公网、私网、内网、外网

    如何通过IP地址分辨公网.私网.内网.外网   内.外网是相对于防火墙而言的,在防火墙内部叫做内网,反之就是外网.   在一定程度上外网等同于公网,内网等同于私网.   地址为如下3个区域就是处于私网 ...

  4. 如何快速判断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-1 ...

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

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

  6. UNIX网络编程——内网与外网间通信

    QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登 ...

  7. SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)

    最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...

  8. iptables内网地外网之间访问

    环境:一台带外网和内网的机器,另一台只有内网,默认不能上网.两台机器都是centos系统带外网机器的外网ip为 123.221.20.11, 内网网关ip为 192.168.15.100内网机器的内网 ...

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

    一.为Hyper-V虚拟机准备内外网环境 1.内网环境——虚拟机与虚拟机及主机可以互通

  10. 利用iptables的NAT代理实现内网访问外网

    利用NAT代理实现内网访问外网 背景及原理 若局域网中的两台计算机只能有一台能够访问外网,而这两台计算机之间能相互通信,那么可以配置能访问外网的那台服务器实现路由器的功能,即实现其他机器的NAT转换, ...

随机推荐

  1. 洛谷 1600 (NOIp2016) 天天爱跑步——树上差分

    题目:https://www.luogu.org/problemnew/show/P1600 看TJ:https://blog.csdn.net/clove_unique/article/detail ...

  2. dxjk中 支付宝二维码支付 git 存疑

    线上的vendor/latrell/alipay 文件拉取不了至本地,失去了git监控 要想本地使用 1.注释掉config/app.php 'providers' 下的Latrell模块 2.下载线 ...

  3. MySQL for Linux错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    参考链接:http://www.cnblogs.com/gumuzi/p/5711495.html

  4. split的用法回顾,快忘记了@ →@

    split:用for循环时不要忘记是数组名.length package com.aaa; //split的用法把指定的字符串按指定的分割符进行分割,然后返回字符串 数组 public class f ...

  5. java排序。。简单的冒泡排序

    总结:一种简单的交换顺序,从数左边开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将较大值后移,每经过一轮排序后,值最大的元素将移到末尾, 此时记下该元素的位置,下一轮排序只需比较到此位置即 ...

  6. thinkphp中的多字段模糊匹配

    引言:有时候查询要匹配多个字段.比如查询地址,地址是由多个字段组成的.有省.市.区等等,以及详细地址.这个时候如何查询呢? 实现不同字段相同的查询条件 $User = M("User&quo ...

  7. javascript知识

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...

  8. python开发mysql:表关系&单表简单查询

    一 一对多,多对一 1.1 建立多对一 ,一对多的关系需要注意 先建立被关联的表,被关联的字段必须保证时唯一的 在创建关联的表,关联的字段一定是可以重复的 1.2 示例: 出版社 多对一,多个老师可能 ...

  9. mybatis 控制器注解介绍(一)

    @RequestMapping("LoginController")public class LoginController { // 路径参数{name}填入用户名,{pass} ...

  10. HTML5 使用sessionStorage实现页面返回刷新

    需求:在某个列表页面跳转到增加新项目页面后需要返回到前一个页面 并且数据最新数据.刚开始是做法是 history.back();方法 返回后页面不会自动刷新的.在新的页面重新访问之前页面的链接可以访问 ...