以IP段作为监听地址

        在写Socket通讯服务的时候一般需要Listen某个IP地址端口,但这样比较麻烦的就是部署后需要配置相关IP地址信息;虽然可以监听Any所有地址,但这种对于私有的网络服务来说并不安全。为了在发布的时候节省一些配置工作所以才想到以IP段作为监听地址来配置。

        在集群应用中都有着自己的私有网段,通过配置IP段让服务自动监听在这IP端上的端口那部署起来就相对方便一些,特别是以容器作为管理手段服务集群,这样做的好处是推送一份新的实例时服务无须再配置即可确保运行在对应IP段的地址上。

        BeetleX的新版本中支持这种监听配置方式,可以在IP地址的最后一位配置为*,这样就会监听本机匹配对应网段的IP地址(不过暂只支持IPv4)。以下是内部实现代码:

System.Net.IPAddress address;
if (string.IsNullOrEmpty(Host))
{
    if (Socket.OSSupportsIPv6 && Server.Options.UseIPv6)
    {
        address = IPAddress.IPv6Any;
    }
    else
    {
        address = IPAddress.Any;
    }
}
else
{
    if (Host.EndsWith("*"))
    {
        address = MatchIPAddress(Host.Replace("*", ""));
        Host = address.ToString();
    }
    else
    {
        address = System.Net.IPAddress.Parse(Host);
    }
}
private IPAddress MatchIPAddress(string matchIP)
{
    var host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (var ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            if (ip.ToString().IndexOf(matchIP) == 0)
            {
                return ip;
            }
        }
    }
    throw new Exception($"No {matchIP} IPv4 address in the system!");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值