我正在尝试获取在 LAN 中连接的 IP 地址列表,
是否可以在不使用 win32 API 库(Netapi32.dll)的情况下获得。
有什么想法可以在不使用非托管 win32 动态库的情况下获得 Windows 7 操作系统的目标
您可以使用System.Net.网络信息.Pingping 子网中的每个 IP,如果收到响应,则表明有一台计算机正在使用该 IP。如果您没有收到 IP 可用的响应,或者机器忽略 ping。
更新为添加代码以并行执行此操作。
public string IPList()
{
string myipsplit = string.Empty;
string localhostname = Dns.GetHostName();
IPAddress[] paddresses = Dns.GetHostAddresses(localhostname);
string myip = paddresses.Where( ip => ip.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault().ToString();
string[] myiparray = myip.Split(new[] { '.' });
for (int j = 1; j < myiparray.Length; j++)
myipsplit += myiparray[j - 1] + ".";
Trace.WriteLine(DateTime.Now);
var results = new string[0x100];
System.Threading.Tasks.Parallel.For(1, 0x100, id =>
{
var pingSender = new Ping();
string ls = myipsplit + id;
PingReply reply = pingSender.Send(ls, 100);
if (reply != null)
if (reply.Status == IPStatus.Success)
results[id] = reply.Address.ToString();
});
Trace.WriteLine(DateTime.Now);
var sb = new StringBuilder();
results.All(x => { sb.AppendFormat("{0} ", x);
return true;
});
return sb.ToString();
}
更新为.Net 2.0
private delegate void MyPing(int id);
public string IPList2()
{
string myipsplit = string.Empty;
string localhostname = Dns.GetHostName();
IPAddress[] paddresses = Dns.GetHostAddresses(localhostname);
string myip = paddresses.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault().ToString();
string[] myiparray = myip.Split(new[] { '.' });
for (int j = 1; j < myiparray.Length; j++)
myipsplit += myiparray[j - 1] + ".";
Trace.WriteLine(DateTime.Now);
var results = new string[0x100];
MyPing ping =
id =>
{
string ls = myipsplit + id;
var pingSender = new Ping();
PingReply reply = pingSender.Send(ls, 100);
if (reply != null)
if (reply.Status == IPStatus.Success)
results[id] = reply.Address.ToString();
};
var asyncResults = new IAsyncResult[0x100];
for (int i = 1; i < 0x100; i++)
{
asyncResults[i] = ping.BeginInvoke(i, null, null);
}
for (int i = 1; i < 0x100; i++)
{
ping.EndInvoke(asyncResults[i]);
}
Trace.WriteLine(DateTime.Now);
var sb = new StringBuilder();
for (int i = 1; i < 0x100; i++)
{
if (results[i]!=null)
sb.AppendFormat("{0} ", results[i]);
}
return sb.ToString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)