比较棘手的问题,高分相送。已知对方的IP地址,想取得MAC地址,如何实现? 主机和客户机处于同一网段内。主机是windows 2000系统,客户机系统不定。为2000、XP、2003或者Solarise。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 示例程序: using System.Net; using System; using System.Management; using System.Runtime.InteropServices; public class getIP { [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); //获取本机的IP public string getLocalIP() { string strHostName = Dns.GetHostName(); //得到本机的主机名 IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP string strAddr = ipEntry.AddressList[0].ToString(); return(strAddr); } //获取本机的MAC public string getLocalMac() { string mac = null; ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ; ManagementObjectCollection queryCollection = query.Get(); foreach( ManagementObject mo in queryCollection ) { if(mo["IPEnabled"].ToString() == "True") mac = mo["MacAddress"].ToString(); } return(mac); } //获取远程主机IP public string[] getRemoteIP(string RemoteHostName) { IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName); IPAddress[] IpAddr = ipEntry.AddressList; string[] strAddr = new string[IpAddr.Length]; for (int i=0;i<IpAddr.Length;i++) { strAddr[i] = IpAddr[i].ToString(); } return(strAddr); } //获取远程主机MAC public string getRemoteMac(string localIP, string remoteIP) { Int32 ldest= inet_addr(remoteIP); //目的ip Int32 lhost= inet_addr(localIP); //本地ip try { Int64 macinfo = new Int64(); Int32 len = 6; int res = SendARP(ldest,0, ref macinfo, ref len); return Convert.ToString(macinfo,16); } catch(Exception err) { Console.WriteLine("Error:{0}",err.Message); } return 0.ToString(); } public static void Main(string[] args) { getIP gi = new getIP(); Console.WriteLine("本地网卡信息:"); Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac()); Console.WriteLine("\n\r远程网卡信息:"); string[] temp = gi.getRemoteIP("scmobile-tj2"); for(int i=0;i<temp.Length;i++) { Console.WriteLine(temp[i]); } Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1")); } } 如果要想获得远程的地址,需要用sendarp这个函数来实现。具体的代码如下:[DllImport("Iphlpapi.dll")]private static unsafe extern int SendARP(Int32 dest,Int32 host,ref IntPtr mac,ref IntPtr length);[DllImport("Ws2_32.dll")]private static extern Int32 inet_addr(string ip);Int32 ldest= inet_addr("157.60.68.163");//目的地的ipInt32 lhost= inet_addr("157.60.68.33");//本地的iptry{ Byte[] macinfo=new Byte[6]; Int32 length=6; IntPtr mac=new IntPtr(macinfo[0]); IntPtr len=new IntPtr(6); int ii=SendARP(ldest,lhost, ref mac, ref len); Console.WriteLine("Mac Add:"+mac); Console.WriteLine("length:"+len); }catch(Exception err){ Console.WriteLine(err);}关于SendARP函数的具体说明请参看:Platform SDK: Internet Protocol Helper SendARPhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/tcpip/tcpip_4wz4.asp 示例程序: using System.Net; using System; using System.Management; using System.Runtime.InteropServices; public class getIP { [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); //获取本机的IP public string getLocalIP() { string strHostName = Dns.GetHostName(); //得到本机的主机名 IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP string strAddr = ipEntry.AddressList[0].ToString(); return(strAddr); } //获取本机的MAC public string getLocalMac() { string mac = null; ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ; ManagementObjectCollection queryCollection = query.Get(); foreach( ManagementObject mo in queryCollection ) { if(mo["IPEnabled"].ToString() == "True") mac = mo["MacAddress"].ToString(); } return(mac); } //获取远程主机IP public string[] getRemoteIP(string RemoteHostName) { IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName); IPAddress[] IpAddr = ipEntry.AddressList; string[] strAddr = new string[IpAddr.Length]; for (int i=0;i<IpAddr.Length;i++) { strAddr[i] = IpAddr[i].ToString(); } return(strAddr); } //获取远程主机MAC public string getRemoteMac(string localIP, string remoteIP) { Int32 ldest= inet_addr(remoteIP); //目的ip Int32 lhost= inet_addr(localIP); //本地ip try { Int64 macinfo = new Int64(); Int32 len = 6; int res = SendARP(ldest,0, ref macinfo, ref len); return Convert.ToString(macinfo,16); } catch(Exception err) { Console.WriteLine("Error:{0}",err.Message); } return 0.ToString(); } public static void Main(string[] args) { getIP gi = new getIP(); Console.WriteLine("本地网卡信息:"); Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac()); Console.WriteLine("\n\r远程网卡信息:"); string[] temp = gi.getRemoteIP("scmobile-tj2"); for(int i=0;i<temp.Length;i++) { Console.WriteLine(temp[i]); } Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1")); } } 示例程序: using System.Net; using System; using System.Management; using System.Runtime.InteropServices; public class getIP { [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); //获取本机的IP public string getLocalIP() { string strHostName = Dns.GetHostName(); //得到本机的主机名 IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP string strAddr = ipEntry.AddressList[0].ToString(); return(strAddr); } //获取本机的MAC public string getLocalMac() { string mac = null; ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ; ManagementObjectCollection queryCollection = query.Get(); foreach( ManagementObject mo in queryCollection ) { if(mo["IPEnabled"].ToString() == "True") mac = mo["MacAddress"].ToString(); } return(mac); } //获取远程主机IP public string[] getRemoteIP(string RemoteHostName) { IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName); IPAddress[] IpAddr = ipEntry.AddressList; string[] strAddr = new string[IpAddr.Length]; for (int i=0;i<IpAddr.Length;i++) { strAddr[i] = IpAddr[i].ToString(); } return(strAddr); } //获取远程主机MAC public string getRemoteMac(string localIP, string remoteIP) { Int32 ldest= inet_addr(remoteIP); //目的ip Int32 lhost= inet_addr(localIP); //本地ip try { Int64 macinfo = new Int64(); Int32 len = 6; int res = SendARP(ldest,0, ref macinfo, ref len); return Convert.ToString(macinfo,16); } catch(Exception err) { Console.WriteLine("Error:{0}",err.Message); } return 0.ToString(); } public static void Main(string[] args) { getIP gi = new getIP(); Console.WriteLine("本地网卡信息:"); Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac()); Console.WriteLine("\n\r远程网卡信息:"); string[] temp = gi.getRemoteIP("scmobile-tj2"); for(int i=0;i<temp.Length;i++) { Console.WriteLine(temp[i]); } Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1")); } } 怎么防止winform控件拖动到窗体之外 新手求面向对象一条简单的题目答案(十万火急) 求c#存储过程的out多个参数 只有属性没有方法的类,用struct代替,如何? 求C# winform 多线程读写数据库例子 请教高手网上没找到的具体解决的问题。疑难的数据库备份问题 c# 正则替换 WPF RenderTransform 问题 C#语言(语法)学完了,下来学什么? C# 从txt文件中每次读取20个数据放入float数组 在C#中怎么实现高效扫描远程计算机端口? 请大家帮忙提供个思路,如何实现这种情况数据的查询。
using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;
public class getIP
{
[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);
//获取本机的IP
public string getLocalIP()
{
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString();
return(strAddr);
}
//获取本机的MAC
public string getLocalMac()
{
string mac = null;
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
}
return(mac);
}
//获取远程主机IP
public string[] getRemoteIP(string RemoteHostName)
{
IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
IPAddress[] IpAddr = ipEntry.AddressList;
string[] strAddr = new string[IpAddr.Length];
for (int i=0;i<IpAddr.Length;i++)
{
strAddr[i] = IpAddr[i].ToString();
}
return(strAddr);
}
//获取远程主机MAC
public string getRemoteMac(string localIP, string remoteIP)
{
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip
try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();
}
public static void Main(string[] args)
{
getIP gi = new getIP();
Console.WriteLine("本地网卡信息:");
Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());
Console.WriteLine("\n\r远程网卡信息:");
string[] temp = gi.getRemoteIP("scmobile-tj2");
for(int i=0;i<temp.Length;i++)
{
Console.WriteLine(temp[i]);
}
Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
}
}
[DllImport("Iphlpapi.dll")]
private static unsafe extern int SendARP(Int32 dest,Int32 host,ref IntPtr mac,ref IntPtr length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);Int32 ldest= inet_addr("157.60.68.163");//目的地的ip
Int32 lhost= inet_addr("157.60.68.33");//本地的iptry
{
Byte[] macinfo=new Byte[6];
Int32 length=6;
IntPtr mac=new IntPtr(macinfo[0]);
IntPtr len=new IntPtr(6);
int ii=SendARP(ldest,lhost, ref mac, ref len);
Console.WriteLine("Mac Add:"+mac);
Console.WriteLine("length:"+len);
}
catch(Exception err)
{
Console.WriteLine(err);
}关于SendARP函数的具体说明请参看:Platform SDK: Internet Protocol Helper SendARP
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tcpip/tcpip_4wz4.asp
using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;
public class getIP
{
[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);
//获取本机的IP
public string getLocalIP()
{
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString();
return(strAddr);
}
//获取本机的MAC
public string getLocalMac()
{
string mac = null;
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
}
return(mac);
}
//获取远程主机IP
public string[] getRemoteIP(string RemoteHostName)
{
IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
IPAddress[] IpAddr = ipEntry.AddressList;
string[] strAddr = new string[IpAddr.Length];
for (int i=0;i<IpAddr.Length;i++)
{
strAddr[i] = IpAddr[i].ToString();
}
return(strAddr);
}
//获取远程主机MAC
public string getRemoteMac(string localIP, string remoteIP)
{
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip
try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();
}
public static void Main(string[] args)
{
getIP gi = new getIP();
Console.WriteLine("本地网卡信息:");
Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());
Console.WriteLine("\n\r远程网卡信息:");
string[] temp = gi.getRemoteIP("scmobile-tj2");
for(int i=0;i<temp.Length;i++)
{
Console.WriteLine(temp[i]);
}
Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
}
} 示例程序:
using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;
public class getIP
{
[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);
//获取本机的IP
public string getLocalIP()
{
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString();
return(strAddr);
}
//获取本机的MAC
public string getLocalMac()
{
string mac = null;
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
}
return(mac);
}
//获取远程主机IP
public string[] getRemoteIP(string RemoteHostName)
{
IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
IPAddress[] IpAddr = ipEntry.AddressList;
string[] strAddr = new string[IpAddr.Length];
for (int i=0;i<IpAddr.Length;i++)
{
strAddr[i] = IpAddr[i].ToString();
}
return(strAddr);
}
//获取远程主机MAC
public string getRemoteMac(string localIP, string remoteIP)
{
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip
try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();
}
public static void Main(string[] args)
{
getIP gi = new getIP();
Console.WriteLine("本地网卡信息:");
Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());
Console.WriteLine("\n\r远程网卡信息:");
string[] temp = gi.getRemoteIP("scmobile-tj2");
for(int i=0;i<temp.Length;i++)
{
Console.WriteLine(temp[i]);
}
Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
}
}