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
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
C# 取得内网IP、外网IP、客户端IP方法的更多相关文章
- C#获取内网和外网IP
写了个小客户端,里面用到了获取内网和外网的IP地址,代码如下: // InnerIP var ipHost = Dns.Resolve(Dns.GetHostName()); ]; innerIP = ...
- 内网IP外网IP的关联及访问互联网原理
首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的.但两个局域网内的内网IP可以有相同的. 外网:即互联网 ...
- 如何通过IP地址分辨公网、私网、内网、外网
如何通过IP地址分辨公网.私网.内网.外网 内.外网是相对于防火墙而言的,在防火墙内部叫做内网,反之就是外网. 在一定程度上外网等同于公网,内网等同于私网. 地址为如下3个区域就是处于私网 ...
- 如何快速判断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 ...
- H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器
H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器 ------------------------------------------------------------ ...
- UNIX网络编程——内网与外网间通信
QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登 ...
- SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)
最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...
- iptables内网地外网之间访问
环境:一台带外网和内网的机器,另一台只有内网,默认不能上网.两台机器都是centos系统带外网机器的外网ip为 123.221.20.11, 内网网关ip为 192.168.15.100内网机器的内网 ...
- Hyper-V 配置虚拟机内网及外网环境
一.为Hyper-V虚拟机准备内外网环境 1.内网环境——虚拟机与虚拟机及主机可以互通
- 利用iptables的NAT代理实现内网访问外网
利用NAT代理实现内网访问外网 背景及原理 若局域网中的两台计算机只能有一台能够访问外网,而这两台计算机之间能相互通信,那么可以配置能访问外网的那台服务器实现路由器的功能,即实现其他机器的NAT转换, ...
随机推荐
- web 面试题、简单题、复习题
1. 概述MVC体系结构,各个部分都有那些技术来实现? M即model(模型,bean(domain)层)由javabean或EJB实现:V即view(视图,显示层)由jsp实现:C即controll ...
- android之Notification通知
我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. pac ...
- OPCDAAuto.dll的C#使用方法浅析
上次研究了.Net版本的OPC API dll,这次我采用OPCDAAuto.dll来介绍使用方法.以下为我的源代码,有详细的注释无需我多言.编译平台:VS2008SP1.WINXP.KEPServe ...
- 如何配置数据库ODBC数据源
在<调整计算机的设置>中,点击<系统和安全>. 点击<管理工具>. 点击<数据源(ODBC)>. 点击<系统用户>,然后,点击按 ...
- 你知道SOCKET吗
要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主 ...
- Java中计算对象的大小
一.计算对象大小的方法 Java中如何计算对象的大小呢,找到了4种方法: 1.java.lang.instrument.Instrumentation的getObjectSize方法: 2.BTrac ...
- 1139 First Contact
题意:给出n个人,m对朋友关系,其中带负号的表示女孩.然后给出k对查询a,b,要求找出所有a的同性别好友c,以及b的同性别好友d,且c和d又是好友关系.输出所有满足条件的c和d,按c的升序输出,若c编 ...
- 搭建了一个在线的机器学习webshell检测RESTful API
# 地址: http://118.190.147.89:5001/ 如果不能访问,联系sevck#jdsec.com # 说明: 简单的基于机器学习检测webshell:目前只支持php的检测 #使用 ...
- ocx控件针对网页刷新和关闭分别进行区分处理
当ocx加载在网页上时,如果对网页执行F5刷新事件,ocx控件会销毁ocx的窗口类,但是ocx的APP类是不会销毁的. 只有当网页被关闭时,才销毁app类. --------------------- ...
- java中的报错机制
异常:Exception,程序运行过程中因为一些原因,使得程序无法运行下去 注意:在程序能够运行起来的情况,不是程序编译通不过 举例:读文件,点击一个按钮,文件不存在:访问数据库服务器,数据库服务器停 ...