Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23327
  • 博文数量: 3
  • 博客积分: 219
  • 博客等级: 入伍新兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-04 03:17
个人简介

非得有个一句话介绍吗

文章分类

全部博文(3)

文章存档

2013年(3)

我的朋友

分类: Python/Ruby

2013-01-17 15:41:31

由于flash的安全机制,如果需要访问第三方网站的资源,则需要第三方网站的允许,这就是policy server的作用。

Policy server的原理和协议
Policy server是TCP协议上的echo server, 协议非常简单:
1. 客户端以socket方式向服务器端发送请求, 请求为明文的xml字符串, 并以”\0”结尾: ""
2. 服务端收到该字符串返回后以回复一个xml(同样以”\0”结尾), 

   SYSTEM "/xml/dtds/cross-domain-policy.dtd">
 
   
   



返回值中最重要, 
1. domain代表来自哪些domain的请求被允许从flash客户端中发出. 例如: 限制了domain=”baidu.com”, 那么从浏览器访问youku.com加载到的flash就不可以向该server发送请求(flash 客户端就会限制)
2. to-ports代表flash 客户端可以访问本server的哪些端口, 例如: 限制了to-ports=”80”, 那么flash客户端就会限制访问该服务器除80外的所有端口, ‘*’意味着不对client设置任何限制.
3. 一般来说上述两个配置适合大部分应用, 更多配置请参考: http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.htm


既然协议及其简单,把Twisted的Echo例子稍加修改即可。

但我这里使用的是Twisted Application的方式运行,可以用twistd脚本来执行的。

好了,废话不多说,直接上代码:

#!/usr/bin/env python

from twisted.application import internet, service
from twisted.internet import reactor, protocol

port = 843

xml = '''  
  
  
  
    
    
\0'''

class Policy(protocol.Protocol):
    def dataReceived(self, data):
        if data[-1] != '\0':
            return

        if data == '\0':
            self.transport.write(xml)

        self.transport.loseConnection()

class PolicyFactory(protocol.ServerFactory):
    protocol = Policy

factory = PolicyFactory()
application = service.Application("Policy Server")
policyserver = internet.TCPServer(port, factory)
policyserver.setServiceParent(application)


运行时,使用如下命令即可:

sudo twistd -y policysrv.py 

我晕,这编辑器,输入时还有\0, 显示出来就没有了。代码如图,如要拷贝,请将对应的\0添加上.

阅读(1115) | 评论(2) | 转发(0) |
0

上一篇:没有了

下一篇:chromium只有一个tab时没有了tab栏

给主人留下些什么吧!~~

jakieyoung2013-01-18 15:41:13

输入时还有\0, 显示出来就没有了。代码如图,如要拷贝,请将对应的\0添加上
还好,回复时可以输入

jakieyoung2013-01-18 15:40:35

我服了,\0就是输入不进去