title author date CreateTime categories
C# dotnet 获取整个局域网的 ip 地址
lindexi
2019-10-31 08:57:55 +0800
2019-10-28 11:57:23 +0800
dotnet C#

局域网可以使用的 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 欢迎小伙伴访问

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

  1. C# dotnet 获取整个局域网的 ip 地址

    局域网可以使用的 IP 地址有很多,我写了一段代码用来枚举所有可以用的 ip 地址 小伙伴都知道,局域网可以使用的 IP 范围如下 A类地址:10.0.0.0 - 10.255.255.255 B类地 ...

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

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

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

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

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

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

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

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

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

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

  7. 获取android模拟器的IP地址

    http://blog.csdn.net/yjkwf/article/details/7244632 1.输入adb devices查看加载的设备 2.使用 adb -s [设备] [命令]执行命令 ...

  8. Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP

    Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...

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

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

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

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

随机推荐

  1. 前端常用的库和实用技术之JavaScript多线程

    多线程概念: 多线程是指从软件或硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在 同一时间执行多于一个线程,进而提升整理处理性能.具有这种能力的系统包括对称多处理机,多核心 ...

  2. Jquery中attr与prop的区别详解

    prop()函数的结果: 1.如果有相应的属性,返回指定属性值. 2.如果没有相应的属性,返回值是空字符串. attr()函数的结果: 1.如果有相应的属性,返回指定属性值. 2.如果没有相应的属性, ...

  3. 关于FR4板一些重复的数据

    介电常数:4.2-4.7 信号传输速度:表层 140~170 ps/inch, 内层 180 ps/inch

  4. 【luoguP3868】猜数字

    description 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n ...

  5. go包flag系统包简单使用

    一.代码 package main import ( "flag" "fmt" ) //定义命令行参数,这个mode是内存地址,参数1是命令行名称,参数2是命令 ...

  6. threading线程中的方法(27-11)

    t1.start() # 执行线程 t1.join() # 阻塞 t1.setDaemon(True) #守护线程 threading.current_thread() # 查看执行的是哪一个线程 t ...

  7. 19.SimLogin_case04

    # 利用cookies登录马蜂窝 import requests from lxml import etree session = requests.Session() phone_number = ...

  8. mybatis-spring多数据源配置

    mybatis-spring多数据源配置 1.注意事项:在MapperScannerConfigurer里配置的时候,每个数据源的mapper接口应放到不同的包中,下面的例子中用粗体标明,另外,对于m ...

  9. 《Practices of an Agile Developer:Woring in the Real World》读书笔记 PB16110698(~3.22)第三周

    <Practices of an Agile Developer:Woring in the Real World>读书笔记  本周我阅读了<高效程序员的45个习惯:敏捷开发修炼之道 ...

  10. Python基础知识之4——三大控制结构

    控制结构就是控制程序执行顺序的结构. Python 有三大控制结构,分别是顺序结构.分支结构(选择结构)以及循环结构.任何一个项目或者算法都可以使用这三种结构来设计完成.这三种控制结构也是结构化程序 ...