日期:2014-05-18  浏览次数:20861 次

c#如何取到 win7 机器的 32位ip地址呢?我的代码取到的不是 32 位的呀?
c#如何取到 win7 机器的 32位ip地址呢?我的代码取到的不是 32 位的呀?
我的 ip地址字段,宽度是 varchar(15),但是用下面的代码,
对于win7的机器,取到的是 fe80::d09e:56b9:eb8a:db5%11
我如何得到 win7 的32位 ip地址呢?
我在这台win7上,用vb6程序就可以取到 32位的ip地址,
但是用 c# 如何实现呢?

以下的我的代码,如何修改呢?
C# code

        //写入登录日志
        public void DengluRiZhi()
        {
            string hostname = System.Net.Dns.GetHostName(); //主机
            System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(hostname);//网卡IP地址集合
            string IP = ipEntry.AddressList[0].ToString();//取一个IP 

            string strsql = "";
            command = new SqlCommand();
            command.Connection = mydb.conn;

            strsql = "insert MIS登录信息 (程序名,登录ip,登录机器名,登录人编号,登录人姓名,登录时间) ";
            strsql += "select '成品管理','" + IP + "','" + hostname + "','" + struserid + "','" + strusername + "',getdate()";
            command.CommandText = strsql;
            command.ExecuteNonQuery();
        }



------解决方案--------------------
http://hi.baidu.com/jx89/blog/item/1de52865b3e35628aa184c79.html
------解决方案--------------------
Windows7内置了IPv6的程序,并将IPv6地址设为第一个地址。
要想通用,建议可以通过获取Windows的内核版本号来确定
if (System.Environment.OSVersion.Version.Major >= 6)//6为win7的主版本号
string IP = ipEntry.AddressList[1].ToString() 
else
string IP = ipEntry.AddressList[0].ToString() 
没用过Vista,不知道它里面的情况。
------解决方案--------------------
string sIp = "";
ManagementClass oMc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection oMoc = oMc.GetInstances();
foreach (ManagementObject oMo in oMoc)
{
if ((bool)oMo["IPEnabled"] == true)
{
string[] IPAddresses = (string[])oMo["IPAddress"];
if (IPAddresses.Length > 0)
sIp = IPAddresses[0];
break;
}
}