`
TonyLian
  • 浏览: 401033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

取得客户端的IP

阅读更多
前台是Flex,后台是Java,想要取得客户端的IP,似乎Flex不好实现,那么方法大概有3种:
1是为了这件事,后台再搭个IIS用ASP取,或用PHP取,然后Flex中通过HTTPService得到
2是后台Java取。但是,绝大部分例子都是Java的Servlet取客户端IP,和Flex连接的Java(或者说连接AMF的Spring)该如何取,还不知道,但今天找了一个非Servlet的例子,希望能有所启发。
3是通过JavaScript取得,然后在嵌入SWF的HTML里和SWF通讯

MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
    creationComplete="dpxml.send();"
    viewSourceURL="srcview/index.html">
  <mx:Script>
      <![CDATA[
      ]]>
  </mx:Script>
<mx:Style source="Standard.css"/>
<mx:HTTPService id="dpxml"
    showBusyCursor="true" method="POST" url="xxx.asp" useProxy="false" resultFormat="e4x"/>
<mx:DataGrid id="myDG" width="300" rowCount="20"
        dataProvider="{dpxml.lastResult.Province}" x="6" y="30" height="141" alpha="0.5">
        <mx:columns>
            <mx:DataGridColumn headerText="客户端" dataField="@label" width="100"/>
            <mx:DataGridColumn headerText="信息" dataField="@data" width="200"/>
        </mx:columns>
    </mx:DataGrid>
</mx:Application>



ASP:

<%
dim IPDataArr,IPQuery,IPDataStr,country,city
ipdata = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If ipdata = "" Then ipdata = Request.ServerVariables("REMOTE_ADDR")
IPDataArr=Split(ipdata,".")
IPDataStr=Cint(IPDataArr(0))*16777216 + Cint(IPDataArr(1))*65536 + Cint(IPDataArr(2))*256 + Cint(IPDataArr(3))
  Set conn = Server.CreateObject("ADODB.Connection")
  DBPath = Server.MapPath("ipaddress.mdb")
  conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& DBPath
  Set rs = Server.CreateObject("ADODB.Recordset")
  SQL="select * from ipdatatable where ip1<="&IPDataStr&" AND ip2>="&IPDataStr&""
  rs.Open SQL,conn,1,3
  FOR I=1 TO RS.recordcount
  if rs.Eof then Exit For
if rs.eof and rs.bof then
country="none"
city="none"
else
country=rs("country")
city=rs("city")
end if
if rs("city")="CSSFLEX" then CF=rs("city")
  rs.movenext
  next
%>
<?xml version="1.0" encoding="utf-8"?>
  <Provinces>
            <Province label="ipdata" data="<%=ipdata%>" />
            <Province label="country" data="<%=country%>" />
            <Province label="city" data="<%=city%>" />
  </Provinces> 
<%
          set rs=nothing
          conn.close
          set conn=nothing
%>




Java取得客户端IP地址

最近做一个安全系统,需要对用户的 ip 和 mac 地址进行验证,这里用到获取客户端ip和mac地址的两个方法,留存。

1.获取客户端ip地址( 这个必须从客户端传到后台):
   jsp页面下,很简单,request.getRemoteAddr() ;
   因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换
   public String getMyIP() {
        try {
            FacesContext fc = FacesContext.getCurrentInstance();
            HttpServletRequest request = (HttpServletRequest)fc.getExternalContext().getRequest();
            return request.getRemoteAddr();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }


2.获取客户端mac地址
    调用window的命令,在后台Bean里实现 通过ip来获取mac地址。方法如下:
    public String getMACAddress(String ip){
        String str = "";
        String macAddress = "";
        try {
            Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
            InputStreamReader ir = new InputStreamReader(p.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            for (int i = 1; i < 100; i++) {
                str = input.readLine();
                if (str != null) {
                    if (str.indexOf("MAC Address") > 1) {
                        macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());
                        break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
        return macAddress;
    }




javascript获取客户端网卡MAC地址和IP地址和计算机名

在做 B/S 结构的系统时,我们常常需要获取客户端的一些信息,如 IP 和 MAC ,以结合身份验证。 要获取服务器端的 MAC 很容易,但是要获取客户端的 MAC 的地址确要花费一翻心思,通常的做法是调用 Win32API 或直接调用 nbtstat 命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用 Javascript ,这样做的好处是不需要服务器端进行处理,有客户端自行获取,传递到服务器端,且速度和可靠性都比在服务器端获取好。
具体实现的html和javascript如下:
<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
 document.forms[0].txtMACAddr.value=unescape(MACAddr);
 document.forms[0].txtIPAddr.value=unescape(IPAddr);
 document.forms[0].txtDNSName.value=unescape(sDNSName);
 //document.formbar.submit();
  </SCRIPT>

<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
   if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
   {
    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
    MACAddr = objObject.MACAddress;
    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
    IPAddr = objObject.IPAddress(0);
    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
    sDNSName = objObject.DNSHostName;
    }
  </SCRIPT>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
<SCRIPT language=JScript>
   var service = locator.ConnectServer();
   var MACAddr ;
   var IPAddr ;
   var DomainAddr;
   var sDNSName;
   service.Security_.ImpersonationLevel=3;
   service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
   </SCRIPT>

<FORM id="formfoo" name="formbar" action="index.do" method="post"><INPUT value="00-11-11-B4-52-EF"   name="txtMACAddr"> <INPUT value="210.42.38.50"  name="txtIPAddr"> <INPUT value="zhupan" name="txtDNSName"> </FORM></BODY></HTML>


其实最关键的还是用到两个ActiveX:
        <OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
        <OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
        不过这两个ActiveX都是系统自带,不用去下载或注册。
        接下来的工作就是用脚本和ActiveX交互


附件:Javascript和swf通讯基础

需要这个包
import flash.external.ExternalInterface;

这是一个静态类,主要用两个方法:
ExternalInterface.addCallback(给Javascript的接口,AS函数位置,AS函数名)
ExternalInterface.call(Javascript函数名,传值)

AS给做一个接口,然后Flash就可以访问AS的接口,从而可以调用AS的函数

ExternalInterface.addCallback("browse",this,upBrowse);
其中borwse是javascript可以调用flash 的接口,upBrowse是AS的函数

ExternalInterface.call("upAllComplete",upCount);
这个是AS调用Javascript的接口
其中upAllComplete是Javascript的函数,upCount是需要传递的参数

废话少说,例子上。

这个是AS调JS

AS代码:
ExternalInterface.call("upAllComplete",upCount);


JS代码:
function upAllComplete(upData){
    //upData是AS中的upCount传过来的值,可以是对象,数组,字符串 ,数字
    alert(upData);
}


这个是JS调用AS的(有点麻烦)

html代码:
<object type="application/x-shockwave-flash" data="test.swf" width="525" height="390" name="testcommand">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="test.swf" />
<param name="quality" value="high" />
<param name="scale" value="noScale" />
<param name="wmode" value="transparent" />
</object>


JS代码:
function thisMovie(movieName) {
    if (navigator.appName.indexOf ("Microsoft") !=-1) {
         return window[movieName];
    } else {
         return document[movieName];
    }
}

thisMovie("testcommand").browse(toSwfData);
//testcommand是HTML中Object的id和name,name和id要一样,这个是考虑到浏览器兼容性
//browse是swf函数upBrowse的映射名称


AS代码:
function upBrowse(jsData){
   trace(jsData);
}
ExternalInterface.addCallback("browse",this,upBrowse);
//映射upBrowse这个函数为接口browse


分享到:
评论

相关推荐

    asp下取得客户端IP地址函数 转换IP地址函数

    ‘****************************** ‘函数:Userip() ‘参数:无 ‘作者:阿里西西 ‘日期:2007/7/12 ‘描述:取得客户端IP地址 ‘示例:&lt;&#37;=Userip()%&gt; ‘****************************** Function Userip...

    一个可以取得客户端的ip、地理信息、浏览器、本地真实IP的php类库.zip

    在用户访问服务器时,服务器可以从`REMOTE_ADDR`、`HTTP_X_FORWARDED_FOR`、`HTTP_CLIENT_IP`等环境变量中获取客户端IP。如果用户经过了代理服务器,可能需要处理多个IP地址,通常`HTTP_X_FORWARDED_FOR`会包含用户...

    一个可以取得客户端的ip、地理信息、浏览器、本地真实IP的php类库

    1. 获取客户端IP:通过分析`$_SERVER`数组,考虑到代理服务器的情况,提供一个统一的方法获取用户IP。 2. 获取地理信息:可能内置了与GeoIP数据库交互的逻辑,或者提供接口调用外部API。 3. 获取浏览器信息:解析`$_...

    ASP.NET获取真正的客户端IP地址的6种方法

    在ASP中使用 Request.ServerVariables(“REMOTE_ADDR”) 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。 要想透过代理服务器取得客户端的...

    c# 取得客户端的信息

    1. **客户端IP地址** - **代码实现**: ```csharp string clientIP = Request.ServerVariables["REMOTE_ADDR"].ToString(); ``` - **说明**:`Request.ServerVariables["REMOTE_ADDR"]` 返回的是客户端的IP地址...

    web端不限制浏览器获取客户端MAC+IP地址进行权限安全校验

    web端项目通过浏览器访问的项目获取客户端mac地址及ip地址,进行登录权限校验; web端通过浏览器访问的项目增加权限; 本次项目由于对数据安全性要求较为严格,所以增加了用户在登录时对于客户端电脑的ip地址和mac...

    asp HTTP_X_FORWARDED_FOR和REMOTE_ADDR

    在Request.ServerVariables中并没有HTTP_X_FORWARDED_FOR这个变量,只有REMOTE_ADDR这个变量,但是这两个变量都能够取得客户端IP地址。那么他们之间的区别是什么呢? 在ASP中使用 Request.ServerVariables(“REMOTE_...

    PHP获取客户端真实IP地址的5种情况分析和实现代码

    在PHP获取客户端IP中常使用 $_SERVER[“REMOTE_ADDR”] 。 (1) 但如果客户端是使用代理服务器来访问,那取到的是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,...

    c# 取得客户IP

    在IT领域,特别是Web开发中,获取客户端IP地址是一项常见且重要的需求。这不仅用于统计分析,如了解网站访问者的位置分布,还广泛应用于安全控制、个性化推荐、地理定位服务等多个方面。C#作为.NET框架的主要编程...

    WCF 学习笔记(包括WCF基本知识、Security、MSMQ、Transaction等等)

    - **WCF取得客户端IP**:介绍获取客户端IP地址的方法。 通过上述内容可以看出,WCF不仅提供了一个统一的开发框架来构建分布式应用,还包含了大量高级特性,如安全性、事务处理、消息队列集成等。对于希望构建健壮、...

    php取得用户IP地址类.zip

    1. `$_SERVER['REMOTE_ADDR']`:这是最常用的获取用户IP的方法,它返回客户端的IP地址。然而,如果用户通过代理服务器访问,此变量可能只显示代理服务器的IP,而不是实际用户的IP。 2. `$_SERVER['...

    超实用常用的php函数().docx

    3. **取得客户端 IP 地址**:`$_SERVER['REMOTE_ADDR']` 变量通常用于获取访问者的真实IP地址,但在某些网络环境(如代理服务器)下可能需要结合其他变量如 `$_SERVER['HTTP_X_FORWARDED_FOR']` 来获取准确IP。...

    Java面试之如何获取客户端真实IP

    在Java中,我们可以使用request.getRemoteAddr()方法来获取客户端的IP地址,但是这种方法有一个缺陷,就是当我们使用了nginx反向服务器后,在web端使用request.getRemoteAddr()方法取得的是nginx的地址,而不是用户...

    利用Nginx_geo模块实现CDN调度的配置方法

    引入Nginx的Geo模块 ... ...使用方法如下: geo指令 语法: geo [$address] $variable { ......默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量获得。 在/usr/local/nginx/conf/

    LabVIEW获取IP地址

    LabVIEW自动检测获取本机IP地址。 项目可直接运行~

    使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果

    标题《使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果》和描述《我的建议是不要再使用上面的方法去获取客户端IP.即是不要再理会代理情况.》所引出的知识点主要围绕着网络编程中获取客户端真实IP地址的问题及其潜在...

Global site tag (gtag.js) - Google Analytics