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. Spring Boot教程(二十九)使用JdbcTemplate操作数据库

    使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...

  2. JS框架_(JQuery.js)圆形多选菜单选项

    百度云盘 传送门 密码:zb1c 圆形多选菜单选项效果: <!DOCTYPE html> <html lang="en" > <head> &l ...

  3. python学习之路(9)

    函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调 ...

  4. MySQL格式化小数点为百分号并保留2为小数

    #colname为字段名字,CONCAT的作用是把小数点转成百分号,TRUNCATE的作用是保留百分号的小数点成几位 SELECT CONCAT(TRUNCATE(colname*100,2),'%' ...

  5. x-admin

    https://blog.csdn.net/u014793102/article/details/80316335

  6. Babel编辑ES6代码

    1.安装babel依赖 npm install --save-dev @babel/core @babel/cli @babel/preset-env npm install --save @babe ...

  7. java跨平台的原因

    java跨平台的原因 java有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台. 1.java代码不是直接 ...

  8. leetcode-easy-listnode-234 Palindrome Linked List

    mycode   89.42% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, ...

  9. Computer Network Homework2’s hard question

    Computer Network Homework2’s hard question 2. What is the signal which is used to modulate the origi ...

  10. Python基本语法_函数_返回值

    目录 目录 前言 函数的返回值 在函数中Return和Print的区别 函数中的文档 前言 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返 ...