C#如何判断同网段计算机是否存在

本文介绍了一种在Vista系统中通过调用系统API来获取远程主机MAC地址的方法,并提供了一个具体的.NET实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题很简单

我平时一般是这样处理的

 

ContractedBlock.gifExpandedBlockStart.gifCode
try
               {
                    IPHostEntry myHost 
= Dns.GetHostByAddress(myIp);
                    HostName 
= myHost.HostName.ToString();

                }
                
catch
                {
                    HostName 
= "";

                }

 

但是这样有个问题,新系统使用环境为Vista Vista内置了防火墙 所以再这样获取主机的姓名了

于是采取了这样的方法,调用系统API获取MAC地址 若存在则确定主机存在:

 

ContractedBlock.gifExpandedBlockStart.gifCode
    public class GetMac
    {
        [DllImport(
"Iphlpapi.dll")]

        
private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);

        [DllImport(
"Ws2_32.dll")]

        
private static extern Int32 inet_addr(string ip);

        
public static string GetRemoteMac(string clientIP)
        {

            
string ip = clientIP;

            Int32 ldest 
= inet_addr(ip);

            Int64 macinfo 
= new Int64();

            Int32 len 
= 6;

            
try
            {

                SendARP(ldest, 
0ref macinfo, ref len);

            }

            
catch
            {

                
return "";

            }

            
string originalMACAddress = Convert.ToString(macinfo, 16);

            
if (originalMACAddress.Length < 12)
            {

                originalMACAddress 
= originalMACAddress.PadLeft(12'0');

            }

            
string macAddress;

            
if (originalMACAddress != "0000" && originalMACAddress.Length == 12)
            {

                
string mac1, mac2, mac3, mac4, mac5, mac6;

                mac1 
= originalMACAddress.Substring(102);

                mac2 
= originalMACAddress.Substring(82);

                mac3 
= originalMACAddress.Substring(62);

                mac4 
= originalMACAddress.Substring(42);

                mac5 
= originalMACAddress.Substring(22);

                mac6 
= originalMACAddress.Substring(02);

                macAddress 
= mac1 + "-" + mac2 + "-" + mac3 + "-" + mac4 + "-" + mac5 + "-" + mac6;

            }

            
else
            {

                macAddress 
= "";

            }

            
return macAddress.ToUpper();

        } 
    }

 

不知道大家有没有别的好点的方法呢?

转载于:https://www.cnblogs.com/xunyuetian/archive/2009/02/05/1384621.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值