主机和客户机处于同一网段内。
主机是windows 2000系统,客户机系统不定。为2000、XP、2003或者Solarise。

解决方案 »

  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"));
      }
     } 
      

  2.   

    如果要想获得远程的地址,需要用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");//目的地的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
      

  3.   

    示例程序:
     
     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"));
      }
     }