社区
C#
帖子详情
C#查询交换机的方法
离谱AI
2007-01-05 11:56:37
大家好:
以前我用255个线程扫描局域网主机,功能是实现了,但是,速度不快!我想用C#直接查询交换机的方法来获取局域网主机信息,怎么样能实现呢?望各位大虾指点!小弟不胜感激!
...全文
846
11
打赏
收藏
C#查询交换机的方法
大家好: 以前我用255个线程扫描局域网主机,功能是实现了,但是,速度不快!我想用C#直接查询交换机的方法来获取局域网主机信息,怎么样能实现呢?望各位大虾指点!小弟不胜感激!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
离谱AI
2007-01-20
打赏
举报
回复
恩,谢谢zhouhongyun(最终幻想)朋友!另外,我注册了找个社区,好像就发了一个帖子,不能在发帖了,只能回帖,这是怎么的?
粉红色的火烈鸟
2007-01-12
打赏
举报
回复
不懂就在网上搜,这协议是公开的,又不是秘密,至于如何发送arp协议数据,建议你用winpcap的函数库,免费开原的,codeproject上有对winpcap的c#包装类库,很方便,对一个机子发送arp请求包,如果它开机并在网络上的话,会立即向你发送一个应答包,可以根据收到的应答包来搜索所有的机器,由于绝大部分防火墙没有拦截arp协议的功能,所以这个方法可以穿透防火墙,效果最好。
Ki1381
2007-01-11
打赏
举报
回复
交换机支持http方式查询的话干脆冒充浏览器直接去取这一页,然后分析得到的HTML
Mittermeyer
2007-01-11
打赏
举报
回复
下面的做法参考一下。另外不需要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;
}
}
kitten_scratch
2007-01-10
打赏
举报
回复
arp扫描?
没听说过啊,算我不懂arp协议,说来听听...
离谱AI
2007-01-10
打赏
举报
回复
arp扫描?好啊!朋友,能给出示例代码吗?谢谢!
粉红色的火烈鸟
2007-01-06
打赏
举报
回复
哪有这样扫描的,一般用arp扫描,一秒钟可以全扫描到
离谱AI
2007-01-06
打赏
举报
回复
我做的是一个局域网信息交流工具,代码很多,为了讨论需要,我只是摘取多线程扫描局域网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
{}
}
}
buaaliang
2007-01-05
打赏
举报
回复
能不能把你用255个线程扫描局域网主机的代码贴出来?学习学习!
kitten_scratch
2007-01-05
打赏
举报
回复
除非交换机厂商预留这个功能接口给你,不然基本没指望的。
如果你的交换机够高级的话直接telnet到交换机上查看mac table,会有一些基本信息的,应该能满足你。
C#
开发模拟Telnet登陆MA5620设备
C#
开发,模拟telnet登陆华为MA5620设备的GUI,实现发送命令,接收并分析回传信息。想开发GUI配置路由器,
交换机
等程序的朋友们可以以此作为参考。
C#
获得系统打开的端口和状态
C#
获得系统打开的端口和状态
交换机
交换机
交换机
交换机
C#
实现snmp协议的部分功能源代码
C#
实现snmp协议的部分功能源代码
C#
实现snmp协议的部分功能源代码
c#
实现telnet功能
这是一个可以实现telnet的类库,调用里面的
方法
就可以返回一个服务器是否开了某个端口
C#
111,092
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章