C#查询交换机的方法 除非交换机厂商预留这个功能接口给你,不然基本没指望的。如果你的交换机够高级的话直接telnet到交换机上查看mac table,会有一些基本信息的,应该能满足你。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我做的是一个局域网信息交流工具,代码很多,为了讨论需要,我只是摘取多线程扫描局域网IP部分和大家讨论!程序肯定不优化,希望大家别嘲笑在下!private void GetLanHost(){ //获取局域网主机,并加入到 ComboBox1中 //tempLocalIP = Dns.GetHostByName(LocalHostName).AddressList[0].ToString(); //此处不直接使用“LocalHostIp”是因为,它在后面可能有变化!故而用tempLocalIP; strLanIpFront = tempLocalIP.Substring(0,tempLocalIP.LastIndexOf("."));//取出本地IP地址的前三段 comboBox1.Text= ""; comboBox1.Items.Clear(); MyThread = new Thread[255]; for(int i=0;i<255;i++)//启用255个线程扫描局域网主机IP,及机器名 { MyThread[i] = new Thread(new ThreadStart(Scan)); MyThread[i].Name = i.ToString(); MyThread[i].Start(); if(!MyThread[i].Join(120)) { MyThread[i].Abort(); } }}private void Scan(){ //扫描LAN_IP的方法 IPAddress LanIp = IPAddress.Parse(strLanIpFront + "." + Thread.CurrentThread.Name.ToString()); IPHostEntry LanHostDns = null; //此处不直接使用“LocalHostIp”是因为,它在后面可能有变化!故而用tempLocalIP; if(LanIp.ToString() != tempLocalIP) //不扫描本机 { try { LanHostDns = Dns.GetHostByAddress(LanIp); lock(comboBox1) { comboBox1.Items.Add("LAN:" + LanIp.ToString() + "(" + LanHostDns.HostName.ToString() + ")"); } } catch {} }} 哪有这样扫描的,一般用arp扫描,一秒钟可以全扫描到 arp扫描?好啊!朋友,能给出示例代码吗?谢谢! arp扫描?没听说过啊,算我不懂arp协议,说来听听... 交换机支持http方式查询的话干脆冒充浏览器直接去取这一页,然后分析得到的HTML 下面的做法参考一下。另外不需要255个线程,有一个线程扫描就可以了。255个线程光创建和调度就要消耗很多系统资源,可能是性能不高的一个原因哦! public class CLsArp { #region APIs [DllImport("iphlpapi.dll", CallingConvention = CallingConvention.Cdecl)] private static extern Int32 SendARP(UInt32 udwDestIP,UInt32 udwSrcIP,byte[] pMacAddr,ref Int32 PhyAddrLen); private const Int32 NUMBER_OF_PHYSICAL_ADDRESS_BYTES = 6; #endregion public CLsArp() { } public static byte[] GetComputerMacAddr(UInt32 dwIP) { byte[] abMacAddr = null; Int32 dwPhyAddrLen = 0; try { abMacAddr = new byte[NUMBER_OF_PHYSICAL_ADDRESS_BYTES]; dwPhyAddrLen = abMacAddr.Length; if (SendARP(dwIP,0,abMacAddr, ref dwPhyAddrLen) != 0) { //Get Error!Reset byte array to null abMacAddr = null; } } catch { abMacAddr = null; } return abMacAddr; } } 不懂就在网上搜,这协议是公开的,又不是秘密,至于如何发送arp协议数据,建议你用winpcap的函数库,免费开原的,codeproject上有对winpcap的c#包装类库,很方便,对一个机子发送arp请求包,如果它开机并在网络上的话,会立即向你发送一个应答包,可以根据收到的应答包来搜索所有的机器,由于绝大部分防火墙没有拦截arp协议的功能,所以这个方法可以穿透防火墙,效果最好。 恩,谢谢zhouhongyun(最终幻想)朋友!另外,我注册了找个社区,好像就发了一个帖子,不能在发帖了,只能回帖,这是怎么的? 想开发个可编程的程序,如何弄呢? 读配置文件出现"Configuration system failed to initialize"是什么问题啊? C#软件更新问题。 一个解决方案下的文件夹,如何调用? C# 多线程调用com c# 画图 (新手 ^_^) ★★★★★【 如何打印窗体 ★★★★★ 正则表达式替换等号左右两边的内容 Activereports 3.0 file打印浏览时有红字 急,请教word问题 Can't find KeyCodeV2.dll or invalid KeyCode問題該怎么解決 ~C# 一般用啥工具编写????
{
//获取局域网主机,并加入到 ComboBox1中
//tempLocalIP = Dns.GetHostByName(LocalHostName).AddressList[0].ToString();
//此处不直接使用“LocalHostIp”是因为,它在后面可能有变化!故而用tempLocalIP;
strLanIpFront = tempLocalIP.Substring(0,tempLocalIP.LastIndexOf("."));//取出本地IP地址的前三段
comboBox1.Text= "";
comboBox1.Items.Clear();
MyThread = new Thread[255];
for(int i=0;i<255;i++)//启用255个线程扫描局域网主机IP,及机器名
{
MyThread[i] = new Thread(new ThreadStart(Scan));
MyThread[i].Name = i.ToString();
MyThread[i].Start();
if(!MyThread[i].Join(120))
{
MyThread[i].Abort();
}
}
}private void Scan()
{
//扫描LAN_IP的方法
IPAddress LanIp = IPAddress.Parse(strLanIpFront + "." + Thread.CurrentThread.Name.ToString());
IPHostEntry LanHostDns = null;
//此处不直接使用“LocalHostIp”是因为,它在后面可能有变化!故而用tempLocalIP;
if(LanIp.ToString() != tempLocalIP) //不扫描本机
{
try
{
LanHostDns = Dns.GetHostByAddress(LanIp);
lock(comboBox1)
{
comboBox1.Items.Add("LAN:" + LanIp.ToString() + "(" + LanHostDns.HostName.ToString() + ")");
}
}
catch
{}
}
}
没听说过啊,算我不懂arp协议,说来听听...
{
#region APIs
[DllImport("iphlpapi.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern Int32 SendARP(UInt32 udwDestIP,UInt32 udwSrcIP,byte[] pMacAddr,ref Int32 PhyAddrLen); private const Int32 NUMBER_OF_PHYSICAL_ADDRESS_BYTES = 6;
#endregion public CLsArp()
{
} public static byte[] GetComputerMacAddr(UInt32 dwIP)
{
byte[] abMacAddr = null; Int32 dwPhyAddrLen = 0;
try
{
abMacAddr = new byte[NUMBER_OF_PHYSICAL_ADDRESS_BYTES];
dwPhyAddrLen = abMacAddr.Length; if (SendARP(dwIP,0,abMacAddr, ref dwPhyAddrLen) != 0)
{
//Get Error!Reset byte array to null
abMacAddr = null;
}
}
catch
{
abMacAddr = null;
} return abMacAddr;
}
}