日期:2014-05-17 浏览次数:21148 次
使用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();
??????? }