|
|
@@ -7,12 +7,57 @@ using System.Text;
|
|
|
|
|
|
namespace HslCommunication.Enthernet
|
|
|
{
|
|
|
+ /// <summary>
|
|
|
+ /// IP防护类型
|
|
|
+ /// </summary>
|
|
|
+ public enum IPShieldType
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// 不防护,全部允许
|
|
|
+ /// </summary>
|
|
|
+ None = 0,
|
|
|
+ /// <summary>
|
|
|
+ /// 白名单
|
|
|
+ /// </summary>
|
|
|
+ WhiteList,
|
|
|
+ /// <summary>
|
|
|
+ /// 黑名单
|
|
|
+ /// </summary>
|
|
|
+ BlackList
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 同步消息处理服务器,主要用来实现接收客户端信息并进行消息反馈的操作
|
|
|
/// </summary>
|
|
|
public class NetSimplifyServer : NetworkServerBase
|
|
|
{
|
|
|
+ #region 客户端连接防护
|
|
|
+ /// <summary>
|
|
|
+ /// 客户端连接防护类型
|
|
|
+ /// </summary>
|
|
|
+ public IPShieldType ClientIPShieldType
|
|
|
+ {
|
|
|
+ get;
|
|
|
+ set;
|
|
|
+ } = IPShieldType.None;
|
|
|
+ /// <summary>
|
|
|
+ /// 白名单
|
|
|
+ /// </summary>
|
|
|
+ public List<string> WhiteList
|
|
|
+ {
|
|
|
+ get;
|
|
|
+ set;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 黑名单
|
|
|
+ /// </summary>
|
|
|
+ public List<string> BlackList
|
|
|
+ {
|
|
|
+ get;
|
|
|
+ set;
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
#region Constructor
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -104,6 +149,30 @@ namespace HslCommunication.Enthernet
|
|
|
{
|
|
|
session.IpEndPoint = (System.Net.IPEndPoint)socket.RemoteEndPoint;
|
|
|
session.IpAddress = session.IpEndPoint.Address.ToString( );
|
|
|
+
|
|
|
+ // IP防护过滤 by cxy 2021-07-26
|
|
|
+ if (this.ClientIPShieldType == IPShieldType.WhiteList)
|
|
|
+ {
|
|
|
+ if (!(this.WhiteList?.Contains(session.IpAddress) ?? false))
|
|
|
+ {
|
|
|
+ LogNet?.WriteDebug(ToString(), $"客户端 [ {session.IpEndPoint} ] 不在白名单中");
|
|
|
+ // 应该关闭网络通信
|
|
|
+ LogNet?.WriteWarn(ToString(), $"客户端 [ {session.IpEndPoint} ] 不在白名单中");
|
|
|
+ AppSessionRemoteClose(session);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (this.ClientIPShieldType == IPShieldType.BlackList)
|
|
|
+ {
|
|
|
+ if ((this.BlackList?.Contains(session.IpAddress) ?? false))
|
|
|
+ {
|
|
|
+ LogNet?.WriteDebug(ToString(), $"客户端 [ {session.IpEndPoint} ] 在黑名单中");
|
|
|
+ // 应该关闭网络通信
|
|
|
+ LogNet?.WriteWarn(ToString(), $"客户端 [ {session.IpEndPoint} ] 在黑名单中");
|
|
|
+ AppSessionRemoteClose(session);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
catch(Exception ex)
|
|
|
{
|