前台是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
分享到:
相关推荐
‘****************************** ‘函数:Userip() ‘参数:无 ‘作者:阿里西西 ‘日期:2007/7/12 ‘描述:取得客户端IP地址 ‘示例:<%=Userip()%> ‘****************************** Function Userip...
在用户访问服务器时,服务器可以从`REMOTE_ADDR`、`HTTP_X_FORWARDED_FOR`、`HTTP_CLIENT_IP`等环境变量中获取客户端IP。如果用户经过了代理服务器,可能需要处理多个IP地址,通常`HTTP_X_FORWARDED_FOR`会包含用户...
1. 获取客户端IP:通过分析`$_SERVER`数组,考虑到代理服务器的情况,提供一个统一的方法获取用户IP。 2. 获取地理信息:可能内置了与GeoIP数据库交互的逻辑,或者提供接口调用外部API。 3. 获取浏览器信息:解析`$_...
在ASP中使用 Request.ServerVariables(“REMOTE_ADDR”) 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正的客户端IP地址。 要想透过代理服务器取得客户端的...
1. **客户端IP地址** - **代码实现**: ```csharp string clientIP = Request.ServerVariables["REMOTE_ADDR"].ToString(); ``` - **说明**:`Request.ServerVariables["REMOTE_ADDR"]` 返回的是客户端的IP地址...
web端项目通过浏览器访问的项目获取客户端mac地址及ip地址,进行登录权限校验; web端通过浏览器访问的项目增加权限; 本次项目由于对数据安全性要求较为严格,所以增加了用户在登录时对于客户端电脑的ip地址和mac...
在Request.ServerVariables中并没有HTTP_X_FORWARDED_FOR这个变量,只有REMOTE_ADDR这个变量,但是这两个变量都能够取得客户端IP地址。那么他们之间的区别是什么呢? 在ASP中使用 Request.ServerVariables(“REMOTE_...
在PHP获取客户端IP中常使用 $_SERVER[“REMOTE_ADDR”] 。 (1) 但如果客户端是使用代理服务器来访问,那取到的是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,...
在IT领域,特别是Web开发中,获取客户端IP地址是一项常见且重要的需求。这不仅用于统计分析,如了解网站访问者的位置分布,还广泛应用于安全控制、个性化推荐、地理定位服务等多个方面。C#作为.NET框架的主要编程...
- **WCF取得客户端IP**:介绍获取客户端IP地址的方法。 通过上述内容可以看出,WCF不仅提供了一个统一的开发框架来构建分布式应用,还包含了大量高级特性,如安全性、事务处理、消息队列集成等。对于希望构建健壮、...
1. `$_SERVER['REMOTE_ADDR']`:这是最常用的获取用户IP的方法,它返回客户端的IP地址。然而,如果用户通过代理服务器访问,此变量可能只显示代理服务器的IP,而不是实际用户的IP。 2. `$_SERVER['...
3. **取得客户端 IP 地址**:`$_SERVER['REMOTE_ADDR']` 变量通常用于获取访问者的真实IP地址,但在某些网络环境(如代理服务器)下可能需要结合其他变量如 `$_SERVER['HTTP_X_FORWARDED_FOR']` 来获取准确IP。...
在Java中,我们可以使用request.getRemoteAddr()方法来获取客户端的IP地址,但是这种方法有一个缺陷,就是当我们使用了nginx反向服务器后,在web端使用request.getRemoteAddr()方法取得的是nginx的地址,而不是用户...
引入Nginx的Geo模块 ... ...使用方法如下: geo指令 语法: geo [$address] $variable { ......默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量获得。 在/usr/local/nginx/conf/
LabVIEW自动检测获取本机IP地址。 项目可直接运行~
标题《使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果》和描述《我的建议是不要再使用上面的方法去获取客户端IP.即是不要再理会代理情况.》所引出的知识点主要围绕着网络编程中获取客户端真实IP地址的问题及其潜在...