获取客户端IP 和 外网IP

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;

namespace Common
{
public class CheckIP
{
#region 判断是否是IP格式

public static bool IsIPAddress(string strIP)
{
if (string.IsNullOrEmpty(strIP) || strIP.Length < 7 || strIP.Length > 15)
return false;
const string regFormat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$";
var regex = new Regex(regFormat, RegexOptions.IgnoreCase);
return regex.IsMatch(strIP);
}

#endregion

#region 取客户端真实IP

public static string GetIPAddress
{
get
{
var result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(result))
{
if (result.IndexOf(".") == -1)
{
result = null;
}
else
{
if (result.IndexOf(",") != -1) //有“,”,可能有多个代理。取第一个不是内网的IP
{
result = result.Replace(" ", "").Replace("‘", "");
string[] temparyip = result.Split(",;".ToCharArray());
for (int i = 0; i < temparyip.Length; i++)
{
if (IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.")
{
return temparyip[i]; //找到不是内网的地址
}
}
}
else if (IsIPAddress(result)) //只有一个代理,且就是IP格式
return result;
else
result = null; //代理中的内容非IP,取IP
}
}

//string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress;
return result;
}
}

#endregion

#region 获取公网IP

public static string GetNetIP()
{
string tempIP = "";
try
{
System.Net.WebRequest wr = System.Net.WebRequest.Create("http://ip.3322.org/");
System.IO.Stream s = wr.GetResponse().GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(s, System.Text.Encoding.GetEncoding("gb2312"));
tempIP = sr.ReadToEnd().ToString();//读取网站的数据
tempIP=tempIP.Split(‘\n‘)[0];
sr.Close();
s.Close();
}
catch
{
if (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length > 1)
{
tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();

}
if (string.IsNullOrEmpty(tempIP))
{
return GetIP();
}
}
return tempIP;
}

#endregion

#region 获取客户端IP地址

public static string GetIP()
{
string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(result))
{
result = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
}
if (string.IsNullOrEmpty(result))
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.IsNullOrEmpty(result))
{
result = HttpContext.Current.Request.UserHostAddress;
}
if (string.IsNullOrEmpty(result))
{
return "0.0.0.0";
}
return result;
}

#endregion
}
}

原文地址:https://www.cnblogs.com/clj0102/p/9262404.html

时间: 2024-08-08 15:19:35

获取客户端IP 和 外网IP的相关文章

内网IP和外网IP

1.什么是内网内网就是局域网,比如一个公司的局域网,局域网内每台计算机的IP地址是互异的,但不同局域网内的IP是可以相同的.2.什么是外网外网就是互联网,内网的所有计算机都是连接到一个外网IP,通过外网IP对外交换数据.内网的IP地址不同,但共用一个外网IP.两个IP同时存在,一个对内,一个对外.3.NATNAT(Network Address Translation,网络地址转换)是路由器的主要功能,负责内网IP和外网IP之间的转换.属于一种接入广域网(WAN)的技术.NAT解决了IP地址不足

内网IP与外网IP

内网IP与外网IP的区别 解释一 外网IP地址全世界仅分配给一个网络设备(比如你在家拨号,分配给你一个IP地址吧,那个地址是唯一的,你用你机器做个网站,别人访问你的IP地址就可以连接到你的机器) 你家有2台电脑,通过一个路由器接好,为了区分每台电脑每台电脑分配一个内部的IP地址,比如192.168.0.2 这个地址是内部的,也叫私网地址,这两台电脑都是通过一个外网IP地址上网的,但他们每个人还有个内网的地址,内网的地址外网不能直接访问. 解释二 路由以里的叫内网. 路由以外的叫外网. 内网IP呢

根据Request获取客户端IP 内网IP及外网IP

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为http://www.xxx.com/ 的URL时,用request.getRemoteAddr() 方法获取的IP地址是:127.0.0.1 或 192.168.1.110 ,而并不是客户

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

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

C#获取本机的外网IP

/// <summary> /// 功能:获取本地的外网IP地址 /// 作者:黄海 /// 时间:2016-07-22 /// </summary> /// <returns></returns> private static string GetPublicIp() { var urlList = new List<string> { "http://ip.qq.com/", "http://pv.sohu.co

vue实现获取内网ip和外网ip

1.内网IP 注意:有的浏览器获取到的是IPv4地址,有的是IPv6地址 <template> <section class="p-10"> <h1>{{ ip }}</h1> </section> </template> <script> export default { data() { return { ip: '' }; }, methods: { getUserIP(onNewIP) { le

如何判断自己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技术就是用来保证通信的代理机制. 另外,一些宽带

关于session失效的问题(内网IP与外网IP)

参考: 测试环境测试支付宝支付,以ip方式访问,而支付宝支付成功后回调地址配置的是域名形式的.造成支付成功后访问成功页面进入了登录页面 同一个网站,通过域名登录和通过IP登录,所产生的session是不相同的,如果希望使用登录时的session信息,那么调用的时候需要注意与登录方式(域名还是IP)保持一致才可以. --------------------- 作者:驿漾峰狂 来源:CSDN 原文:https://blog.csdn.net/myfengcc/article/details/7809

如何获取本机内网和外网IP(windows+linux)

1:场景描述 在做Netty相关项目的时候,我们往往需要绑定本机的IP和端口号,如果我们把它写在配置文件中,那么我们每次换电脑运行或者部署到其他环境时候都需要修改配置文件.这样就会比较麻烦,如果我们把它做成智能的获取本机的IP,这样我们的代码的可移植性就提高了.下面就介绍一种在windows和linux下面可以智能获取我们本机的局域网IP和外网IP的方法,不妥之处还请大家多多指教. 2:解决方法以及代码 首先贴上获取IP的工具类 /** * Copyright (C) 2015 Raxtone