首页 新闻 搜索 专区 学院

C#中如何获取局域网下的所有IP????

0
悬赏园豆:15 [已关闭问题] 关闭于 2012-07-28 09:47

请大家帮我理解下IP地址和端口?我的理解是将手动输入的IP与局域网下的所有已有的IP做对比,如果存在就提示冲突!至于端口我还不了解,麻烦大家给点意见~~~~~~~

木木学习的主页 木木学习 | 初学一级 | 园豆:71
提问于:2012-07-25 14:36
< >
分享
所有回答(4)
0

IP冲突,Windows自己就会提示。

Launcher | 园豆:45045 (高人七级) | 2012-07-25 14:38

那怎么检测的呢,和哪个比较?

支持(0) 反对(0) 木木学习 | 园豆:71 (初学一级) | 2012-07-25 14:40

@木木学习:你真要检测IP冲突吗?那可得通过ARP广播哦。 

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-07-25 15:20

@程序猿.码农: 他说一般IP都是自动分配的,但是如果改了就会冲突,我想应该就是那种外网下面的不重复的子网吧!!

支持(0) 反对(0) 木木学习 | 园豆:71 (初学一级) | 2012-07-26 11:19

@木木学习:IP冲突检测原理及实现: http://blog.csdn.net/wanxiao009/article/details/5622296,看了下,是比较可靠的。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-07-26 11:25

@程序猿.码农: 呜呜,好多好多好多代码,加看不懂的字符~~~~~纠结啊,加速变老的苦差!!

支持(0) 反对(0) 木木学习 | 园豆:71 (初学一级) | 2012-07-26 11:57
0

使用第三方cmd程序获取IP地址集,然后自己在程序里比较。

可以获取IP或MAC地址集的cmd程序,推荐nbtscan

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2012-07-25 16:18
0

//可以试一试。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Net.Sockets;
using System.Runtime.InteropServices;

//-------------------

public static string GetLocalIpV4Address()
{
if (!NetworkInterface.GetIsNetworkAvailable())
{
throw new InvalidOperationException("网络连接不可用");
}

var lstNi = NetworkInterface.GetAllNetworkInterfaces();
foreach (var ni in lstNi)
{
if (ni.NetworkInterfaceType != NetworkInterfaceType.Ethernet)
{
continue;
}
var ipProps = ni.GetIPProperties();
var lstUniAddr = ipProps.UnicastAddresses;
foreach (var uniAddr in lstUniAddr)
{
if (uniAddr.Address.AddressFamily == AddressFamily.InterNetwork)
{
return uniAddr.Address.ToString();
}
}
}
throw new ArgumentException("本机没有对应的IPV4地址");
}

//---------------

public static IList<IPAddress> GetAllLanIp()
{
string localIp= GetLocalIpV4Address();
string prefixIp = localIp.Remove(localIp.LastIndexOf('.'));

IList<IPAddress> lst = new List<IPAddress>();
Ping p = new Ping();
for (int i = 0; i < 255; i++)
{
var ret= p.Send(prefixIp + "." + i.ToString(),300);
if (ret.Status== IPStatus.TimedOut)
{
continue;
}
if (ret.Status== IPStatus.Success)
{
lst.Add(ret.Address);
}

}
return lst;
}

imap | 园豆:232 (菜鸟二级) | 2012-07-25 18:02

帅哥,我觉得这个思路好像就是这样的,但是我这边一运行就卡死呢??

支持(0) 反对(0) 木木学习 | 园豆:71 (初学一级) | 2012-07-26 11:06

@木木学习: 

哦,很正常,ip从1ping到255,当然慢了,需要加一些异步处理,或进度条之类的,程序是没错的,当然,需要根据你的具体情况修改一下。

支持(0) 反对(0) imap | 园豆:232 (菜鸟二级) | 2012-07-26 13:51
0

用cmd的ping命令就可以解决

木木学习 | 园豆:71 (初学一级) | 2012-07-28 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册