在cherrypy中获取原始目的ip
Obtaining original destination ip in cherrypy
我是 运行 cherrypy 服务器上的强制门户,我已经设置了 iptables 规则,将所有 http 流量从未注册的 MAC 地址重定向到门户。用户通过门户启动页面向我注册后,我添加了一个 iptables 异常以允许他们的流量通过。
现在我想做的是将用户重定向到他们最初访问的页面 - 在他们被发送到门户之前。我知道 iptables 为所有 TCP 数据包设置了一个包含原始目标信息的字段,并且我知道有一个名为 getsockopt 的 C 函数可以读取该字段。但是,我不知道如何访问与cherrypy中的请求关联的套接字。
有人能帮帮我吗? :)
我不是低级网络方面的专家,也不知道开放 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)
我是 运行 cherrypy 服务器上的强制门户,我已经设置了 iptables 规则,将所有 http 流量从未注册的 MAC 地址重定向到门户。用户通过门户启动页面向我注册后,我添加了一个 iptables 异常以允许他们的流量通过。
现在我想做的是将用户重定向到他们最初访问的页面 - 在他们被发送到门户之前。我知道 iptables 为所有 TCP 数据包设置了一个包含原始目标信息的字段,并且我知道有一个名为 getsockopt 的 C 函数可以读取该字段。但是,我不知道如何访问与cherrypy中的请求关联的套接字。
有人能帮帮我吗? :)
我不是低级网络方面的专家,也不知道开放 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)