如果读IP的话,客户端用ADSL重启后,IP就换了一个局域网内的用户怎么办呀!先谢谢了!

解决方案 »

  1.   

    参考::
    http://community.csdn.net/Expert/topic/3393/3393163.xml?temp=4.156131E-02
      

  2.   

    参考::
    http://community.csdn.net/Expert/topic/3393/3393163.xml?temp=4.156131E-02这个贴子我发布的, 找了半天, 只能读到本机的, 所以这回又来发了,哈哈, 还是谢谢你!兄弟也是没办法了
      

  3.   

    使用下类可以得到mac地址public class Win32 {
           [DllImport("Iphlpapi.dll")]
           public static  extern int SendARP(Int32 dest,Int32 host,ref IntPtr mac,ref IntPtr length);
           [DllImport("Ws2_32.dll")]
           public static extern Int32 inet_addr(string ip);
        }//调用dll的类     void mac()
          {
            Int32 ldest= Win32.inet_addr(Request.UserHostAddress);//目的地的ip
           Int32 lhost=Win32.inet_addr("190.10.51.5");//本地的ip
           try
            {
             Byte[] macinfo=new Byte[6];
             Int32 length=6;
        
             IntPtr mac=new IntPtr(macinfo[0]);
             IntPtr len=new IntPtr(6);
             int ii=Win32.SendARP(ldest,lhost, ref mac, ref len);
     
             
             ip+="**mac地址:"+mac.ToString();
                }
             catch(Exception err)
              {
             ip+="";
              }
             }//mac
      

  4.   

    string strClientIP=this.Page.Request.UserHostAddress;
    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = "nbtstat.exe";
    psi.RedirectStandardInput = false;
    psi.RedirectStandardOutput = true;
    psi.Arguments = "-A " + strClientIP;
    psi.UseShellExecute = false;
    Process ps = Process.Start(psi);
    string strEnd = ps.StandardOutput.ReadToEnd();
    ps.WaitForExit();
    string[] strs = strEnd.Split('\n');
    foreach(string s in strs)
    {
    if(s.Trim().ToLower().IndexOf("mac address") != -1)
    {
    string strTemp = s.Substring(s.IndexOf("Address =") + 10);
    Response.Write(strTemp);
    }
    }
    Response.End();
      

  5.   

    using System;
    using System.Collections;
    using System.Management;namespace ArLi.CommonPrj
    {
    public class GetOfMACAddr
    {
    public GetOfMACAddr()
    {
    } /// <summary>得到网卡 MAC 地址</summary>
    /// <returns>返回地址数组,字符类型</returns>
    /* 例: ArrayList myAddr = ArLi.CommonPrj.GetOfMACAddr.GetIt();
    for (int i=0; i<myAddr.Count; i++) MessageBox.Show(myAddr[i].ToString());

    */
    public static ArrayList GetIt() { 
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
    ManagementObjectCollection moc = mc.GetInstances(); 
    ArrayList strArr = new ArrayList();

    //网卡数
    foreach(ManagementObject mo in moc) {
    if((bool)mo["IPEnabled"]) {
    strArr.Add(mo["MacAddress"].ToString().Replace(":",""));
    }
    mo.Dispose();
    } return strArr; 
    }
    }
    }
      

  6.   

    不应该用IntPtr的。通过它只能访问到Int32(在32位平台上)大小的内容。 
    下面修改过的C#代码已验证通过(未将网络字节顺序转换为主机字节顺序): [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); static private Int64 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 macinfo; 

    catch(Exception err) 

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

    return 0; 
    } 至于第二个问题,在标准网络协议下,ARP包是不可能跨网段传输的,故想通 
    过ARP协议是无法查询跨网段设备MAC地址的。 
      

  7.   

    从服务端可以取得相同网段的网卡的MAC地址,但对于不同网段的就无能为力.不过,用客户端脚本也是可以获取的,示例如下:
    <HTML>
    <HEAD>
    <TITLE>WMI Scripting HTML</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    <SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
    document.forms[0].txtMACAddr.value=unescape(MACAddr);
    document.forms[0].txtIPAddr.value=unescape(IPAddr);
    document.forms[0].txtDNSName.value=unescape(sDNSName);
    </SCRIPT><SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
    if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
    {
    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
    MACAddr = objObject.MACAddress;
    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
    IPAddr = objObject.IPAddress(0);
    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
    sDNSName = objObject.DNSHostName;
    }
    </SCRIPT><META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
    <BODY>
    <OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
    <OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
    <SCRIPT language=JScript>
    var service = locator.ConnectServer();
    var MACAddr ;
    var IPAddr ;
    var DomainAddr;
    var sDNSName;
    service.Security_.ImpersonationLevel=3;
    service.InstancesOfAsync(foo, ''Win32_NetworkAdapterConfiguration'');
    </SCRIPT><FORM id=formfoo name=formbar action=NICPost.asp method=post>
    <INPUT value=00:05:5D:0E:C7:FA name=txtMACAddr> 
    <INPUT value=192.168.0.2 name=txtIPAddr> 
    <INPUT value=typ name=txtDNSName> 
    </FORM>
    </BODY>
    </HTML>
      

  8.   

    路过<HTML>
    <HEAD>
    <TITLE>WMI Scripting HTML</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    <SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
    document.forms[0].txtMACAddr.value=unescape(MACAddr);
    document.forms[0].txtIPAddr.value=unescape(IPAddr);
    document.forms[0].txtDNSName.value=unescape(sDNSName);
    </SCRIPT><SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
    if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
    {
    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
    MACAddr = objObject.MACAddress;
    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
    IPAddr = objObject.IPAddress(0);
    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
    sDNSName = objObject.DNSHostName;
    }
    </SCRIPT><META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
    <BODY>
    <OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
    <OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
    <SCRIPT language=JScript>
    var service = locator.ConnectServer();
    var MACAddr ;
    var IPAddr ;
    var DomainAddr;
    var sDNSName;
    service.Security_.ImpersonationLevel=3;
    service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
    </SCRIPT><FORM id=formfoo name=formbar action=NICPost.asp method=post>
    <INPUT value=00:05:5D:0E:C7:FA name=txtMACAddr> 
    <INPUT value=192.168.0.2 name=txtIPAddr> 
    <INPUT value=typ name=txtDNSName> 
    </FORM>
    </BODY>
    </HTML> 
    <HTML>
    <HEAD>
    <TITLE>WMI Scripting HTML</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    <SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
    document.forms[0].txtMACAddr.value=unescape(MACAddr);
    document.forms[0].txtIPAddr.value=unescape(IPAddr);
    document.forms[0].txtDNSName.value=unescape(sDNSName);
    </SCRIPT><SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
    if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
    {
    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
    MACAddr = objObject.MACAddress;
    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
    IPAddr = objObject.IPAddress(0);
    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
    sDNSName = objObject.DNSHostName;
    }
    </SCRIPT><META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
    <BODY>
    <OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
    <OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
    <SCRIPT language=JScript>
    var service = locator.ConnectServer();
    var MACAddr ;
    var IPAddr ;
    var DomainAddr;
    var sDNSName;
    service.Security_.ImpersonationLevel=3;
    service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
    </SCRIPT><FORM id=formfoo name=formbar action=NICPost.asp method=post>
    <INPUT value=00:05:5D:0E:C7:FA name=txtMACAddr> 
    <INPUT value=192.168.0.2 name=txtIPAddr> 
    <INPUT value=typ name=txtDNSName> 
    </FORM>
    </BODY>
    </HTML>