局域网可以使用的 IP 地址有很多,我写了一段代码用来枚举所有可以用的 ip 地址

小伙伴都知道,局域网可以使用的 IP 范围如下

  • A类地址:10.0.0.0 - 10.255.255.255
  • B类地址:172.16.0.0 - 172.31.255.255
  • C类地址:192.168.0.0 -192.168.255.255

我写了函数 GetIpList 用于在传入两个 IP 地址,一个是开始,一个是结束地址,返回这个范围所有的 IP 地址

        private static IEnumerable<IPAddress> GetIpList(IPAddress ipFrom, IPAddress ipTo)
{
var ipEnd = ipTo.GetAddressBytes();
var ipNext = ipFrom.GetAddressBytes(); while (CompareIPs(ipNext, ipEnd) < 1)
{
var ip = new IPAddress(ipNext);
IncrementIP(ipNext);
yield return ip;
}
} private static int CompareIPs(byte[] ip1, byte[] ip2)
{
if (ip1 == null || ip1.Length != 4)
{
return -1;
} if (ip2 == null || ip2.Length != 4)
{
return 1;
} var compare = ip1[0].CompareTo(ip2[0]);
if (compare == 0)
{
compare = ip1[1].CompareTo(ip2[1]);
} if (compare == 0)
{
compare = ip1[2].CompareTo(ip2[2]);
} if (compare == 0)
{
compare = ip1[3].CompareTo(ip2[3]);
} return compare;
} private static void IncrementIP(byte[] ip, int idx = 3)
{
if (ip == null || ip.Length != 4 || idx < 0)
{
return;
} if (ip[idx] == 254)
{
ip[idx] = 1;
IncrementIP(ip, idx - 1);
}
else
{
ip[idx] = (byte) (ip[idx] + 1);
}
}

此时可以列举局域网所有地址

        private static void Main(string[] args)
{
var ipFrom = IPAddress.Parse("172.16.0.0");
var ipTo = IPAddress.Parse("172.31.255.255");
Console.WriteLine(GetIpList(ipFrom, ipTo).Count()); ipFrom = IPAddress.Parse("192.168.0.0");
ipTo = IPAddress.Parse("192.168.255.255");
Console.WriteLine(GetIpList(ipFrom, ipTo).Count()); ipFrom = IPAddress.Parse("10.0.0.0");
ipTo = IPAddress.Parse("10.255.255.255");
Console.WriteLine(GetIpList(ipFrom, ipTo).Count());
}

本文代码放在 github 欢迎小伙伴访问

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

C# dotnet 获取整个局域网的 ip 地址的更多相关文章

  1. 获取本机的IP地址(局域网)与主机名称

    编写内容保存为bat @echo off &setlocal enabledelayedexpansion Rem '/*========获取本机的IP地址(局域网)=========*/ e ...

  2. PHP获取APP客户端的IP地址的方法

    分析php获取客户端ip 用php能获取客户端ip,这个大家都知道,代码如下: /** * 获取客户端ip * @param number $type * @return string */ func ...

  3. 获取本机的ip地址(排除虚拟机,蓝牙等ip)

    项目中遇到了要获取本地ip的需求,网上查找资料遇到很多坑,很多Java获取本机ip地址的方法要么是根本获取不到,要么是获取的有问题. 网上常见的方法如下 InetAddress.getLocalHos ...

  4. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  5. nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容

    1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...

  6. 获取当前设备的IP地址

    头文件: #import <ifaddrs.h> #import <arpa/inet.h> #import <net/if.h> 宏定义: #define IOS ...

  7. 服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址

    首先,在nginx配置中添加如下配置 server { listen ; server_name www.wenki.info; #要访问的域名 charset utf8; location / { ...

  8. 【Go】获取用户真实的ip地址

    原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html 用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip ...

  9. 获取客户端的请求IP地址

    获取客户端的请求IP地址 package com.microClass.util; import javax.servlet.http.HttpServletRequest; import java. ...

随机推荐

  1. 使用Data Lake Analytics读/写RDS数据

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于RDS(目前支持 MySQL , SQLServer ,Postgres 引擎)的支持, 这篇教程带你玩转 DLA 的 R ...

  2. hdu1848 sg打表

    果然是神器. #include<stdio.h> #include<string.h> #define maxn 1002 ],sg[maxn],hash[maxn]; voi ...

  3. python 源文件编码

  4. LeetCode97 Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. (Hard) For example,Giv ...

  5. UVa 10520【递推 搜索】

    UVa 10520 哇!简直恶心的递推,生推了半天..感觉题不难,但是恶心,不推出来又难受..一不小心还A了[]~( ̄▽ ̄)~*,AC的猝不及防... 先递推求出f[i][1](1<=i< ...

  6. Myeclipse 设置默认注释

    windows-->preference-->Java-->Code Style-->Code Templates code-->New Java files ${fil ...

  7. HZOJ 题

    首先对于n<=100的点,直接暴力dp,f[i][j][k]表示时间为i,在i,j位置的方案数,枚举转移即可,期望得分40. ) { ) { f[][][]=; ;i<=n;i++) ;x ...

  8. OpenStack组件系列☞glance搭建

    第一步:glance关于数据库的操作 mysql -u root -p #登入数据库 CREATE DATABASE glance; #新建库keystone GRANT ALL PRIVILEGES ...

  9. Getting started with the basics of programming exercises_3

    1.编写一个程序删除每个输入行末尾的空格及制表符并删除完全是空白符的行 #include<stdio.h> #define MAXLINE 1000 // maximum input li ...

  10. H3C 快速以太网和千兆以太网