在cherrypy中获取原始目标ip

2024-05-21 15:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在cherrypy服务器上运行一个捕获门户,我已经设置了iptables规则,将所有http流量从未注册的MAC地址重定向到门户。在用户通过门户网站启动页面向我注册后,我添加了一个iptables异常,让他们的流量通过。
现在我要做的是,在用户被发送到门户之前,将用户重定向到他们最初要访问的页面。我知道iptables用所有TCP包的原始目的地信息设置一个字段,我知道有一个名为getsockopt的C函数来读取该字段。但是,我不知道如何访问cherrypy中与请求相关联的套接字。在

有人能帮我吗?:)


Tags: 用户服务器httpiptables门户面向规则mac
1条回答
网友
1楼 · 发布于 2024-05-21 15:55:08

我不是低层网络的专家,也不知道普通的开放式Wi-Fi授权是如何标记客户机的。但在我看来,在OSI model中,下层对上层一无所知。换句话说,IP不知道HTTP术语和页面URL。在

通过这种方式,手头有一个套接字引用,我相信可以通过定制CherryPy来检索,这样最多只能提供原始IP地址,而不是URL。此外,混合使用网络(IP)和应用程序(HTTP)层,并且通常在多个地方管理一个应用程序实体,可能会导致各种各样的问题。例如,处理HTTP代理,例如前向代理和反向代理,这不会保留较低层的细微差别。在

更新

好的,既然您说您也有请求URL,下面是如何检索原始套接字的方法。正如您所看到的,这是一个深入的引擎盖,基本上是一个最终用户不应该依赖的实现细节。它不是合同的一部分,可以在下一个版本中更改。所以你有一个很好的机会开枪打自己的脚。在

#!/usr/bin/env python


import cherrypy


config = {
  'global' : {
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
    'server.thread_pool' : 8
  },
}


class App:

  @cherrypy.expose
  def index(self):
    '''For caveats and details on the slippery slope, take a look at ws4py
    https://github.com/Lawouach/WebSocket-for-Python/blob/master/ws4py/server/cherrypyserver.py
    '''
    print(cherrypy.serving.request.rfile.rfile._sock)

    return 'Make sure you know what you are doing.'


if __name__ == '__main__':
  cherrypy.quickstart(App(), '/', config)

相关问题 更多 >