如何在统一 c# 中检测用户 IP 地址? [关闭]

Posted

技术标签:

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

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

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

【问题讨论】:

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

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

要获取公共 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 found*** = 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("***"))
                            
                                found*** = true;
                            
                        

                        yield return null;
                    
                
            

            yield return null;
        

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

【讨论】:

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

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

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

【讨论】:

以上是关于如何在统一 c# 中检测用户 IP 地址? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

来自字符串的 C# IPAddress [关闭]

如何通过服务器端的 IP 地址估计用户位置? [关闭]

服务器安全检测提示“关闭远程访问或限制访问的ip地址” 怎么关闭呢?阿里云的服务器

C# - 连接到 (RAS) *** 时如何获取 IP 地址

在C#中获取用户计算机的IP地址[重复]

用C#怎么样判断用户IP地址是否国内的