C#获取局域网主机

最近在做一个使用MSRDPClient来实现远程桌面功能,需要先判断一下该局域网主机是否在线,所以就需要获取一遍局域网主机。

首先获取本地IP地址,这里需要注意的是,要排除掉虚拟机的IP,实现代码如下:

 public List<string> GetLocalIPs()
{
List<string> lstIp = new List<string>();
ManagementClass mcNetworkAdapterConfig = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc_NetworkAdapterConfig = mcNetworkAdapterConfig.GetInstances();
foreach(ManagementObject mo in moc_NetworkAdapterConfig)
{
string mServiceName = mo["ServiceName"] as string;
if (!(bool)mo["IPEnabled"])
{
continue;
}
mServiceName = mServiceName.ToLower();
if(mServiceName.Contains("vmnetadapter")
|| mServiceName.Contains("ppoe")
|| mServiceName.Contains("bthpan")
|| mServiceName.Contains("tapvpn")
|| mServiceName.Contains("ndisip")
|| mServiceName.Contains("sinforvnic"))
{
continue;
}
string mCaption = mo["Caption"] as string;
string mMACAddress = mo["MACAddress"] as string;
string[] mIPAddress = mo["IPAddress"] as string[];
string[] mIPSubnet = mo["IPSubnet"] as string[];
string[] mDefaultIPGateway = mo["DefaultIPGateway"] as string[];
string[] mDNSServerSearchOrder = mo["DNSServerSearchOrder"] as string[]; if(mIPAddress != null)
{
foreach(string ip in mIPAddress)
{
if(ip != "0.0.0.0")
{
if(IPAddress.TryParse(ip, out IPAddress address))
{
if(address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)//排除IP6地址,根据实际情况排除
{
lstIp.Add(ip);
}
}
}
}
}
mo.Dispose(); }
return lstIp;
}

然后采用Ping主机,查看是否有返回,实现代码如下:

public void GetLANIps()
{
this.count = 1;
this.IsOk = false;
this.IPHosts.Clear();
string localHostIp = this.LocalIps[0];
string ipDuan = localHostIp.Remove(localHostIp.LastIndexOf('.')); byte[] bys = Encoding.UTF8.GetBytes("hello");
for (int i = 1; i <= 255; i++)
{
string pingIp = $"{ipDuan}.{i}";
Ping ping = new Ping();
ping.PingCompleted += Ping_PingCompleted;
ping.SendAsync(pingIp, 200, bys);
}
} private void Ping_PingCompleted(object sender, PingCompletedEventArgs e)
{
if(this.count++ == 255)
{
this.IsOk = true;
}
if (e.Reply.Status == IPStatus.Success)
{
try
{
IPHostEntry iPHost = Dns.GetHostEntry(e.Reply.Address);
this.IPHosts.Add(iPHost);
}
catch
{ }
}
}

开个后台线程去获取,这个获取局域网主机不是特别快

C#获取局域网主机的更多相关文章

  1. pythond的icmp广播报获取局域网主机IP

    icmp广播报获取局域网四川特产IP from scapy.all import *import randomimport threading def scan(sip,dip): pkt = Eth ...

  2. java 获取局域网中的全部主机名和IP地址

    DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...

  3. 获取局域网中指定IP或是主机名称的所有文件夹及其搜索文件

    最近做个功能在局域网中所有指定文件,于是花了点精力完成了部分功能,先贴上 using System; using System.Collections.Generic; using System.Co ...

  4. C#获取局域网ip

    string hostName = System.Net.Dns.GetHostName();//本地计算机的 DNS 主机名的字符串 IPHostEntry hostInfo = Dns.GetHo ...

  5. C#获取局域网中的所有正在使用的IP地址

    方法不是很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  6. 01.阿里云SDK调用,获取ESC主机详细信息

    一:通过python SDK获取云主机的详细信息 1.创建Accessky码(不做展示) 2.通过pip安装SDK模块,这个阿里云帮助里面有,也不做详细展示. 3.详细使用方法看代码 我下面展示的返回 ...

  7. 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;

    package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...

  8. C#获取当前主机硬件信息

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息

    1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...

随机推荐

  1. LOJ #6358 前夕 (组合计数、容斥原理)

    题目链接 https://loj.ac/problem/6358 (另外一道\(4\)的倍数题左转loj #6356) 题意 题面写得就像一坨X一样,我来复述一下吧. 有\(N\)个元素构成的集合,要 ...

  2. Spring-data-redis 第一天

    1.Redis 这就不必哆嗦了,Redis 支持丰富的数据类型,String ,List,Sets ,Sorted Sets,Hashes,这就可以看出Java 操作Redis就要针对各种类型都有自己 ...

  3. springBoot 整合 mybatis 项目实战

    二.springBoot 整合 mybatis 项目实战   前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...

  4. 一、linux下nginx1.7.8+php5.6.3的环境配置

    部分参考:http://www.cnblogs.com/simpman/p/4151662.html http://blog.zyan.cc/nginx_php_v6 1.利用linux系统自带的yu ...

  5. ycache分布式缓存框架

    介绍   ycache是yhd的分布是缓存框架,设计目的是提供易扩展.高可靠的分布式缓存系统.ycache从全局视角分配和管理缓存,检测缓存的状态并做故障恢复.   当应用(应用:使用ycache的上 ...

  6. 1.2 Mac下配置maven环境变量

    1.下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.下载Mave ...

  7. Junit : how to add listener, and how to extends RunListener to override behaviors while failed

    http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html org.junit.runner ...

  8. web基础知识汇总

    HTML&XML 1.JavaWeb的概述 A: 什么是Web----->就是网页或者网站 B: 什么是JavaWeb----->就是使用java语言做web C: 浏览器访问网站 ...

  9. flutter textfield

    释放光标 FocusScope.of(context).unfocus() 输入类型 keyboardType: TextInputType.number, 键盘右下角按键类型 textInputAc ...

  10. 阶段3 2.Spring_06.Spring的新注解_5 spring的新注解-PropertySource

    数据库的链接 次数是写死的 新建配置文件 定义成员变量 value注解实现 与配置文件的key对应 PropertySource 要想让spring去读取这个配置文件 resource编译后都跑到了. ...