相关疑难解决方法(0)

C# - 查找我的机器的本地IP地址而不是VM的

我的机器上安装了VirtualBox VM,因此有一个为其显示的以太网适配器.我通过以下方式列举了我机器的IP地址列表:

       public string GetLocalIpAddress()
       {
            try
            {
                string strHostName = Dns.GetHostName();

                // Then using host name, get the IP address list..
                IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);

                foreach (IPAddress ip in ipEntry.AddressList)
                {
                    if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        return string.Format("({0})", ip.ToString());
                    }
                }
            }
            catch(Exception e)
            {
                Global.ApplicationLog.AddApplicationLog(EnumAppEventTypes.SYSTEM_ERROR, e.ToString());
            }

            return "";
        }
Run Code Online (Sandbox Code Playgroud)

我的问题是虚拟机的以太网适配器也符合以下条件:

if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
Run Code Online (Sandbox Code Playgroud)

有没有办法挑选我的机器的本地IP地址并忽略我的虚拟机?

c#

10
推荐指数
4
解决办法
7355
查看次数

寻找物理适配器的MAC地址

我想使用唯一标识符来确定我的应用程序是否移动到另一台计算机.MAC地址似乎适合此目的.我使用的代码是这样的:

Procedure TForm4.GetMacAddress;
var item: TListItem;
    objWMIService : OLEVariant;
    colItems      : OLEVariant;
    colItem       : OLEVariant;
    oEnum         : IEnumvariant;
    iValue        : LongWord;
    wmiHost, root, wmiClass: string;
    i: Int32;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;//for access to a bind context
    Moniker: IMoniker;//Enables you to use a moniker object
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));//Converts a string into a moniker that identifies the object named by the string
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));//Binds to the specified object
  end;

begin …
Run Code Online (Sandbox Code Playgroud)

windows delphi wmi networking delphi-xe

6
推荐指数
1
解决办法
5086
查看次数

Mac或主板作为许可用途的唯一标识符?

好的,所以我使用MAC地址作为唯一标识符,一切顺利,直到我激活VPN并且mac地址改变了.....

所以,我有两个选择:

1)获取实际物理网卡的MAC地址

对于mac地址,我发现了几个如何实现这一目的的提示:

2.)获取主板ID并使用它,并希望我们不会得到2台具有相同ID的计算机(可能吗?)

public String getMotherBoardID()
{
    String serial = "";
    try
    {
        ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard");
        ManagementObjectCollection moc = mos.Get();

        foreach (ManagementObject mo in moc)
        {
            serial = mo["SerialNumber"].ToString();
        }
        return serial;
    }
    catch (Exception)
    {
        return serial;
    }
}
Run Code Online (Sandbox Code Playgroud)

你说什么?我应该尝试挖掘并找到从卡中获取mac地址而不是虚拟地址的代码,还是应该切换到主板?而且我不需要结合任何东西,我只需要在目标计算机上不会轻易改变的东西.

.net c# hardware visual-studio-2010

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

delphi ×1

delphi-xe ×1

hardware ×1

networking ×1

visual-studio-2010 ×1

windows ×1

wmi ×1