日期:2014-05-17  浏览次数:21111 次

C#使用API利用ARP协议获得同网段计算机的MAC

使用API,利用ARP协议,只能获得同网段计算机的MAC

??????? [DllImport("Iphlpapi.dll")]

??????? private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);

??????? [DllImport("Ws2_32.dll")]

??????? private static extern Int32 inet_addr(string ip);

??????? public static string GetRemoteMac(string clientIP)

??????? {

??????????? string ip = clientIP;

??????????? if ( ip == "127.0.0.1")

??????????????? ip = GetLocalIP()[0];

??????????? Int32 ldest=inet_addr(ip);

??????????? Int64 macinfo=new Int64();

??????????? Int32 len=6;

??????????? try

??????????? {

??????????????? SendARP(ldest,0,ref macinfo,ref len);

??????????? }

??????????? catch

??????????? {

??????????????? return "";

??????????? }

??????????? string originalMACAddress = Convert.ToString(macinfo,16);

??????????? if (originalMACAddress.Length<12)

??????????? {

??????????????? originalMACAddress = originalMACAddress.PadLeft(12,'0');

??????????? }

??????????? string macAddress;

??????????? if(originalMACAddress!="0000" && originalMACAddress.Length==12)

??????????? {

??????????????? string mac1,mac2,mac3,mac4,mac5,mac6;

??????????????? mac1=originalMACAddress.Substring(10,2);

??????????????? mac2=originalMACAddress.Substring(8,2);

??????????????? mac3=originalMACAddress.Substring(6,2);

??????????????? mac4=originalMACAddress.Substring(4,2);

??????????????? mac5=originalMACAddress.Substring(2,2);

??????????????? mac6=originalMACAddress.Substring(0,2);

??????????????? macAddress=mac1+"-"+mac2+"-"+mac3+"-"+mac4+"-"+mac5+"-"+mac6;

??????????? }

??????????? else

??????????? {

??????????????? macAddress="";

??????????? }

??????????? return macAddress.ToUpper();

??????? }