IP冲突,Windows自己就会提示。
那怎么检测的呢,和哪个比较?
@木木学习:你真要检测IP冲突吗?那可得通过ARP广播哦。
@程序猿.码农: 他说一般IP都是自动分配的,但是如果改了就会冲突,我想应该就是那种外网下面的不重复的子网吧!!
@木木学习:IP冲突检测原理及实现: http://blog.csdn.net/wanxiao009/article/details/5622296,看了下,是比较可靠的。
@程序猿.码农: 呜呜,好多好多好多代码,加看不懂的字符~~~~~纠结啊,加速变老的苦差!!
使用第三方cmd程序获取IP地址集,然后自己在程序里比较。
可以获取IP或MAC地址集的cmd程序,推荐nbtscan
//可以试一试。
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;
}
帅哥,我觉得这个思路好像就是这样的,但是我这边一运行就卡死呢??
@木木学习:
哦,很正常,ip从1ping到255,当然慢了,需要加一些异步处理,或进度条之类的,程序是没错的,当然,需要根据你的具体情况修改一下。
用cmd的ping命令就可以解决