【问题标题】:how to detect user ip address in unity c#? [closed]如何在统一 c# 中检测用户 IP 地址? [关闭]
【发布时间】:2021-11-15 13:46:58
【问题描述】:

我必须创建一个使用 Unity API 检测用户 IP 地址的反黑客系统。有什么简单的方法可以解决吗?

我还需要检查播放器是否使用 VPN 连接。所有这些都必须在 Unity 和 C# 中完成。帮助将不胜感激。谢谢

【问题讨论】:

  • 好的,感谢您的帮助,我遇到了很多文档,但非常混乱。
  • 对于IP,可以在here找到答案。接受的答案是服务器 IP,而不是本地计算机 IP,因此请通读所有这些。
  • 也只是为了澄清 - 我删除了我原来的评论,因为我链接了错误的帖子。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: c# android unity3d vpn


【解决方案1】:

您可以使用以下示例对其进行扩展和调整。并非所有 VPN 服务都可以将其接口命名为“vpn”,但大多数会。您可以创建 Hyper-V 或虚拟机(或租用 VPS 服务器)并安装一些 VPN 应用程序以查看它们的接口名称。

要获取公共 IP,您可以使用 WWWForm 或 UnityWebRequest 从统一调用一些免费的 Web API,它们会以 JSON 格式返回公共 IP。一个例子是https://www.ipify.org/https://www.bigdatacloud.com/client-info-apis/public-ip-address-api

public IEnumerator ScanNetworkInterfaces()
{
    while(Application.isPlaying && SM.CurrentState == GameManagerState.Intro)
    {
        bool foundVPN = false;

        yield return new WaitForSeconds(2);
        foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (ni.OperationalStatus == OperationalStatus.Up)
            {
                if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
                    {
                        if (ip != null && ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            // My addresses
                            if (ni.Description.ToLower().Contains("vpn"))
                            {
                                foundVPN = true;
                            }
                        }

                        yield return null;
                    }
                }
            }

            yield return null;
        }

        if (foundVPN)
            MainMenuPanel.Instance.ShowWarning("Possibly detected a VPN - you may need to disable it or game will disconnect immediately!");
        else
            MainMenuPanel.Instance.HideWarning();
    }
}

【讨论】:

  • 非常感谢。你是救命稻草。我会在这个线程上发布更新。
  • 对于 vpn,它就像一个魅力。但是有没有其他方法可以在不使用任何 SDK 的情况下检测 IP?
【解决方案2】:

从您的应用程序向您的服务器发送一个独特的请求,然后查看您在服务器上看到的请求的 IP。

对于第二个问题:您只能将 IP 与已知代理列表进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多