如何在Flex中查找系统(本地)IP地址?

3
我正在处理一个项目。在该项目中,我们可以向IT部门注册有关系统故障或软件故障的投诉。在我们公司,每台计算机都有唯一的本地系统IP地址。
我希望我的投诉可以与该地址一起注册,这样IT人员就可以识别我的系统并修复它。我在SO上找到了很多内容,但没有解决我的问题。有没有任何解决方案?任何建议都将非常有帮助。

既然现在有赏金了,那么我建议使用CGI变量的想法为什么行不通呢?具体来说,在您的服务器端ASP.NET代码中访问REMOTE_ADDR服务器变量有什么问题吗? - JeffryHouser
@www.Flextras.com 哎呀,我不知道Adobe有这个限制。我已经在C# Web Service中使用了REMOTE_ADDR,它可以工作。所以为了获取系统IP,我必须从Flex调用那个.Net服务,这有点不方便。 - Santhosh Nayak
很抱歉让你感到不舒服,但事实就是这样。你打算接受答案并/或颁发悬赏奖励,还是让悬赏过期? - JeffryHouser
3个回答

4

这是我从Flex AIR客户端获取IP地址的方式:

public static function getClientIPAddress (version:String):String {
        var ni:NetworkInfo = NetworkInfo.networkInfo;
        var interfaceVector:Vector.<NetworkInterface> = ni.findInterfaces();
        var currentNetwork:NetworkInterface;

        for each (var networkInt:NetworkInterface in interfaceVector) {
            if (networkInt.active) {
                for each (var address:InterfaceAddress in networkInt.addresses) {
                    if (address.ipVersion == version) {
                        return address.address;
                    }
                }
            }
        }
        return "";
    }

好的,谢谢。我的实际需求是在Flex Web应用程序中。 - Santhosh Nayak

3
您没有说明这是基于浏览器的应用程序还是桌面版的AIR应用程序。
基于浏览器的Flash Player无法访问IP地址。但是,当Flash Player ping远程服务时,该请求的IP地址通常作为CGI变量可用于该请求。如何访问这些CGI变量将取决于您选择的服务器端语言。
我不认为AIR本身具有访问IP地址的本地功能,但是您可以使用类似NativeProcess或Native Extensions之类的东西来获取它。但是,您需要编写一些特定于操作系统的代码才能获得它。

我的应用程序是基于浏览器的。我对CGI变量和NativeProcess没有太多了解,不过还是谢谢您的回复... :) 如果可能的话,如何使用.Net webservice实现呢? - Santhosh Nayak
1
你可以在AIR中访问网络接口([来源](http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b8f6c0-7ffe.html#WSb2ba3b1aad8a27b04a6701d612482d399e5-8000)),这将为您提供网络设备及其属性(例如IP地址)的列表,但似乎不会提供“这是您当前的IP”等信息。 - NoobsArePeople2
1
NativeProcess或Native Extensions仅适用于AIR应用程序。在ASP.NET中,似乎可以使用服务器变量:http://www.w3schools.com/asp/coll_servervariables.asp。请查看REMOTE_ADDR。 - JeffryHouser
我通常以个人身份而非脚本使用whatismyip.com来查询IP地址。但是他们有这个页面:http://automation.whatismyip.com/n09230945.asp 和一个政策页面: http://www.whatismyip.com/faq/automation.asp。最终,您可能希望控制执行此操作的服务器,并且如上所述,由于通过的数据包将具有设置了IP来源的IP,因此基本上可以在任何服务器端代码中完成此操作。类似地,这可能是一个选择:http://api.hostip.info/get_html.php。 - shaunhusain

1

仅通过Flash Player无法完成此操作。 目前,您只需接受这个最终答案。 在这上面放置赏金没有太多意义……如果您在Google上搜索,您会发现许多Flash专家对Adobe的这种限制感到沮丧。

其他答案是正确的……也就是说,如果您使用Adobe Air或其他非Adobe方法(如CGI、PHP、Java、.NET等),则可以完成此操作。

如果您想问如何在.NET中完成此操作,请在另一个问题中发布它。(您最初提出的问题很好,应该保留在SO上。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接