代码如下:
using System;
using System.Net;
using System.Threading;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Runtime.InteropServices;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
namespace LocalIP
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
class LanSearch
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 取MAC地址
/// </summary>
/// <param name="DestIP">目标IP</param>
/// <param name="SrcIP">源IP</param>
/// <param name="pMacAddr">MAC地址</param>
/// <param name="PhyAddrLen">MAC地址的长度</param>
/// <returns></returns>
[DllImport("iphlpapi.dll", ExactSpelling = true)]
private static unsafe extern int SendARP(int DestIP, int SrcIP, [Out] byte[] pMacAddr, ref int PhyAddrLen);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 在线程中扫描
/// </summary>
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private static void LanSearchThreadMethod()
{
int i = Convert.ToUInt16(Thread.CurrentThread.Name);
Console.Write(".");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string strIP = "192.168.1." + i.ToString();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//IPHostEntry ip = null;
IPAddress ip = null;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
//ip = Dns.GetHostEntry(strIP);
ip = IPAddress.Parse(strIP);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
catch
{
//Console.WriteLine("请勿输入非法IP地址");
return;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
byte[] b = new byte[6];
int len = b.Length;
//int r = SendARP(BitConverter.ToInt32(ip.AddressList[0].GetAddressBytes(), 0), 0, b, ref len);
int r = SendARP(BitConverter.ToInt32(ip.GetAddressBytes(), 0), 0, b, ref len);
int num = BitConverter.ToInt32(b, 0);
string mac = BitConverter.ToString(b, 0, 6);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (num != 0)
{//有效MAC
//Console.WriteLine("\r\n{0}--{1}--{2}", ip.AddressList[0].ToString(), ip.HostName, mac);
Console.WriteLine("\r\n{0}--{1}", ip.ToString(), mac);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 程序主入口
/// </summary>
/// <param name="args"></param>
[STAThread]
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
static void Main(string[] args)
{
Thread[] thread = new Thread[255];
ThreadStart threadMethod;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < 255; i++)
{
threadMethod = new ThreadStart(LanSearchThreadMethod);
thread[i] = new Thread(threadMethod);
thread[i].Name = i.ToString();
thread[i].Start();
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (!thread[i].Join(100))
{
thread[i].Abort();
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("\r\n按任意键返回");
Console.ReadLine();
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)