C#获取局域网主机
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#获取局域网主机的更多相关文章
- pythond的icmp广播报获取局域网主机IP
icmp广播报获取局域网四川特产IP from scapy.all import *import randomimport threading def scan(sip,dip): pkt = Eth ...
- java 获取局域网中的全部主机名和IP地址
DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...
- 获取局域网中指定IP或是主机名称的所有文件夹及其搜索文件
最近做个功能在局域网中所有指定文件,于是花了点精力完成了部分功能,先贴上 using System; using System.Collections.Generic; using System.Co ...
- C#获取局域网ip
string hostName = System.Net.Dns.GetHostName();//本地计算机的 DNS 主机名的字符串 IPHostEntry hostInfo = Dns.GetHo ...
- C#获取局域网中的所有正在使用的IP地址
方法不是很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 01.阿里云SDK调用,获取ESC主机详细信息
一:通过python SDK获取云主机的详细信息 1.创建Accessky码(不做展示) 2.通过pip安装SDK模块,这个阿里云帮助里面有,也不做详细展示. 3.详细使用方法看代码 我下面展示的返回 ...
- 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...
- C#获取当前主机硬件信息
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息
1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...
随机推荐
- 记一次AD域控客户端不能正常加域的故障处理
1.1 症状现象 DNS 服务器无法在应用程序目录分区 < 分区名称 > 从 Active Directory 中打开区域 < 区域 >.这台 DNS 服务器配置获取并使用此 ...
- Mybatis笔记总结
第一.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...
- [CSP-S模拟测试]:真相(模拟)
题目传送门(内部题106) 输入格式 第一行为一个正整数$T$,表示数据组数. 接下来$T$组数据,每组数据第一行一个正整数$n$表示$OIer$,接下来$n$行,第$i$行表示编号为$i$的人所说的 ...
- C++入门经典-例6.2-将二维数组进行行列对换
1:一维数组的初始化有两种,一种是单个逐一赋值,一种是使用聚合方式赋值.聚合方式的例子如下: int a[3]={1,2,3}; int a[]={1,2,3};//编译器能够获得数组元素的个数 in ...
- 191107Django的Cookie和Session
Cookie的使用 from django.shortcuts import render,redirect def login(request): print("1",reque ...
- LeetCode 56. 合并区间(Merge Intervals)
题目描述 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 ...
- opencart升级 各种坑 没有主题,没有扩展,权限等问题
1.后台导航菜单没有扩展功能(扩展不显示) 2.只要是报错显示DIR_XXXX 基本都是config.php 和 admin/config.php 这两配置文件有关 我这问题是config.ph ...
- 布尔 kotlin(4)
布尔布尔用 Boolean 类型表示,它有两个值: true 和 false .若需要可空引用布尔会被装箱.内置的布尔运算有:|| – 短路逻辑或&& – 短路逻辑 ...
- Android AARCH64 平台的 OpenCL 配置
原文地址:Android AARCH64 平台的 OpenCL 配置 Android AARCH64 平台的 OpenCL 配置 开发环境 IDE: Android Studio 3.4.1 Andr ...
- 线程池的管理类MyThreadPoolManager
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executor; import java.ut ...