现在知道获取本地的所有IP,但我想找到连接Server所用的IP,请问有没有办法?

解决方案 »

  1.   

    局域网里可以通过ping服务器主机名获取ip地址
      

  2.   

    socketForClient.RemoteEndPoint
    看是谁在连接
      

  3.   

    System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].ToString();
      

  4.   

    System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].ToString()
    用TCP 或者UDP 做一个通讯包
    客户端连接的时候把客户端的IP发给服务端 
      

  5.   

    利用dns类和WMI规范获取IP及MAC地址在C#编程中,要获取主机名和主机IP地址,是比较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址.示例:
    string strHostName = Dns.GetHostName();   //得到本机的主机名
    IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
    string strAddr = ipEntry.AddressList[0].ToString(); //假设本地主机为单网卡在这段代码中使用了两个类,一个是Dns类,另一个为IPHostEntry类,二者都存在于命名空间System.Net中.
    Dns类主要是从域名系统(DNS)中检索关于特定主机的信息,上面的代码第一行就从本地的DNS中检索出本地主机名.
    IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.
    要获取远程主机的IP地址,其方法也是大同小异.在获取了IP地址后,如果还需要取得网卡的MAC地址,就需要进一步探究了.
    这里又分两种情况,一是本机MAC地址,二是远程主机MAC地址.二者的获取是完全不同的.
    在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.NET框架中,WMI规范的实现定义在System.Management命名空间中.
    ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合
    ManagementObjectCollection类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.示例:
    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();
    }获取远程主机的MAC地址时,需要借用API函数SendARP.该函数使用ARP协议,向目的主机发送ARP包,利用返回并存储在高速缓存中的IP和MAC地址对,从而获取远程主机的MAC地址.示例:
    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);   //发送ARP包
       return Convert.ToString(macinfo,16); 

    catch(Exception err) 

       Console.WriteLine("Error:{0}",err.Message); 

    return 0.ToString();但使用该方式获取MAC时有一个很大的限制,就是只能获取同网段的远程主机MAC地址.因为在标准网络协议下,ARP包是不能跨网段传输的,故想通过ARP协议是无法查询跨网段设备MAC地址的。示例程序: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    {
         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    {
              Console.WriteLine(temp[i]);
        }
        Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
       }
      

  6.   

    Dns类  有关IP操作
    请参考http://msdn.microsoft.com/zh-cn/library/b8hth2dy(v=VS.80).aspx
      

  7.   

    原理其实很简单,在cmd.exe下面ping一下几台机,然后用arp -a命令查看一下,这种方式比开多线程去循环扫描的方式来的简单而有效。
    //首先来个循环ping一下那个网段的主机。
    //其次用以下的函数去获取所有的局域网内有响应的ip地址列表
    public static ArrayList GetAllLocalMachines()
    {    
     Process p = new Process();    
     p.StartInfo.FileName = "cmd.exe";    
     p.StartInfo.UseShellExecute = false;    
     p.StartInfo.RedirectStandardInput = true;    
     p.StartInfo.RedirectStandardOutput = true;    
     p.StartInfo.RedirectStandardError = true;    
     p.StartInfo.CreateNoWindow = true;    
     p.Start();    
     p.StandardInput.WriteLine("arp -a");    
     p.StandardInput.WriteLine("exit");    
     ArrayList list = new ArrayList();    
     StreamReader reader = p.StandardOutput;    
     string IPHead = Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString().Substring(0, 3);    
     for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())    
     {        
      line = line.Trim();        
      if (line.StartsWith(IPHead) && (line.IndexOf("dynamic") != -1))        
      {            
       string IP = line.Substring(0, 15).Trim();            
       string Mac = line.Substring(line.IndexOf("-") - 2, 0x11).Trim();            
       LocalMachine localMachine = new LocalMachine();            
       localMachine.MachineIP = IP;            
       localMachine.MachineMAC = Mac;            
       localMachine.MachineName = "";            
       list.Add(localMachine);        
      }    
     }    
     return list;
    }
      

  8.   

    找一个IPHelper类,获取所有当前TCP连接,然后再判断找出远程地址是服务器地址的IP即可。