通过子网掩码计算IP范围

2023-11-21

如果我有一个子网掩码,例如255.255.255.0和一个IP地址192.168.1.5,有没有一种简单的方法可以确定该子网内所有可能的IP地址?

在这种情况下:

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
...
...
192.168.1.252
192.168.1.253
192.168.1.254
192.168.1.255

到目前为止我发现的都是重载的.net 库。没有任何本地方法可以使用默认名称空间解决此问题吗?


10 分钟编码,但未经过充分测试:

class IPSegment {

    private UInt32 _ip;
    private UInt32 _mask;

    public IPSegment(string ip, string mask) {
        _ip = ip.ParseIp();
        _mask = mask.ParseIp();
    }

    public UInt32 NumberOfHosts {
        get { return ~_mask+1; }
    }

    public UInt32 NetworkAddress {
        get { return _ip & _mask; }
    }

    public UInt32 BroadcastAddress {
        get { return NetworkAddress + ~_mask; }
    }

    public IEnumerable<UInt32> Hosts(){
        for (var host = NetworkAddress+1; host < BroadcastAddress; host++) {
            yield return  host;
        }
    }

}

public static class IpHelpers {
    public static string ToIpString(this UInt32 value) {
        var bitmask = 0xff000000;
        var parts = new string[4];
        for (var i = 0; i < 4; i++) {
            var masked = (value & bitmask) >> ((3-i)*8);
            bitmask >>= 8;
            parts[i] = masked.ToString(CultureInfo.InvariantCulture);
        }
        return String.Join(".", parts);
    }

    public static UInt32 ParseIp(this string ipAddress) {
        var splitted = ipAddress.Split('.');
        UInt32 ip = 0;
        for (var i = 0; i < 4; i++) {
            ip = (ip << 8) + UInt32.Parse(splitted[i]);
        }
        return ip;
    }
}

Usage:

    static void Main(string[] args) {

        IPSegment ip = new IPSegment("192.168.1.1","255.255.255.248");

        Console.WriteLine(ip.NumberOfHosts);
        Console.WriteLine(ip.NetworkAddress.ToIpString());
        Console.WriteLine(ip.BroadcastAddress.ToIpString());

        Console.WriteLine("===");
        foreach (var host in ip.Hosts()) {
            Console.WriteLine(host.ToIpString());
        }
        Console.ReadLine();

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过子网掩码计算IP范围 的相关文章

随机推荐

  • PHP速度测试当前页面无回显的用户连接速度

    我正在寻找一种检查用户连接速度的可能性 它应该被保存为cookie 如果速度慢的话 javascript文件以及css文件将被适配 我目前测试速度的可能性如下 kb 512 flush echo start time 0 time 1 fi
  • 浮点数的符号

    有没有一种简单的方法来确定浮点数的符号 我进行了实验并想出了这个 include
  • 如何使用算法来填充向量的向量

    I have typedef std vector
  • AngularJS $http:如何避免重定向跟随

    在 AngularJS 应用程序中 我对服务器 URL 进行 http post 调用 这个url的成功响应是30x重定向 我的问题是 http post严格遵循这个重定向并在成功回调中返回最终调用的结果 我想拦截此重定向并手动将用户重定向
  • 返回页面中所有 iframe 的 ID

    由于我正在使用的小部件格式 我有一个页面 其中嵌入了多个 iframe 我不会粘贴代码 因为它庞大且笨拙 但它本质上就是这样
  • Android Gradle 应用程序:connectedCheck 从依赖项运行测试

    我有一些有自己的测试的图书馆项目 我不负责这个库项目 也不关心它的测试 但是 当我运行时gradle app connectedCheck它运行我的测试 但它也运行依赖项的测试 有什么办法可以防止这种情况发生吗 我应该提到我的依赖项不在ap
  • decimal.InvalidOperation,除法对于非常大的数字来说是不可能的

    使用Python 3 5 2 gt gt gt from decimal import Decimal gt gt gt Decimal 12 Decimal 0 01 Decimal 0 00 gt gt gt Decimal 23456
  • Linq 相当于 SQL LEFT 函数?

    我们有一个数据库 其中一些字段为 varchar max 可能包含大量文本 但是我遇到的情况是 我只想从字段中选择前 300 个字符 以用于 MVC 网站上的分页结果表进行该领域的 预览 对于一个简化的示例查询 我想在表中显示所有位置 这将
  • 按连续序列对整数进行分组列表

    我有一个整数列表 1 2 3 4 5 8 9 10 11 200 201 202 我想将它们分组到一个列表列表中 其中每个子列表都包含顺序未被破坏的整数 像这样 1 5 8 11 200 202 我有一个相当笨拙的工作 lSequenceO
  • 在淘汰赛中重新应用绑定

    我基本上想在同一页面上为不同的对象重新应用绑定 但有奇怪的行为 重新应用绑定后 项目列表丢失 请看这里 http jsfiddle net baio 9UcUs 5 该怎么办 简短的回答是不支持 长的答案是有一些方法可以解决这个问题 一种方
  • 使用反射解压数组

    我正在尝试解压从反映对象字段获得的数组 我将常规字段的值设置为一个对象 如果它是一个数组 那么我想将我的通用对象转换为数组 无论其类型是什么 并提取其内容 fields i setAccessible true String key fie
  • 如何直接从IDE读取Python源代码

    我目前正在学习Python 我想通过阅读它的源代码来更深入地了解Python是如何工作的 我可以手动进入Python安装目录查看源代码 我想知道是否可以直接从PyCharm等IDE读取Python源代码 我尝试过了control click
  • 如果没有互联网连接,xmlns属性如何工作并被浏览器理解?

    一个简单的 XHTML 文档 具有最少的所需标签 以及xmlns属性有一个 http 链接 如果我在 localhost 上工作并且没有 Internet 连接 我不能在 XHTML 上工作吗 The content of the docu
  • 导入语句错误“需要“FILENAME”或

    我在将 Appirater 集成到我的应用程序中时遇到一些问题 我已经正确添加了所有必要的文件 并且拥有正确的代码 我认为 但是在尝试将其实现到我的 AppDelegate m 文件中时出现错误 当我做 import Appirater h
  • 使用 MockMvc 在 Spring MVC 中进行单元测试/登录

    我有一个使用 Spring MVC 创建的非常简单的 REST 应用程序 代码可在GitHub 它有一个简单的WebSecurityConfigurer如下 Override protected void configure HttpSec
  • 是否可以使用android的语音识别而不显示对话框?

    我想在 android 中使用语音发送文本 api 但我不想被这些对话框拖慢速度 没有它们是否可以使用该功能 对的 这是可能的 您可以使用 API 中的 SpeechRecognizer 类 确保它在主线程中使用 根据 API 的要求 并且
  • 将 MSTest、xUnit 或 NUnit 与 dotnet core 结合使用

    TLDR 跳转到答案以获取有关工作 xUnit 或 MSTest 设置的详细信息 xUnit 是最不痛苦的选择 我无法让 NUnit 在我的构建服务器上工作 因此我尝试了 xUnit 和 MSTest 两者都对我不起作用 MSTest 我只
  • 错误边界禁用交换机内部的路由

    For 很长时间在遇到错误边界后 我一直试图让路由在我们的应用程序中工作 但直到今天我才发现看似与周围许多示例相同的代码有一个重要的区别 路由被包裹在Switch 如果启用的话 这个简单的更改足以阻止路由工作 Demo 采取以下片段 如果我
  • 是否可以从 npm 中下载的 .zip 文件从 git 存储库安装包?

    我已经通过手动下载了存储库的主分支Download ZIPGitHub 上的按钮 现在 我的问题是 是否可以从下载的 git 存储库安装包 npm 中的 zip 文件 Running npm install Pobrane lwip mas
  • 通过子网掩码计算IP范围

    如果我有一个子网掩码 例如255 255 255 0和一个IP地址192 168 1 5 有没有一种简单的方法可以确定该子网内所有可能的IP地址 在这种情况下 192 168 1 1 192 168 1 2 192 168 1 3 192