zoukankan      html  css  js  c++  java
  • 备忘asp.net core使用中间件实现IP白名单访问

    1、**添加中间件MiddleWare**

     1  public class MyMiddleware
     2     {
     3         private readonly RequestDelegate _next;
     4         private readonly ILogger<MyMiddleware> _logger;
     5         private readonly string _safelist;
     6         public MyMiddleware(RequestDelegate next, ILogger<MyMiddleware> logger, string safelist)
     7         {
     8             _safelist = safelist;
     9             _next = next;
    10             _logger = logger;
    11         }
    12         public async Task Invoke(HttpContext context)
    13         {
    14             var remoteIp = context.Connection.RemoteIpAddress;
    15             FileStream fs = new FileStream("ip.txt", FileMode.OpenOrCreate);
    16             //获得字节数组
    17             byte[] data = System.Text.Encoding.Default.GetBytes(DateTime.Now + "ip" + ":" + remoteIp);
    18             //开始写入
    19             fs.Write(data, 0, data.Length);
    20             //清空缓冲区、关闭流
    21             fs.Flush();
    22             fs.Close();
    23             _logger.LogDebug("Request from Remote IP address: {RemoteIp}", remoteIp);
    24             string[] ip = _safelist.Split(';');
    25             var bytes = remoteIp.GetAddressBytes(); var badIp = true;
    26             for (int i = 0; i < ip.Length; i++)
    27 
    28             {
    29                 var testIp = IPAddress.Parse(ip[i]);
    30                 if (testIp.GetAddressBytes().SequenceEqual(bytes))
    31                 { badIp = false; break; }
    32             }
    33             if (badIp)
    34             {
    35                 _logger.LogWarning($"Forbidden Request from Remote IP address: {remoteIp}");
    36                 context.Response.StatusCode = StatusCodes.Status403Forbidden;
    37                 await context.Response.WriteAsync($"Forbidden Request from Remote IP address: {remoteIp}");
    38 
    39                 return;
    40             }
    41             await _next.Invoke(context);
    42         }
    43     }

    2.**在statr up中使用中间件(可以将IP地址放在appsetting.json中多个ip使用";"分隔)** 

     1 app.UseMiddleware(Configuration["WhiteIPList"]); 

  • 相关阅读:
    C# 实现类库并调用
    C# pictureBox.Image获得图片的三种方法
    C# 指针使用总结
    C++ 怎样让函数返回数组
    C# 枚举与位枚举(Enum)
    Labview调用C#动态链接库dll
    C# partial 作用
    C# Internal关键字小结
    C# => 运算符
    C# 中 ??、 ?、 ?: 、?.、?[ ]
  • 原文地址:https://www.cnblogs.com/zhangdongwei/p/14803509.html
Copyright © 2011-2022 走看看