用C#获取局域网内所有机器

本文介绍了如何使用C#编程获取局域网内的所有机器。首先,通过系统API检查网络连接状态,然后获取本地网关地址信息,从而实现局域网设备的探测。
摘要由CSDN通过智能技术生成
如果你使用过P2P终结者或者类似的软件,你会发觉只要一打开就可以看到局域网内部的所有机器,而有时候我们正好有这样的需求,那我们应该怎么样用去获得局域网的所有机器呢?如果你到百度或者GOOGLE上面进行搜索你会发现,网上大致都是采用轮询的方法,让你把所有机器都扫描一遍,如果有反应则表示主机存在,但是这种办法并不可取,不仅耗资源,而且耗时间,即使你单独开一个线程去跑,估计半小时都没有任何结果。网上有人提出更加可笑的办法,说开多一些线程去检测。要知道,线程可不是省油的灯,再说,采用轮询的办法每遇到一台主机不存在就会抛出一个异常,而且该类异常一般都是超时无响应才抛出的,使用异常处理的方式来处理问题将会严重影响应用程序的性能。

这里将介绍如何利用巧妙的方式来获取局域网内所有机器:

1.先调用系统API判断网络是否处于连接状态

    [DllImport( " wininet.dll " )]
    
private   static   extern   bool  InternetGetConnectedState( out   int  connectionDescription,  int  reservedValue);
    
public   static   bool  IsLocalConnection()
    
{
        
int connectionDescription = 0;
        
return InternetGetConnectedState(out connectionDescription, 0);
    }

2.再调用底层硬件获取本地网关地址信息


      
      
      
static   string  GetGateWayAddress()
{
    ManagementObjectCollection moc 
= new ManagementClass("Win32_NetworkAdapterConfiguration").GetInstances();
    
foreach (ManagementObject mo in moc)
    
{
        
foreach (PropertyData p in mo.Properties)
        
{
            
if (p.Name.Equals("DefaultIPGateway"&& (p.Value != null))
            
{
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值