IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【原创】ASP.NET Core中远程IP地址相关的编码 -> 正文阅读

[网络协议]【原创】ASP.NET Core中远程IP地址相关的编码

获取远程客户端IP地址

由于asp.net可能会使用反向代理,因此判断就多了几步,代码如下:

 var ip = Request.HttpContext.Connection?.RemoteIpAddress?.ToString() ?? "0.0.0.0";
 if (Request.Headers.ContainsKey("X-Real-IP"))
 {
     ip = Request.Headers["X-Real-IP"].ToString();
 }
 else if (Request.Headers.ContainsKey("X-Forwarded-For"))
 {
     ip = Request.Headers["X-Forwarded-For"].ToString();
 }
 else if (Request.Headers.ContainsKey("X-Original-For"))
 {
     var ipaddAdndPort = Request.Headers["X-Original-For"].ToArray()[0];
     ip = ipaddAdndPort.Split(':')[0];
 }

IP地址与数字之间的转换

public static class StringIpAddressExt
{
	//把IP地址字符串转换成一个long
    public static long IpToLong(this string ip)
    {
#pragma warning disable CS0618 // 类型或成员已过时
        var address = IPAddress.Parse(ip);
        var a1 = IPAddress.HostToNetworkOrder((int)address.Address);
        return (long)(uint)a1;
#pragma warning restore CS0618 // 类型或成员已过时
    }
    //把long转换成一个IP地址字符串
    public static string LongToIp(this long lon)
    {
        var ipLong = IPAddress.NetworkToHostOrder((int)lon) & 0x00000000FFFFFFFF;
        return new IPAddress(ipLong).ToString();
    }
}

判断客户端IP地址是否在某一个范围内

string ip="192.168.240.123";
string ipStart="192.168.240.0";
string ipEnd="192.168.240.255";

var ipLong=ip.IpToLong();
var ipStartLong=ipStart.IpToLong();
var ipEndLong=ipEnd.IpToLong();

if(ipLong >= ipStartLong && ipLong <=ipEndLong)
{
	//ip在范围内
}

//把long转换成Ip地址字符串
var ipAddress=ipLong.LongToIp();

IP地址范围列表

 private List<Tuple<long, long>> FillIpRange(string ipConfigs)
 {
     var ipTemp = new List<Tuple<long, long>>();
     foreach (var item in configuration.GetSection(ipConfigs).GetChildren())
     {
         if (item.Value.Contains("-"))
         {
             //  "202.115.128.1-202.115.128.2",
             var ips = item.Value.Split('-');
             ipTemp.Add(new Tuple<long, long>(ips[0].IpToLong(), ips[1].IpToLong()));
             continue;
         }

         if (item.Value.Contains("/"))
         {
             //  "192.168.240.0/20",
             //  "202.115.128.0/255.255.255.0",
             var ips = item.Value.Split('/');
             if (ips[1].Length <= 2)
             {
                 //  "192.168.240.0/20",
                 var ip0 = ips[0].IpToLong();
                 var mask = int.Parse(ips[1]);

                 var bits = 0xFFFFFFFF << (32 - mask);
                 var aa1 = (ip0 | ~bits);
                 ipTemp.Add(new Tuple<long, long>(ip0 & bits, ip0 | ~bits));
             }
             else
             {
                 //  "202.115.128.0/255.255.255.0",
                 var ip0 = ips[0].IpToLong();
                 var mask = ips[1].IpToLong();

                 var ip1 = ip0 & mask;
                 var ip2 = ip0 | ~mask;
                 ipTemp.Add(new Tuple<long, long>(ip1, ip2));
             }
             continue;
         }

         //"202.115.128.2"
         var ip01 = item.Value.IpToLong();
         ipTemp.Add(new Tuple<long, long>(ip01, ip01));
     }
     return ipTemp;
 }
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:30:35  更:2022-04-01 00:31:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:19:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码