本帖最后由 ltz983520 于 2009-11-21 00:21:40 编辑

解决方案 »

  1.   

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

  2.   


                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"])
                    {
                        string ip = ((string[])mo["IPAddress"])[0];
                        string mac = mo["MACAddress"].ToString();                    break;
                    }
                }
      

  3.   

    ManagementClass处理的都是WMI的东西,而Win32_NetworkAdapterConfiguration是WMI(Windows Mamagement Instructmentation)的其中一个Class
    关于WMI,楼主可以Google,百度看看
    而Win32_NetworkAdapterConfiguration,楼主可以查阅MSDN了解其中的具体结构当然,楼主也可以自己用Windows自带的WMIC(Windows Management Instructmentation Command-Line)来测试Win32_NetworkAdapterConfiguration,具体做法是:
    运行wmic命令,第一次运行会优点慢,因为Windows会要安装WMIC
    安装完了后, 楼主会进入一个类似于DOS的命令行界面,要测试Win32_NetworkAdapterConfiguration, 可以使用path命令path Win32_NetworkAdapterConfiguration从返回的数据可以详细看到Win32_NetworkAdapterConfiguration的结构关于WMIC, 楼主请自行搜索
      

  4.   

    楼上说的很啊,像LZ这样的问题只能用wmi来解决
      

  5.   

    调用cmd的ipconfig既简单又方便
      

  6.   

    这些人真是脱裤子放屁,老是搞这么复杂啊
    去注册表读吧
    要不就是用string strIP =  System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].ToString(); 
      

  7.   


    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Win32;
    using System.IO;
    using System.Windows.Forms;namespace GetIpConfig
    {
        class CardGrab
        {
            public void getIp(TextBox textBoxDeviceName, TextBox textBoxIPAddress, TextBox textBoxSubnetMask, TextBox textBoxGateway)
            {
                //指定一个开始关键字搜索的根关键字
                RegistryKey start = Registry.LocalMachine;
                RegistryKey cardSerivceName, networkKey;
                string networkcardKey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards";
                string serivceKey = "SYSTEM\\CurrentControlSet\\Services\\";
                string networkcardKeyName, deviceName;
                string deviveServiceName, serviceName;
                //关键字对象到相应的包含网络设备信息的子关键字
                RegistryKey serviceNames = start.OpenSubKey(networkcardKey);
                if (serviceNames == null)
                {
                    MessageBox.Show("Bad registry Key","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
                string[] networkCards = serviceNames.GetSubKeyNames();
                serviceNames.Close();
                //对每个网络设备的字关键字名重复使用GetSubKeyNames()方法。
                foreach(string keyName in networkCards)
                {
                    //由于服务关键字使用相同的关键字名,所以把那个值加到已知服务关键字的位置。
                    networkcardKeyName = networkcardKey + "\\" + keyName;
                    //用OpenSubKey()方法打开该关键字
                    cardSerivceName = start.OpenSubKey(networkcardKeyName);
                    if(cardSerivceName == null)
                    {
                        MessageBox.Show("Bad Registry Key:" + networkcardKeyName,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
                    }
                    //在打开了每个关键字之后,就可以用该关键字对象的GetValue()方法从服务关键字中检索IP信息了
                    //由于每条IP信息的数据入口可以有多个值,所以把结果分配到一个字符串数组,并用foreach显示完整的数组
                    deviveServiceName = (string)cardSerivceName.GetValue("ServiceName");
                    deviceName = (string)cardSerivceName.GetValue("Description");                
                    textBoxDeviceName.Text = deviceName;
                    serviceName = serivceKey + deviveServiceName + "\\Parameters\\Tcpip";
                    networkKey = start.OpenSubKey(serviceName);
                    if (networkKey == null)
                    {
                        MessageBox.Show("No IP Configuration Set","错误",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    }
                    else
                    {
                        string[] ipaddresses = (string[])networkKey.GetValue("IPAddress");
                        string[] defaultGateways = (string[])networkKey.GetValue("DefaultGateway");
                        string[] subnets = (string[])networkKey.GetValue("SubnetMask");
                        foreach (string ipaddress in ipaddresses)
                        {                       
                            textBoxIPAddress.Text = ipaddress;
                        }
                        foreach (string subnetmask in subnets)
                        {
                            textBoxSubnetMask.Text = subnetmask;
                        }
                        foreach (string defaultGateway in defaultGateways)
                        {
                            textBoxGateway.Text = defaultGateway;
                        }
                        networkKey.Close();
                    }
                }
                start.Close();
            }
        }爱选哪种就选哪种,我现在看出华侨大学的素质了,
    原来家乡的大学真是太差劲了
      

  8.   

    你用IP限制登陆次数?有什么意义呢?WinForm还是WEB啊?
    单机板的吗?
    我觉得好像没有意义啊,
      

  9.   

    我试过了!此项只能获取IP4的动态IP地址!如果用户修改IP的话那么久不能够限制他恶意登录了!不过还是感谢你的代码!
      

  10.   

    这是我一门选修课得课程设计,单机版的,本来只要求限制客户多次登录,我用全局变量就可以绝决了,但是后来我自己想到如过试用IP和网卡地址更加有效,但问题又出现了当用户修改IP或者用户修改物理地址时那么你应该如何解决这个BUG呢!
      

  11.   

    限制客户登陆的次数直接在SQL里面设置一个是否允许用户登陆的字段
      

  12.   

    这个用WMI得到网卡的MAC就行了
    这个多好啊,要不得到用户的CUP编号也可以的,WMI都可以做到的